java混淆器: library doesnt work after optimization

标签 java optimization obfuscation proguard

我正在用 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/

相关文章:

java - 如何在 IBM java 1.6 中启用 TLS 1.2?

c# - 使用 Linq 在列表中查找受骗对象

java - 解析 1000 万条记录并将其插入 SQL

javascript - firefox 插件,隐藏 javascript 源代码

java - 优先使用静态类而不是同名变量

java - SpringMVC 和 hibernate : CannotCreateTransactionException: Could not open Hibernate Session for transaction;

java - Oracle 序列 - 'increment by' 和 'cache'

java - 重构 - 除了一个函数调用之外,方法共享相同的代码

swift - 是否可以使用动态属性来保存跨兄弟类的重复排序代码?

android - Proguard 导致 Android 上的 SSL keystore 出现问题