Android 库 proguard 包混淆产生 a.a.a.a.a 冲突
Posted
技术标签:
【中文标题】Android 库 proguard 包混淆产生 a.a.a.a.a 冲突【英文标题】:Android library proguard package obfuscation produces a.a.a.a.a collision 【发布时间】:2020-04-29 22:41:26 【问题描述】:我正在编写 2 个 android 库。当我混淆两者时,它们中的混淆代码都包含一个名为 a.a.a.a.a
的类,当尝试在同一应用程序中使用这两个库时会导致以下错误:
在模块 classes.jar (lib1) 和 classes.jar (lib2) 中发现重复的 a.a.a.a.a 类
如何防止 Proguard
混淆前 3 个包以得到:
my.domain.lib1.a.a
和my.domain.lib2.a.a
?
编辑:混淆是作为构建库的一部分发生的,而不是在构建应用程序时发生的。
【问题讨论】:
【参考方案1】:这可以通过将-repackageclasses my.domain.lib#.ofs
放入每个库的proguard-rules
文件中同时将#
分别替换为1
和2
来解决。这会将所有混淆类移动到my.domain.lib#.ofs
包中,而所有非混淆类将保留在其原始包中,并且保证不会发生冲突。
正如Proguard
documentation 所说:
-repackageclasses [package_name]
指定重新打包所有重命名的类文件,方法是将它们移动到单个给定包中。
另一种解决方案是使用-keeppackagenames
。不幸的是,我找不到让它只保留前 3 个包的方法。
见Proguard
documentation:
-keeppackagenames [package_filter]
指定不混淆给定的包名。
【讨论】:
【参考方案2】:将以下代码添加到proguard-rules.pro
文件中。
-keeppackagenames
【讨论】:
以上是关于Android 库 proguard 包混淆产生 a.a.a.a.a 冲突的主要内容,如果未能解决你的问题,请参考以下文章
使用 proguard 的 Android 混淆应用程序会不断混淆库 jar - 是吗?
如何使用 proguard 混淆 android 库(.aar)?
Proguard 使用 DNSJava 库混淆 Android 代码