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.a
和 my.domain.lib2.a.a
?
编辑:混淆发生在构建库的过程中,而不是在构建应用程序时。
这可以通过将-repackageclasses my.domain.lib#.ofs
放入每个库的proguard-rules
文件中,同时将#
分别替换为1
和2
来解决。这会将所有混淆的 类 移动到 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
我正在编写 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.a
和 my.domain.lib2.a.a
?
编辑:混淆发生在构建库的过程中,而不是在构建应用程序时。
这可以通过将-repackageclasses my.domain.lib#.ofs
放入每个库的proguard-rules
文件中,同时将#
分别替换为1
和2
来解决。这会将所有混淆的 类 移动到 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