Android: 依赖和模块的 Proguard 规则
Android: Proguard rules for dependencies and modules
我有一个包含几个模块的项目,libs 文件夹中的一些 jar 依赖项和一些其他 gradle 依赖项。我正在尝试构建一个启用了 proguard 的发布 apk,但在构建过程中我收到了很多针对某些依赖项的警告。例如:
Warning:org.codehaus.jackson.jaxrs.JacksonJsonProvider: can't find superclass or interface javax.ws.rs.ext.MessageBodyReader
有人可以参考有关如何正确定义依赖项规则的指南。除了 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*();
}
编辑
您的库 jar 引用了更多的库 jar(Mortbay、SLF4J、Apache Commons Logging、Log4j 等)添加这些带有额外“-libraryjars”选项的 jar 应该可以解决 problem.If 您没有引用它们然后使用此规则
-dontwarn javax.management.**
-dontwarn java.lang.management.**
-dontwarn org.apache.log4j.**
-dontwarn org.apache.commons.logging.**
-dontwarn org.slf4j.**
-dontwarn org.json.*
我有一个包含几个模块的项目,libs 文件夹中的一些 jar 依赖项和一些其他 gradle 依赖项。我正在尝试构建一个启用了 proguard 的发布 apk,但在构建过程中我收到了很多针对某些依赖项的警告。例如:
Warning:org.codehaus.jackson.jaxrs.JacksonJsonProvider: can't find superclass or interface javax.ws.rs.ext.MessageBodyReader
有人可以参考有关如何正确定义依赖项规则的指南。除了 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*();
}
编辑
您的库 jar 引用了更多的库 jar(Mortbay、SLF4J、Apache Commons Logging、Log4j 等)添加这些带有额外“-libraryjars”选项的 jar 应该可以解决 problem.If 您没有引用它们然后使用此规则
-dontwarn javax.management.**
-dontwarn java.lang.management.**
-dontwarn org.apache.log4j.**
-dontwarn org.apache.commons.logging.**
-dontwarn org.slf4j.**
-dontwarn org.json.*