如何让Proguard忽略外部库?

时间:2011-10-11 04:34:38

标签: android proguard android-library

我想使用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完全忽略这些库(因为它们无论如何都是开源的)。这可能吗?

3 个答案:

答案 0 :(得分:57)

试试这个:

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

来自@CaspNZ的Cf帖子: Android Proguard with external jar

答案 1 :(得分:10)

您应该能够在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.**

答案 2 :(得分:0)

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