Netbeans Proguard:如何不从库中优化类

Netbeans Proguard:如何不从库中优化类,netbeans,obfuscation,proguard,Netbeans,Obfuscation,Proguard,我有一个JavaME项目,其中必须包含一个给定的库。我使用的是Netbeans 6.8,所以我刚刚将库添加到项目中。然后将库的类正确打包到生成的jar文件中 我现在的问题是Proguard模糊处理程序不能触及该库的类。因此,我尝试了不同的保留选项: -保持类com.package** 我也尝试过-keepnames和-keepclassmembers,但Proguard将不再说: 编辑代码时出现意外错误: Class=[com/package/Class] 方法=[run()V] 异常=[jav

我有一个JavaME项目,其中必须包含一个给定的库。我使用的是Netbeans 6.8,所以我刚刚将库添加到项目中。然后将库的类正确打包到生成的jar文件中

我现在的问题是Proguard模糊处理程序不能触及该库的类。因此,我尝试了不同的保留选项:

-保持类com.package**

我也尝试过-keepnames和-keepclassmembers,但Proguard将不再说:

编辑代码时出现意外错误:

Class=[com/package/Class]

方法=[run()V]

异常=[java.lang.IllegalArgumentException](长度为[1075]的代码中的指令偏移量[1077]无效)

错误:长度为[1075]的代码中的指令偏移量[1077]无效

有没有办法告诉Proguard忽略某个库或某个类

提前谢谢

然后将库的类正确打包到 生成的jar文件

这就是你的问题所在。一旦它在提供给Proguard的jar中,它就会被处理。我相信您一定在创建一个包含所有依赖项的大罐子。如果是这样,请从这个大jar中排除JavaME代码,并将其保存在单独的jar中。那么Proguard不会处理它


否则,找到一种方法将JavaMe代码移动到一个单独的jar中,并使其成为您提供给Proguard的jar的依赖项

如果您希望ProGuard保持库未被触及,则应使用-libraryjars而不是-injars来指定它:

-libraryjars somelibrary.jar
它的类不会包含在输出jar中,因此您仍然需要将库jar添加到已处理应用程序的类路径中

或者,您可以将库jar作为输入jar处理,但保留其类和类成员:


现在,意外的错误有所不同。它表示ProGuard中存在错误。您应该确保使用的是最新版本的ProGuard。否则,您应该在Sourceforge上的ProGuard bug tracker上报告问题。

您可以在单独的过程中与ProGuard组合JAR,并指定以下选项:

-dontnote **
-dontwarn **
-dontobfuscate
-dontshrink
-dontoptimize
它有一个简单的效果,将罐子组合在一起而不进行任何处理

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

想要构建一个包含所有依赖项但只有ProGuard处理的应用程序部分的分发JAR是一个非常常见的需求;也许您可以添加一个像inlibraryjars这样的新选项来启用此功能(请参阅我的答案,因为在不进行任何处理的情况下进行组合仍然会发出警告,如果作为第二个过程进行组合)。
-injars        MyApplication-Obfuscated.jar
-injars        SomeLibraryJar.jar(!META-INF/**)
-injars        AnotherLibraryJar.jar(!META-INF/**)
-outjars       MyApplication.jar

-dontnote **
-dontwarn **
-dontobfuscate
-dontshrink
-dontoptimize