【问题标题】:Gradle - What is a non-zero exit value and how do I fix it?Gradle - 什么是非零退出值,我该如何解决?
【发布时间】:2016-08-10 11:26:09
【问题描述】:

我正在开发一个 Android 应用程序,每次运行时都会收到以下消息:

:module:someTask FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':module:someTask'.
> some message here...  finished with non-zero exit value X
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: Y.ZZ secs

我已经尝试清理和构建项目,但错误仍然存​​在。

我看到了启用 Multidex 或增加堆大小的答案,但我确信我不需要任何一种解决方案。

我能做些什么来解决这个问题?


关于这个问题:这是What is a stack trace, and how can I use it to debug my application errors? 的直接扩展,除了您查看的是 Gradle 堆栈跟踪而不是 Java 堆栈跟踪。

【问题讨论】:

    标签: java android android-studio gradle android-gradle-plugin


    【解决方案1】:

    前言

    该错误消息不足以诊断问题。有ways to get more information,应该先检查一下。

    Gradle 输出本身应该指向:module:someTask FAILED 和最后一个:module:someOtherTask 之间消息上方几行中的实际错误。因此,如果您询问有关错误的问题,请编辑您的问题以包含错误的更多上下文。

    问题

    app:someTask FAILEDsomeTask 部分非常很重要,因为它可以准确地告诉您构建过程的哪个步骤已经崩溃。

    这些步骤包括准备依赖项、生成和合并资产和资源文件、检查代码是否有错误和编译,然后最终安装应用程序。

    如果 Gradle 在构建过程的任何时候检测到异常,它将抛出一个非零退出值,指示发生了错误。

    退出值本身有些重要。

    • 1 只是一般错误代码,错误可能在 Gradle 输出中
    • 2 似乎与重叠依赖或项目配置错误有关。
    • 3 似乎是由于包含了太多的依赖项,或者是内存问题。

    可能还有其他人,所以请随时提供您自己的 cmets 或其他值的答案。

    解决办法

    上述问题的一般解决方案(在尝试清理和重建项目之后)是:

    • 1 - 解决提到的错误。通常,这是compile-time error,这意味着您项目中的某些代码无效。这包括用于 Android 项目的 XML 和 Java。有关进入应用程序的所有内容,请参阅图片

    • 2 & 3 - 这里有很多答案告诉你enable multidex。虽然它可能会解决问题,但它很可能是一种解决方法。如果您不明白为什么要使用它(请参阅链接),您可能不需要它。

    如果您无法在 Gradle 日志中找到任何错误输出,那么推荐的做法是打开 Android Studio 的 Gradle 窗口。

    为每个模块打开Tasks 文件夹并执行以下一些组合。

    • 要清理和重置生成文件的代码,请使用build > clean 后跟build > build
    • 要检查嵌套依赖关系,请使用help > dependencies。确保没有重复。
    • 要检查代码中的语法错误和警告,请运行 verification > lint。这将输出一个 HTML 文件,您可以在浏览器中阅读该文件。 Gradle 日志会显示 Wrote HTML report to file:///path/to/app/build/outputs/lint-results.html,因此只需打开该文件即可查看所有错误和警告。
    • 要尝试在设备上运行该应用,请使用install > installDebug

    补充说明

    刚安装 Android Studio 时看到很多值为 2 的帖子,但出现错误

    'android-studio/jre/bin/java' 以非零退出值 2 结束

    安装 Java JDK 并正确配置 Android Studio 以使用 JDK 似乎可以解决此问题。


    如果您使用compile 'com.google.android.gms:play-services:X.Y.Z' 提供的Google Play 服务,则只能使用include the dependencies you actually need,否则您很可能确实达到了Multidex 限制。看看如何enable it


    如果您的 Gradle 文件中有一行读取 compile fileTree(dir: 'libs', include: ['*.jar']),那么您不需要任何其他包含 compile files('libs/some_file.jar') 的行,因为第一种方式是“将 每个 JAR 文件包含在libs/ 目录。”

    除此之外,如果您使用 Gradle 并且能够通过搜索 Maven Repository 找到您想要使用的依赖项,那么强烈建议您使用它而不是手动将 JAR 文件放入 @ 987654357@ 目录。对于该站点上的每个库,都有一个 Gradle 选项卡,您只需复制该行并将compile <line you copied> 放入dependencies 部分。


    如果你有一行编译了另一个项目,例如compile project(":project_name"),那么请确保你没有从那里复制依赖项。


    另一种解决内存相关问题的方法是扩大堆大小,就像这样从build.gradle 完成

    android {
        // Other stuffs
        dexOptions {
            javaMaxHeapSize "2g" // or "4g" if your device has enough memory 
        }
    }
    

    【讨论】:

      【解决方案2】:

      非零退出值就像检查引擎灯。它只是告诉你出了点问题。你仍然需要做进一步的诊断来找出问题到底是什么。首先,您应该在 Gradle 的输出中向上滚动,看看是否还有其他内容可以提供有关问题的更具体的详细信息。

      【讨论】:

        猜你喜欢
        • 2016-05-18
        • 2015-10-14
        • 2016-01-19
        • 1970-01-01
        • 2020-09-14
        • 2017-11-13
        • 2015-08-01
        • 2019-01-14
        相关资源
        最近更新 更多