ProGuard Version5.2(4.2)Manual-->Limitations

来源:互联网 发布:可视化编程 编辑:程序博客网 时间:2024/04/30 18:01
当使用ProGuard时,你应该知道一些技术性的问题,所有这些都是很容易避免或解决的:
        最好的结果是,为了获得一些有用的东西,混淆器的优化算法假设处理的代码不会故意抛出NullPointerExceptions或ArrayIndexOutOfBoundsExceptions,甚至OutOfMemoryErrors或StackOverflowErrors。例如,如果调用不会有任何影响,它可能会删除一个方法调用myObject.mymethod()。它忽视myObject为null,造成一个NullPointerException的可能性。在某种程度上,这是一件好事:优化的代码可能会抛出较少的exception。如果这整个的假设是错误的,你必须使用-dontoptimize选项关闭优化。
        混淆器的优化算法目前还假设没有至少测试一个volatile字段的处理代码不会造成忙等待循环。它可以删除这样的循环。如果这整个的假设是错误的,你必须使用-dontoptimize选项关闭优化。
        如果一个输入jar和库jar包含同一包中的类,模糊输出jar可能包含类的名字与库jar的重叠。如果库jar之前被混淆,这是最有可能的,因为它将可能含有命名为'a','b'等的类。因此,软件包应该永远不会被拆分为输入jar和库jar。
        当混淆时,ProGuard写出命名为“a.class”,“b.class”等的类文件。如果包中包含了大量的类,ProGuard也可能写出到“aux.class”。不巧的是,Windows拒绝创建这个保留的文件名(在其他几个名字中)。为了避免这些问题,把输出写在一个jar中是更好的。
0 0
原创粉丝点击