【发布时间】:2012-06-09 18:42:32
【问题描述】:
我有一组 jar 文件,它们的依赖项呈菱形:
base.jar
/ \
dep1.jar dep2.jar
\ /
dep3.jar
我想用 ProGuard 混淆它们以保留它们的依赖关系,例如,base.jar 和 dep2.jar 的混淆版本可以单独执行,而没有 dep1.jar 和 dep3.jar 的混淆版本(尽他们所能,不混淆)。在具有相同包名称的 jar 中分布有类,而依赖 jar 中的方法在它们所依赖的 jar 中调用方法(在各种类中)我想被混淆。 p>
当我尝试一次混淆所有 jar 时,ProGuard 不会“理解”它们的依赖关系;并从 base.jar 中的类中获取静态方法,并将其移动到 dep1.jar 中的混淆类中。如果 dep1.jar 不在类路径中,则 dep2.jar 的混淆版本中“预期”base.jar 中的该方法的代码在运行时会失败。
如何确保保留混淆 jar 中的依赖项?
文档建议使用incremental obfuscation,但它似乎需要的-applymapping 开关只能采用一个参数告诉依赖方法在调用罐子时使用的混淆名称他们依赖于,首先被混淆。 dep1.jar 的混淆可以产生一个这样的映射文件参数,而 dep2.jar 的混淆可以产生另一个,但是 dep3.jar 的混淆需要 both 那些映射文件(加上 base.jar ?) 在其-applymapping 参数中。 dep1.jar 和 dep2.jar 不能一起混淆(或者他们可以吗?),但是,以生成单个映射文件,因为代码可能会从一个重新定位到另一个。 我必须自己合并映射文件吗?
【问题讨论】:
标签: java jar obfuscation proguard