【问题标题】:App crashing with Picasso and minifyEnabled true使用 Picasso 和 minifyEnabled 时应用程序崩溃 true
【发布时间】:2017-07-25 13:14:44
【问题描述】:
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Cache
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl$Builder
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Request$Builder
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Call
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Response
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.ResponseBody
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Response
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.ResponseBody
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Cache
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl$Builder
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Request$Builder
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Response
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Cache
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Request
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Call
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Response
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.ResponseBody
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl$Builder
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.CacheControl
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Request$Builder
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Response
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.ResponseBody
Warning:com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.Cache
Warning:there were 52 unresolved references to classes or interfaces.
Warning:Exception while processing task java.io.IOException: Please correct the above warnings first.
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
Job failed, see logs for details

这是我在尝试构建 release.apk 时遇到的错误。

我尝试通过添加来修复它:

-dontwarn com.squareup.picasso.**

在我的pro guard-rules.pro 文件中。

release.apk 现在可以正确构建,至少表面上是这样。

但是当我在我的手机(或任何手机)上安装该应用程序时,它会在启动时崩溃,我想当它开始使用 Picasso 加载图像时。

请帮我解决这个问题。

我尝试了一些在互联网上找到并建议您的解决方案,它们似乎都可以正确构建,但应用程序仍然不断崩溃。它会依赖于除专业守卫规则之外的其他东西吗?

这就是我的 gradle 的样子:

buildTypes {
    release {
        shrinkResources true
        minifyEnabled true
        proguardFile 'proguard-rules.pro'
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }

【问题讨论】:

标签: android proguard release


【解决方案1】:

你似乎还在缩小 OkHTTP

can't find referenced class <b>com.squareup.okhttp</b>

前往Picasso's Github page

-dontwarn com.squareup.okhttp.**

【讨论】:

  • 感谢您的回答。我也尝试使用这个,但没有任何运气。它确实修复了它,因为 apk 是正常生成的。仍然当我安装该应用程序时,它会在启动时崩溃,因为它必须使用 Picasso 加载图像
  • 你能过滤 logcat 的错误而不是警告吗?
  • 您确定在 Gradle 中加载了正确的 proguard 文件吗?
  • 这实际上修复了毕加索错误。应用程序崩溃是因为SearchView 无法加载。我将-keep class android.support.v7.widget.SearchView { *; } 添加到我的专业守卫规则中,该应用程序运行良好。
  • 这与是否“缩小 OkHTTP”无关。那将是-keep。这里有-dontwarndocs 说:“指定不警告未解决的引用和其他重要问题。 […] 忽略警告可能很危险。例如,如果确实需要处理未解析的类或类成员,则处理后的代码将无法正常运行。”但是根据this issue,这些警告确实可以忽略。
【解决方案2】:

在你的 proguard.cfg 中试试这些:

#### -- Picasso --
 -dontwarn com.squareup.picasso.**

 #### -- OkHttp --

 -dontwarn com.squareup.okhttp.internal.**

 #### -- Apache Commons --

 -dontwarn org.apache.commons.logging.** 

【讨论】:

  • 谢谢你的回答,我试试这个
  • 我想你想要keep 而不是dontwarn
  • 没有,它构建正确,但在启动时不断崩溃
  • @cricket_007 我应该怎么keep
  • @Daniele 这个答案所做的就是让警告静音。它不能修复未解决的类
【解决方案3】:

已解决在proguard-rules.pro 中添加这一行:

-dontwarn com.squareup.okhttp.**

【讨论】:

    【解决方案4】:

    在你的应用 gradle 中试试这个

    minifyEnabled 假 收缩资源错误

    【讨论】:

    • 这个想法不好,你正在尝试禁用Proguard
    【解决方案5】:

    我的问题是我无法使用 minifyEnabled true 生成签名的 apk,我已通过将以下内容添加到 proguard-rules.pro 文件来修复它:

    #for Picasso library
    -dontwarn okio.
    # JSR 305 annotations are for embedding nullability information.
    -dontwarn javax.annotation.**
    # A resource is loaded with a relative path so the package of this class must be preserved.
    -keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
    # Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
    -dontwarn org.codehaus.mojo.animal_sniffer.*
    # OkHttp platform used only on JVM and when Conscrypt dependency is available.
    -dontwarn okhttp3.internal.platform.ConscryptPlatform
    

    如果上述问题仍然存在,您可以使用以下方法:

    #for Picasso library
    -dontwarn com.squareup.okhttp3.**
    -keep class com.squareup.okhttp3.* { *;}
    -dontwarn okio.
    -dontwarn okhttp3.internal.platform.ConscryptPlatform
    -dontwarn javax.annotation.Nullable
    -dontwarn javax.annotation.ParametersAreNonnullByDefault
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 2016-11-18
      相关资源
      最近更新 更多