Android 库 proguard 包混淆产生 a.a.a.a.a 冲突

Android library proguard package obfuscation produces a.a.a.a.a collision

我正在编写 2 个 Android 库。当我混淆两者时,它们中的混淆代码都包含一个名为 a.a.a.a.a 的 class,当尝试在同一应用程序中使用这两个库时会导致以下错误:

Duplicate class a.a.a.a.a found in modules classes.jar (lib1) and classes.jar (lib2)

如何防止 Proguard 混淆前 3 个包以结束:

my.domain.lib1.a.amy.domain.lib2.a.a?

编辑:混淆发生在构建库的过程中,而不是在构建应用程序时。

这可以通过将-repackageclasses my.domain.lib#.ofs放入每个库的proguard-rules文件中,同时将#分别替换为12来解决。这会将所有混淆的 类 移动到 my.domain.lib#.ofs 包中,而所有未混淆的 类 将保留在它们的原始包中,并且您保证不会发生冲突。

Proguard documentation 所述:

-repackageclasses [package_name]

Specifies to repackage all class files that are renamed, by moving them into the single given package.

另一个解决方案是使用 -keeppackagenames。不幸的是,我找不到让它 只保留前 3 个包 的方法。

参见 Proguard documentation:

-keeppackagenames [package_filter]

Specifies not to obfuscate the given package names.

将下面的代码添加到 proguard-rules.pro 文件。

-keeppackagenames