在这种情况下,如果我愿意
- 建立一个项目
- 清理所有二进制文件
- 再次构建它(没有源/资源等已更改)。
Proguard 是否保证提供相同的 mapping.txt 文件?
ProGuard 是确定性的:对于相同的输入,它将生成相同的输出。
但是有一个微妙之处:如果操作系统以不同的顺序列出目录中的输入文件(特别是不在存档中的类文件),那么它们可能会以不同的顺序进行处理,并且输出可能会不同。
它实际上可能会发生,但我认为 proguard 不能保证这一点。
我在Proguard 文档中发现了这一点,它允许您重用 mapping.txt 以避免更改映射
-应用映射文件名
指定重用在先前的 ProGuard 混淆运行中打印出的给定名称映射。映射文件中列出的类和类成员接收与其一起指定的名称。未提及的类和类成员将获得新名称。映射可以引用输入类以及库类。此选项可用于增量混淆,即处理现有代码的附加组件或小补丁。如果代码结构发生根本性变化,ProGuard 可能会打印出应用映射导致冲突的警告。您可以通过在两次混淆运行中指定选项 -useuniqueclassmembernames 来降低这种风险。只允许一个映射文件。仅在混淆时适用。
如果您想要保证,那么您必须使用映射文件作为混淆过程的输入。但是,您必须仔细检查与该映射文件相关的所有冲突警告。如果您忽略这一点,则在使用反射时可能会出现细微的错误。