似乎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)的限制?
答案 0 :(得分:4)
来自progaurd manual,
如果输入jar和库jar包含同一个包中的类,则模糊输出jar可能包含与库jar中的类名重叠的类名。这很可能是因为库jar之前已经被混淆了,因为它可能包含名为'a','b'等的类。因此,包不应该被分成输入罐和库罐。
所以看起来使用自己的包是建议的答案。
答案 1 :(得分:0)
在封闭的库中,为防止多个混淆的模块/库之间发生冲突,您应该使用
-keeppackagenames
保护规则,以防止重新包装完整的类,否则,您会发现以下错误:
[jetified-lib1]中的类a.a.a.a和[jetified-lib2]中的a.a.a。