如果没有源更改,Proguard是否保证提供相同的映射?

Vic*_*nin 27 android proguard

在这种情况下,如果我愿意

  • 建立一个项目
  • 清理所有二进制文件
  • 再次构建它(没有源/资源等已经改变).

Proguard是否保证提供相同的mapping.txt文件?

Eri*_*une 39

ProGuard是确定性的:对于相同的输入,它将生成相同的输出.

但有一个微妙之处:如果操作系统以不同的顺序列出目录中的输入文件(特别是不在存档中的类文件),则可以按不同的顺序处理它们,并且输出可以不同.

  • @Diego我是ProGuard的开发者; 你必须相信我这个,或者你可以查看源代码. (21认同)
  • @EricLafortune可以修复,以便ProGuard在所有操作系统中完全确定吗? (3认同)

Rob*_*ill 7

它可能实际发生,但我不认为proguard保证这一点.

我在Proguard文档中发现了这一点,它允许您重用mapping.txt以避免更改映射

-applymapping文件名

指定重用在先前的ProGuard混淆运行中打印出的给定名称映射.映射文件中列出的类和类成员将接收与其一起指定的名称.未提及的类和类成员会收到新名称.映射可以指输入类以及库类.该选项可以是增量模糊处理是有用的,即,处理插件或小补丁到的代码的现有片.如果代码的结构从根本上改变,可以ProGuard的打印出警告,应用映射是造成冲突.您可以通过在这两个混淆运行指定选项-useuniqueclassmembernames来降低这种风险.只允许一个映射文件.仅在混淆时适用.