繁体   English   中英

Proguard:如何不优化库中的类

[英]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而不处理它们的简单效果。

dontnotedontwarn选项用于禁止显示注释和警告,对于简单的合并操作而言,它们是虚假的(并且会有很多)。

第一遍应该看起来像:

-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM