[英]Proguard: How not to optimize classes from a library
我这里有一个JavaME项目,其中必须包含一个给定的库。 我正在使用Netbeans 6.8,因此我只是将库添加到了项目中。 然后,将库的类正确打包到生成的jar文件中。
我现在的问题是Proguard混淆器一定不能触碰该库的类。 所以我尝试了不同的-keep选项:
-保持类com.package。**
我也尝试过-keepnames和-keepclassmembers,但是Proguard会退出说:
编辑代码时发生意外错误:
类别= [com / package / class]
方法= [run()V]
异常= [java.lang.IllegalArgumentException](长度为[1075]的代码中的无效指令偏移[1077])
错误:代码长度为[1075]的无效指令偏移[1077]
有没有办法告诉Proguard忽略某些库或某些类?
提前致谢!
如果要让ProGuard保持库不变,则应使用-libraryjars而不是-injars来指定它:
-libraryjars somelibrary.jar
它的类不会包含在输出jar中,因此您仍然必须将库jar添加到已处理应用程序的类路径中。
另外,您可以将库jar处理为输入jar,但保留其类和类成员 :
-keep class some.library.** { *; }
现在,意外错误有所不同。 它指示ProGuard中的错误。 您应该确保使用的是最新版本的ProGuard。 否则,您应该在Sourceforge的ProGuard错误跟踪器上报告问题。
您可以使用ProGuard在单独的过程中结合使用JAR,并指定以下选项:
-dontnote **
-dontwarn **
-dontobfuscate
-dontshrink
-dontoptimize
这具有合并JAR而不处理它们的简单效果。
dontnote
和dontwarn
选项用于禁止显示注释和警告,对于简单的合并操作而言,它们是虚假的(并且会有很多)。
第一遍应该看起来像:
-injars MyApplication-Unobfuscated.jar
-libraryjars SomeLibraryJar.jar(!META-INF/**)
-libraryjars AnotherLibraryJar.jar(!META-INF/**)
-outjars MyApplication-Obfuscated.jar
// other options.
第二遍应该看起来像:
-injars MyApplication-Obfuscated.jar
-injars SomeLibraryJar.jar(!META-INF/**)
-injars AnotherLibraryJar.jar(!META-INF/**)
-outjars MyApplication.jar
-dontnote **
-dontwarn **
-dontobfuscate
-dontshrink
-dontoptimize
然后,将库的类正确打包到生成的jar文件中。
那就是你的问题所在。 将其放入Proguard提供的罐子中后,将对其进行处理。 我相信您必须创建一个包含所有依赖项的大罐子。 如果是这样,请从这个大罐子中排除JavaME代码,并将其保存在单独的罐子中。 然后Proguard将不会对其进行处理。
否则,找到一种方法将JavaMe代码移动到单独的jar中,并使它成为您提供给Proguard的jar的依赖项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.