【问题标题】:Android: Proguard rules for dependencies and modulesAndroid:依赖项和模块的 Proguard 规则
【发布时间】:2015-02-17 18:55:41
【问题描述】:

我有一个项目,其中包含几个模块、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.** { *; }

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

【问题讨论】:

  • 从 progaurd 运行 apk 时是否遇到任何崩溃?
  • 请发布您的 gradle 文件。只是想知道您使用的是哪个版本的 Jackson。另外您确定它是否与 Jackson 处理器有关?
  • @diva 由于警告,构建过程失败。
  • 你在你的代码中使用了任何库吗?
  • @goonerdroid 我已经解决了杰克逊的问题。但我仍然有一些其他依赖项的问题。例如,我什至没有直接使用的改造。它被我引用的另一个库使用

标签: android dependencies proguard


【解决方案1】:

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

-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 应该可以解决问题。如果您没有引用它们,请使用这条规则

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

【讨论】:

  • 谢谢@goonerdroid。改造规则有效,但现在还有一个警告警告:oauth.signpost.signature.OAuthMessageSigner: can't find referenced class org.apache.commons.codec.binary.Base64
  • 如果构建成功,这是否意味着一切正常,或者我应该期待运行时问题?
  • 只要它编译没有任何警告或错误,你就不会得到任何运行时错误
  • 感谢您的回复。但即使包含上述语句,我仍然会遇到同样的错误。
  • -保留类 javax.** { ; } -keep class org.* { *; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
相关资源
最近更新 更多