【问题标题】:How to retain jar dependencies after obfuscating with ProGuard使用 ProGuard 混淆后如何保留 jar 依赖项
【发布时间】: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


    【解决方案1】:

    最简单(尽管次优)的解决方案是一次处理它们,无需优化 (-dontoptimize)。

    【讨论】:

      【解决方案2】:

      我们已经使用 ProGuard 两三年了,在我们的配置中没有 -repackageclasses 标志,我们的 .jar 文件经过混淆处理后仍然正常运行。任何在我们的 .jar 文件中四处寻找的人都可以看到我们的命名空间是 com.[company] ,这是标志可以隐藏的东西,但我们认为这没什么大不了的。没有它你应该没问题。

      (顺便说一句,我想知道您的类名是否在-repackageclasses 生效之前被混淆了,并且某处存在名称冲突?我们曾经遇到过类似的问题。)

      【讨论】:

      • 自从你回答后,我已经重申了我的问题,所以人们可能不明白你回应了我最初的担忧,因为(被我)反驳,-repackageclasses 参数导致了混淆依赖项的变化.
      猜你喜欢
      • 2016-04-22
      • 1970-01-01
      • 2013-06-07
      • 2014-11-17
      • 2014-11-22
      • 2018-02-16
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      相关资源
      最近更新 更多