我想使用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完全忽略这些库(因为它们无论如何都是开源的(。这可能吗?
试试这个:
-keep class javax.** { *; }
-keep class org.** { *; }
-keep class twitter4j.** { *; }
参考@CaspNZ的帖子:安卓Proguard与外部jar
您应该能够在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.**
我想补充一点,在添加proguard规则后,您应该将项目与Gradle文件同步,否则它们可能无法工作。