我有一个 jar 文件的集合,这些文件的依赖项呈菱形:
base.jar
/\
dep1.jar dep2.jar
\
/dep3.jar
我想用 ProGuard 混淆它们以保留它们的依赖关系,例如,base.jar 和 dep2.jar 的混淆版本可以单独执行,而没有 dep1.jar 和 dep3.jar 的混淆版本(就像他们可以,没有混淆)。在它们所依赖的 jar 中,分布在具有相同包名称的 jar 中的类,以及调用我想要混淆的方法(在各种类中)的依赖 jar 中的方法。
当我尝试一次混淆所有 jar 时,ProGuard 不会“理解”它们的依赖关系;并从 base.jar 中的类中获取静态方法,并将其移动到 dep1.jar 中的混淆类中。如果 dep1.jar 不在类路径中,则 dep2.jar 的混淆版本中“预期”base.jar 中的该方法的代码在运行时会失败。
如何确保保留混淆 jar 中的依赖项?
该文档建议使用增量混淆,但-applymapping
它似乎需要的开关只能接受一个参数,告诉依赖方法在调用它们所依赖的 jar 时使用的混淆名称,这些名称首先被混淆。dep1.jar 的混淆可以产生一个这样的映射文件参数,而 dep2.jar 的混淆可以产生另一个,但是 dep3.jar 的混淆在它的参数中需要这两个映射文件(加上 base.jar?)-applymapping
。dep1.jar 和 dep2.jar 不能一起混淆(或者它们可以混淆吗?),但是,以生成单个映射文件,因为代码可能会从一个重新定位到另一个。我必须自己合并映射文件吗?