2011-10-11 95 views
36

我想使用Proguard主要用于混淆的原因。如何使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完全忽略这些库(因为它们是开源的)。这可能吗?

回答

7

您应该能够添加到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.** 
+0

嗨@Nic Strong,回答问题。我添加了代码,但是当我尝试导出已签名的APK时,通常会出现很多错误,如“[2011-10-11 15:11:00 - canonV0003PRO]警告:oauth.signpost.signature.OAuthMessageSigner:无法找到引用的类org.apache.commons.codec.binary.Base64" 。任何其他建议不胜感激。 Mel – Mel

+0

您是否还将oauth.signpost。**添加到要保留的包列表中? –

+0

@梅尔你是否得到答案?我面临同样的问题 – sheetal

52

一个包中的所有类(和子包)试试这个:从@

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

比照后CaspNZ: Android Proguard with external jar

+0

这工作,谢谢。 – kodeshpa

+0

非常感谢!我首先忽略了这篇文章,因为我认为我的错误不会被这个问题解决,但不知怎的,它确实如此。我只是不知道proguard的魔力... – Boy

+0

@Boy PLZ在android工作室的回复在'proguard-project.txt'或'proguard-rules.pro'中添加这些行的地方 –