【问题标题】:Gradle Build FailureGradle 构建失败
【发布时间】:2015-08-22 17:01:52
【问题描述】:

我的项目在调试模式下编译和执行良好,但是当我尝试生成签名的 apk 时,出现错误。这会出现在消息日志中:

:app:proguardRelease
Warning:android.support.v4.app.DialogFragment: can't find referenced class android.support.v4.app.DialogFragment$DialogStyle
Warning:android.support.v4.app.FragmentTransaction: can't find referenced class android.support.v4.app.FragmentTransaction$Transit
Warning:android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$ResolvedLayoutDirectionMode
Warning:android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$LayoutDirectionMode
Warning:android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$LayerType
Warning:android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$AccessibilityLiveRegion
Warning:android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$ImportantForAccessibility
Warning:android.support.v4.view.ViewCompat: can't find referenced class android.support.v4.view.ViewCompat$OverScroll
Warning:android.support.v4.widget.DrawerLayout: can't find referenced class android.support.v4.widget.DrawerLayout$EdgeGravity
Warning:android.support.v4.widget.DrawerLayout: can't find referenced class android.support.v4.widget.DrawerLayout$LockMode
Warning:android.support.v4.widget.DrawerLayout: can't find referenced class android.support.v4.widget.DrawerLayout$State
Warning:there were 11 unresolved references to classes or interfaces.
         You may need to add missing library jars or update their versions.
         If your code works fine without the missing classes, you can suppress
         the warnings with '-dontwarn' options.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
Exception while processing task 
java.io.IOException: Please correct the above warnings first.
    at proguard.Initializer.execute(Initializer.java:473)
    at proguard.ProGuard.initialize(ProGuard.java:233)
    at proguard.ProGuard.execute(ProGuard.java:98)
    at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:1074)
    at com.android.build.gradle.tasks.AndroidProGuardTask.doMinification(AndroidProGuardTask.java:139)
    at com.android.build.gradle.tasks.AndroidProGuardTask$1.run(AndroidProGuardTask.java:115)
    at com.android.builder.tasks.Job.runTask(Job.java:48)
    at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41)
    at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:227)
    at java.lang.Thread.run(Thread.java:745)
:app:dexRelease UP-TO-DATE
:app:crashlyticsStoreDeobsRelease
:app:crashlyticsUploadDeobsRelease
:app:validateExternalOverrideSigning
:app:packageRelease FAILED
Error:Execution failed for task ':app:packageRelease'.
> Unable to compute hash of /home/kombo/RAL/Mpasho/app/build/intermediates/classes-proguard/release/classes.jar

我已经尝试了所有可能的方法来解决这个问题,包括更新我的构建工具、使用最新的 gradle 版本、检查所有依赖项,但错误仍然出现。

我很确定项目中存在 v4 支持库,因为在调试模式下不会出现错误。

【问题讨论】:

    标签: android android-gradle-plugin warnings build.gradle release


    【解决方案1】:

    默认的 ProGuard 文件已经具有忽略支持库警告的规则。如果没有,可以添加到文件中

    -dontwarn android.support.**
    

    但最好添加默认值。见Proguard configuration@Android Developers

    【讨论】:

    • 这只能让我消除警告。但是这个错误依然存在,Error:Execution failed for task ':app:packageRelease'. > Unable to compute hash of /home/kombo/RAL/Mpasho/app/build/intermediates/classes-proguard/release/classes.jar
    • 同样的问题...没有解决办法。
    • 这很令人沮丧,我几乎尝试了所有方法,但无法修复:$
    • 同样的问题,还没有解决办法
    【解决方案2】:

    原来我在 proguard 文件中省略了 getDefaultProguardFile('proguard-android.txt') 行,而只是使用了 proguard-rules.pro

    【讨论】:

    • 我遇到了同样的问题。清理,清除缓存并没有解决它。当我在构建日志中查看更高的内容时,我注意到 proguard 正在发出一些警告。我可能有 2 个库共享一些代码(重复的类..)我删除了一个有问题的库,它修复了我的 proguard 问题 --> 查看你的构建输出中的 proguard 警告/错误
    • @dangalg 查看我的答案
    • 所以你根本没有使用 proguard。尝试反编译你的 apk,看看你得到了确切的项目文件
    【解决方案3】:

    在升级与 23 相关的所有内容(Android 库、SDK 等)时,我也遇到了这个问题。

    这个 proguard 配置为我修复了它:

    -dontwarn org.apache.http.**
    -dontwarn android.net.http.AndroidHttpClient
    -dontwarn com.google.android.gms.**
    -dontwarn com.android.volley.toolbox.**
    

    Source

    【讨论】:

    【解决方案4】:

    在 progaurd 中添加了这两行

    -dontwarn android.net.http.AndroidHttpClient
    -dontwarn com.google.android.gms.**
    

    它有效..

    与项目中使用的库有关。

    【讨论】:

      【解决方案5】:

      这也可能由于与包含的 .jar 文件相关的错误/警告而发生 检查构建输出中的 proguard 警告/错误。

      我遇到了与 opencsv jar 文件相关的问题。 Lakedaemon 在上述评论中的提示帮助了我并解决了问题。

      【讨论】:

        【解决方案6】:

        我认为你的应用 build.gradle buildTypes > release > minifyEnabled is true

        这会导致您收到此错误消息。

        避免这个错误信息,设置buildTypes > release > minifyEnabled is false


            buildTypes {
                release {
                    minifyEnabled false
                    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                }
            }
        }
        

        【讨论】:

        • 谢谢!你拯救了我的一天
        • 这不是解决方案,您需要启用 pro-guard
        【解决方案7】:

        尝试在整个错误信息中查找。它可能包含您两次包含库的信息。这是我的问题,在删除重复的包含后已解决。

        【讨论】:

          【解决方案8】:

          尝试将此代码添加到您的proguard-rules.pro

          -ignorewarnings 
          

          它解决了我的问题。

          【讨论】:

            猜你喜欢
            • 2014-03-30
            • 1970-01-01
            • 2018-10-03
            • 1970-01-01
            相关资源
            最近更新 更多