我正在用 proguard 优化一个 jar,但优化后它崩溃了。 这是我的 proguard 任务:
<proguard>
-injars ${dist}/${jarname}
-outjars ${dist}-proguard/${jarname}
-target 5
-libraryjars '${java.home}/lib/rt.jar'
-dontobfuscate
-optimizationpasses 4
-overloadaggressively
-repackageclasses ''
-allowaccessmodification
-keep public class * {
public static void main(java.lang.String[]);
}
</proguard>
一旦我输入 -dontoptimize 选项,它就起作用了。
根据异常堆栈,当使用空指针访问类的静态公共(public)成员时,它会崩溃。这是代码:
public static Texture ring, dust, spikering, thinring, crystal, clouds;
public static void init() {
Field [] fields = TexturePool.class.getDeclaredFields();
for (Field field : fields) {
if(field.getType() == Texture.class) {
field.set( null, /*imagine new object here*/ );
}
}
}
谢谢!
最佳答案
好吧,我自己才发现。我认为优化完全优化了类成员,因为它们在此类中不是直接访问的。如果我指定选项:
-keepclassmembers public class com.package.** {
public static * ;
}
即使经过优化也能正常工作。
关于java混淆器: library doesnt work after optimization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1697025/