30

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

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

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

4

3 回答 3

44

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

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

于 2012-12-01T22:31:33.893 回答
7

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

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

-应用映射文件名

指定重用在先前的 ProGuard 混淆运行中打印出的给定名称映射。映射文件中列出的类和类成员接收与其一起指定的名称。未提及的类和类成员将获得新名称。映射可以引用输入类以及库类。此选项可用于增量混淆,即处理现有代码的附加组件或小补丁。如果代码结构发生根本性变化,ProGuard 可能会打印出应用映射导致冲突的警告。您可以通过在两次混淆运行中指定选项 -useuniqueclassmembernames 来降低这种风险。只允许一个映射文件。仅在混淆时适用。

于 2012-11-28T20:51:52.143 回答
0

如果您想要保证,那么您必须使用映射文件作为混淆过程的输入。但是,您必须仔细检查与该映射文件相关的所有冲突警告。如果您忽略这一点,则在使用反射时可能会出现细微的错误。

于 2012-11-29T19:01:14.587 回答