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.amy.domain.lib2.a.a?

编辑:混淆是作为构建库的一部分发生的,而不是在构建应用程序时发生的。

【问题讨论】:

【参考方案1】:

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

正如Proguard documentation 所说:

-repackageclasses [package_name]

指定重新打包所有重命名的类文件,方法是将它们移动到单个给定包中。

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

Proguarddocumentation:

-keeppackagenames [package_filter]

指定不混淆给定的包名。

【讨论】:

【参考方案2】:

将以下代码添加到proguard-rules.pro 文件中。

-keeppackagenames

【讨论】:

以上是关于Android 库 proguard 包混淆产生 a.a.a.a.a 冲突的主要内容,如果未能解决你的问题,请参考以下文章

使用 proguard 的 Android 混淆应用程序会不断混淆库 jar - 是吗?

如何使用 proguard 混淆 android 库(.aar)?

Proguard 使用 DNSJava 库混淆 Android 代码

使用 ProGuard 混淆 Android 库项目源代码

Proguard 可以混淆 Android 库项目 (APKLIB) 吗?

如何在 Eclipse 中使用 Proguard 混淆 Android 库(.jar 文件)