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