【问题标题】:Android using Parse.com - missing classes on ProguardAndroid 使用 Parse.com - Proguard 上缺少类
【发布时间】:2015-06-06 08:55:00
【问题描述】:

我在一个项目中使用 Parse。该项目使用我自己的 Android 库项目,其中包含 Parse jar。当我尝试生成签名的 apk 时,gradle 会出现以下问题:

:exampleApp:proguardRelease 警告: com.parse.ParseOkHttpClient$CountingOkHttpRequestBody: 找不到 超类或接口 com.squareup.okhttp.RequestBody 警告: com.fasterxml.jackson.databind.ext.DOMSerializer:找不到 引用类 org.w3c.dom.bootstrap.DOMImplementationRegistry 警告:com.fasterxml.jackson.databind.ext.DOMSerializer:找不到 引用类 org.w3c.dom.bootstrap.DOMImplementationRegistry 警告:com.fasterxml.jackson.databind.ext.DOMSerializer:找不到 引用类 org.w3c.dom.bootstrap.DOMImplementationRegistry 警告:com.fasterxml.jackson.databind.ext.DOMSerializer:找不到 引用类 org.w3c.dom.bootstrap.DOMImplementationRegistry 警告:com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.OkHttpClient 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.OkHttpClient 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.OkHttpClient 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.OkHttpClient 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.OkHttpClient 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.OkHttpClient 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.OkHttpClient 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.OkHttpClient 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Call 警告:com.parse.ParseOkHttpClient:不能 找到引用的类 com.squareup.okhttp.Response 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Response 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.ResponseBody 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.ResponseBody 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.Response 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Headers$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Headers$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Headers$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Headers$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Response 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.Request$Builder 警告:com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Headers$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Headers 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.Call 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.ResponseBody 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.Request 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Headers 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.OkHttpClient 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.Call 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Response 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.Call 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Call 警告:com.parse.ParseOkHttpClient:不能 找到引用的类 com.squareup.okhttp.Response 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Response 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.Request 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Request$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Headers$Builder 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Headers 警告:com.parse.ParseOkHttpClient: 找不到引用的类 com.squareup.okhttp.Request 警告: com.parse.ParseOkHttpClient:找不到引用的类 com.squareup.okhttp.Response 警告:com.parse.ParseOkHttpClient$1: 找不到引用的类 com.squareup.okhttp.Call 警告: com.parse.ParseOkHttpClient$1:找不到引用的类 com.squareup.okhttp.Call 警告:com.parse.ParseOkHttpClient$1:不能 找到引用的类 com.squareup.okhttp.Call 警告: com.parse.ParseOkHttpClient$1:找不到引用的类 com.squareup.okhttp.Call 警告: com.parse.ParseOkHttpClient$CountingOkHttpRequestBody: 找不到 引用类 com.squareup.okhttp.RequestBody 警告: com.parse.ParseOkHttpClient$CountingOkHttpRequestBody: 找不到 引用类 com.squareup.okhttp.MediaType 警告: com.parse.ParseOkHttpClient$CountingOkHttpRequestBody: 找不到 引用类 okio.BufferedSink 警告: com.parse.ParseOkHttpClient$CountingOkHttpRequestBody: 找不到 引用类 com.squareup.okhttp.RequestBody 警告: com.parse.ParseOkHttpClient$CountingOkHttpRequestBody: 找不到 引用类 com.squareup.okhttp.MediaType 警告: com.parse.ParseOkHttpClient$CountingOkHttpRequestBody: 找不到 引用类 okio.BufferedSink 警告: com.parse.ParseOkHttpClient$CountingOkHttpRequestBody: 找不到 引用类 com.squareup.okhttp.MediaType 警告: com.parse.ParseOkHttpClient$CountingOkHttpRequestBody: 找不到 引用类 okio.BufferedSink 警告: com.parse.ParseOkHttpClient$CountingOkHttpRequestBody: 找不到 引用类 okio.BufferedSink 警告:有 67 个未解决 对类或接口的引用。 您可能需要添加缺少的库 jar 或更新它们的版本。 如果您的代码在没有丢失类的情况下工作正常,您可以抑制 带有“-dontwarn”选项的警告。 (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass) :exampleApp:proguardRelease 失败

FAILURE:构建失败并出现异常。

编辑: 根据@karama 的建议,我将此添加到我的 proguard 规则中:

-keepattributes *Annotation*
-keepattributes Signature
-dontwarn com.squareup.**
-keep class com.squareup.** { *; }

-dontwarn com.parse.ParseOkHttpClient**
-keep class com.parse.ParseOkHttpClient** { *; }

# Proguard configuration for Jackson 2.x (fasterxml package instead of codehaus package)
-keep class com.fasterxml.jackson.databind.ObjectMapper {
    public <methods>;
    protected <methods>;
}
-keep class com.fasterxml.jackson.databind.ObjectWriter {
    public ** writeValueAsString(**);
}
-dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry

然而,现在我得到以下信息:

警告:com.fasterxml.jackson.databind.ext.DOMSerializer:找不到 引用类 org.w3c.dom.bootstrap.DOMImplementationRegistry 警告:com.fasterxml.jackson.databind.ext.DOMSerializer:找不到 引用类 org.w3c.dom.bootstrap.DOMImplementationRegistry 警告:com.fasterxml.jackson.databind.ext.DOMSerializer:找不到 引用类 org.w3c.dom.bootstrap.DOMImplementationRegistry 警告:com.fasterxml.jackson.databind.ext.DOMSerializer:找不到 引用类 org.w3c.dom.bootstrap.DOMImplementationRegistry 警告:com.fasterxml.jackson.databind.ext.DOMSerializer:找不到 引用类 org.w3c.dom.bootstrap.DOMImplementationRegistry 警告:有 5 个未解析的类或接口引用。

如果我通过添加来修复它: -dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry 当应用程序运行时,它会崩溃。我在这里看到了这个问题,但没有解决:https://stackoverflow.com/a/11249755/197127

使用 -dontobfuscate 运行应用程序可以正常工作。

【问题讨论】:

    标签: android parse-platform proguard


    【解决方案1】:

    这个错误不是parse sdk的问题,是okHttp造成的。在您的 proguard 中添加以下行。

    -keepattributes *Annotation*
    -keepattributes Signature
    -dontwarn com.squareup.**
    -keep class com.squareup.** { *; }
    

    编辑

    为 com.fasterxml.jackson 添加以下代码:

    -keep class com.fasterxml.jackson.databind.ObjectMapper {
        public <methods>;
        protected <methods>;
    }
    -keep class com.fasterxml.jackson.databind.ObjectWriter {
        public ** writeValueAsString(**);
    }
    

    参考:https://github.com/krschultz/android-proguard-snippets/issues/19

    【讨论】:

    • 谢谢卡兰。我也可以为 com.fasterxml.jackson 添加这个吗?
    • 感谢更新让我更进一步。但是现在我在运行时遇到了应用程序崩溃。我用详细信息更新了问题。
    • 请通过这个答案更新你的proguard:stackoverflow.com/a/11032856/1944782
    • 嗨,卡兰。再次感谢。但我仍然得到以下信息:java.lang.NoSuchFieldError: PUBLIC_ONLY at java.lang.Class.getDeclaredAnnotation(Native Method) at java.lang.Class.getAnnotation(Class.java:290) at com.fasterxml.jackson.databind。 f.al.(Unknown Source) at com.fasterxml.jackson.databind.ObjectMapper.(Unknown Source)
    猜你喜欢
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2017-03-25
    相关资源
    最近更新 更多