我有一个包含几个模块的项目,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.** { *; }
但我仍然在构建过程中收到警告。
答案 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.*