cru*_*sam 13 obfuscation verification proguard java-7
我们使用的是最新的JDK 7(u45)和ProGuard版本4.10
在混淆之后,最初开始我们的分发失败,出现以下错误:
Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at
branch target 155
Exception Details:
Location:
com/bla/bla/service/ioc/SpringBootstrap.c()V @0: getstatic
Reason:
Expected stackmap frame at this location.
Bytecode:
0000000: b200 73b6 008b 9900 82b2 0073 b800 933b
0000010: 1a99 0074 b200 73b6 008d 9900 6bb2 0074
0000020: 1221 b600 cfb8 0092 4c2b b600 9c12 1db9
...
Exception Handler Table:
bci [0, 152] => handler: 155
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我在StackOverflow上找到了关于这个主题的几个讨论,比如
据我所知,java 7使用更严格的验证,并为类引入了堆栈映射以验证代码.所以在我的混淆过程中,这个地图似乎被破坏了,因为当我用proguard混淆我的项目时,只发生了这个异常.
使用-XX禁用验证:-UseSplitVerifier并启动构建的jar有帮助,但我不确定这是否应该是处理此问题的方式.
所以我想知道是否有其他人有类似的错误?或者,如果有人甚至可能知道解决此问题的具体方法,例如通过调整混淆过程的proguard配置?
Eri*_*une 23
我假设你没有指定-dontpreverify?该选项几乎肯定会导致这些错误,因为它会阻止ProGuard更新StackMapTable属性.该属性在Java 6中是可选的,但在Java 7中是必需的.
您仍然可以尝试ProGuard 4.11的测试版,但它不太可能在这里有所作为.如果你把处理过的类文件邮寄给我,我会调查一下.
(我是ProGuard的开发人员)
| 归档时间: |
|
| 查看次数: |
7384 次 |
| 最近记录: |