Android:依赖项和模块的Proguard规则

时间:2015-02-17 08:16:50

标签: android dependencies proguard

我有一个包含几个模块的项目,libs文件夹中的一些jar依赖项以及一些其他gradle依赖项。我正在尝试构建一个启用了proguard的发布apk,但是在构建过程中我遇到了很多警告,因为某些依赖项。例如:

Warning:org.codehaus.jackson.jaxrs.JacksonJsonProvider: can't find superclass or interface javax.ws.rs.ext.MessageBodyReader 

有人请参考指南,了解如何正确定义依赖关系的规则。除了 app 模块之外,我还需要为模块添加规则吗?

修改

我已将以下规则添加到app build.gradle文件中:

-keep interface org.codehaus.jackson.** { *; }
-keep class org.codehaus.jackson.** { *; }

但我仍然在构建过程中收到警告。

1 个答案:

答案 0 :(得分:2)

我正在使用此规则进行改造

-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**

-dontwarn rx.**
-dontwarn retrofit.**
-dontwarn okio.**
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}

我的杰克逊规则是

-keepattributes *Annotation*,EnclosingMethod,Signature
-keepnames class com.fasterxml.jackson.** { *; }
 -dontwarn com.fasterxml.jackson.databind.**
 -keep class org.codehaus.** { *; }
 -keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility {
 public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; }
-keep public class your.class.** {
  public void set*(***);
  public *** get*();
}

修改

你的图书馆罐子引用了更多的图书馆罐子(Mortbay,SLF4J,Apache Commons Logging,Log4j,......)将这些罐子加上额外的&#39; -libraryjars&#39;选项应解决问题。如果你没有重新提出它们,那么使用这个规则

-dontwarn javax.management.**  
-dontwarn java.lang.management.**  
-dontwarn org.apache.log4j.**  
-dontwarn org.apache.commons.logging.** 
-dontwarn org.slf4j.**  
-dontwarn org.json.*