微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android:依赖项和模块的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.** { *; }

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

解决方法:

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

-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,…)添加这些带有额外“-libraryjars”选项的罐子应该可以解决问题.如果你没有重新引用它们,那么使用这个规则

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐