54

我想使用 Proguard 主要是出于混淆的原因。

我的问题是我有三个库,Twitter4J 和两个路标库。当我尝试创建签名的 APK 时,这些库会导致错误。为了克服这个问题,我将以下内容放入proguard.config文件中......

-dontwarn org.apache.commons.codec.binary.** 
-dontwarn org.slf4j.** 
-dontwarn com.sun.syndication.io.**
-dontwarn com.sun.syndication.feed.synd.*   

虽然这消除了控制台中的错误,但当我将签名的 APK 加载到手机上时,它立即崩溃了。DDMS 说这是由于 Twitter4J 中没有的类。

摆脱"dontwarns"上述没有帮助。也没有添加dontshrink dontoptimise

我希望 Proguard 完全忽略这些库(因为它们无论如何都是开源的)。这可能吗?

4

3 回答 3

70

尝试这个:

-keep class javax.** { *; }
-keep class org.** { *; }
-keep class twitter4j.** { *; }

参见@CaspNZ 的帖子: 带有外部 jar 的 Android Proguard

于 2011-10-17T06:23:56.397 回答
16

您应该能够将以下行添加到 proguard.cfg 以排除包(和子包)中的所有类

-keep class org.apache.commons.codec.binary.**
-keep interface org.apache.commons.codec.binary.**
-keep enum org.apache.commons.codec.binary.**
-keep class org.slf4j.**
-keep interface org.slf4j.**
-keep enum org.slf4j.**
-keep class com.sun.syndication.io.**
-keep interface com.sun.syndication.io.**
-keep enum com.sun.syndication.io.**
-keep class com.sun.syndication.feed.synd.**
-keep interface com.sun.syndication.feed.synd.**
-keep enum com.sun.syndication.feed.synd.**
于 2011-10-11T04:49:39.313 回答
0

我想补充一点,您应该在添加 proguard 规则后将您的项目与 Gradle 文件同步,否则它们可能无法正常工作。

于 2018-10-29T12:08:40.553 回答