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

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

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

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

Solutions Collecting From Web of "Proguard是否保证提供相同的映射,如果没有来源改变?"

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

有一个细微之处:如果操作系统以不同的顺序在目录中列出input文件(特别是不在档案内的类文件),则它们可以以不同的顺序处理,并且输出可以不同。

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

我在Proguard文档中发现了这个,它将允许您重新使用您的mapping.txt来避免映射的变化

-applymapping文件名

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

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