Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java proguard:优化后库不工作_Java_Optimization_Obfuscation_Proguard - Fatal编程技术网

java proguard:优化后库不工作

java proguard:优化后库不工作,java,optimization,obfuscation,proguard,Java,Optimization,Obfuscation,Proguard,我正在用proguard优化一个jar,但优化后它崩溃了。 以下是我的proguard任务: <proguard> -injars ${dist}/${jarname} -outjars ${dist}-proguard/${jarname} -target 5 -libraryjars '${java.home}/lib/rt.jar' -dontobfuscate

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

根据:

“我总是能够通过不使用Proguard参数来解决问题”-overload“。”

也许你也应该试试


编辑:问题很容易是分配被优化了。在定义字段的源代码中发生的初始化实际上是由编译器在静态代码blokc中完成的。看来优化会对此进行修补。优化过程较少时会发生什么情况?

根据:

“我总是能够通过不使用Proguard参数来解决问题”-overload“。”

也许你也应该试试



编辑:问题很容易是分配被优化了。在定义字段的源代码中发生的初始化实际上是由编译器在静态代码blokc中完成的。看来优化会对此进行修补。优化过程越少会发生什么?

好的,我刚刚发现了自己。我认为优化完全优化了类成员,因为它们不是在这个类中直接访问的。如果我指定该选项:

        -keepclassmembers public class com.package.** {
            public static * ;
        }

它甚至可以用于优化。

好的,我刚刚发现了自己。我认为优化完全优化了类成员,因为它们不是在这个类中直接访问的。如果我指定该选项:

        -keepclassmembers public class com.package.** {
            public static * ;
        }

它甚至可以与优化一起工作。

我在ProGuard优化仅使用反射API修改的类字段时也遇到了同样的问题。但是,建议的答案对我来说不起作用,因为代码库中分散了太多的类,无法指定类过滤器

相反,禁用字段优化为我带来了好处:

-optimizations !field/*

我在ProGuard优化只使用反射API修改的类字段时遇到了同样的问题。但是,建议的答案对我来说不起作用,因为代码库中分散了太多的类,无法指定类过滤器

相反,禁用字段优化为我带来了好处:

-optimizations !field/*


我真的不相信访问(检索,或者你是说其他什么)成员会抛出NullPointerException。您的意思是该成员可以访问,但其本身为null,因此在尝试使用该成员时会引发NullPointerException吗?如果是这样的话,期望值从何而来?谢谢,在访问之前,成员是在我调用的函数中初始化的。我问过这个问题,但为什么不告诉我们到底出了什么问题?NullPointerException的原因是什么?访问成员时出现一些VM内部错误(正如您的帖子所暗示的),或者只是该成员为null,因此当您尝试访问成员实例时会抛出NullPointerException?这是一个很好的例子,说明除非您确实有充分的理由,否则通常不应使用混淆器。您基本上需要重新测试您的应用程序,因为您不知道编译器生成的糟糕字节码已被处理。@jarnbjo:好的,我将尝试提供一个测试用例@thorbjorn:我同意,不过我还是很感兴趣,为什么proguards优化会导致crashI真的不相信访问(检索,或者你是说其他什么)成员会抛出NullPointerException。您的意思是该成员可以访问,但其本身为null,因此在尝试使用该成员时会引发NullPointerException吗?如果是这样的话,期望值从何而来?谢谢,在访问之前,成员是在我调用的函数中初始化的。我问过这个问题,但为什么不告诉我们到底出了什么问题?NullPointerException的原因是什么?访问成员时出现一些VM内部错误(正如您的帖子所暗示的),或者只是该成员为null,因此当您尝试访问成员实例时会抛出NullPointerException?这是一个很好的例子,说明除非您确实有充分的理由,否则通常不应使用混淆器。您基本上需要重新测试您的应用程序,因为您不知道编译器生成的糟糕字节码已被处理。@jarnbjo:好的,我将尝试提供一个测试用例@thorbjorn:我同意,但我还是很感兴趣为什么proguards优化会导致崩溃,但即使我不选择重载,我也会遇到同样的崩溃。很好。是时候一次调整一个选项了。你一定弄糊涂了?谢谢!好的,只有当我指定0个优化过程时,它才起作用:-优化过程0@Thorbjorn:这不是混淆,而是优化(在proguard中有一个区别!)matt,我读错了代码片段,并将其作为“-obfuscate”出现在相反的地方。谢谢,但即使我不使用重载选项,我也会遇到同样的崩溃。很好。是时候一次调整一个选项了。你一定弄糊涂了?谢谢!好的,只有当我指定0个优化过程时,它才起作用:-优化过程0@Thorbjorn:这不是混淆,而是优化(在proguard中有一个区别!)matt,我读错了代码片段,并将其作为“-obfuscate”,与您的相反。