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

时间:2011-04-25 23:09:47

标签: 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)的限制?

2 个答案:

答案 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。