Proguard:避免使用预先混淆的库JAR命名冲突

Dan*_*yer 6 java obfuscation proguard

似乎Proguard在重命名/重新打包类时没有尝试避免命名与库JAR中的类的冲突.这是正确的,还是我没有正确配置?

我正在混淆使用最新Google AdMob SDK的Android应用程序.以前我使用旧的AdMob SDK没有问题.新的SDK JAR文件包含一些经过混淆的类.其中一个类a.class位于默认/未命名的包中.当我混淆我的应用程序时,Proguard重命名/重新打包我的一个类也在a.class未命名的包中,尽管已经在AdMob JAR中读取了一个库JAR(因此它应该知道这将导致冲突).可以预见,当dx工具尝试在单个.dex文件中组合这两个具有相同名称的类时,我的构建失败.

作为一种解决方法,我已经重新配置了Proguard,以便它将我的所有类移动到一个命名包(只是一个字母),以避免与Google类冲突,但我很想知道是否有更好的解决方案,或者这是Proguard当前版本(4.6)的限制?

sbr*_*ges 5

从 progaurd手册

如果输入 jar 和库 jar 包含同一包中的类,则混淆的输出 jar 可能包含与库 jar 中的类名重叠的类名。如果库 jar 之前已被混淆,这是最有可能的,因为它可能包含名为“a”、“b”等的类。因此,永远不应将包拆分为输入 jar 和库 jar。

所以看起来使用你自己的包是推荐的答案。