Gradle - 什么是非零退出值以及如何解决它?

时间:2016-04-18 15:53:27

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

我正在开发一个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堆栈跟踪。

2 个答案:

答案 0 :(得分:5)

前言

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

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

问题

someTask的{​​{1}}部分非常非常重要,因为它会告诉您构建过程的确切步骤已崩溃。

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

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

退出值本身有点重要。

  • app:someTask FAILED只是一般错误代码,错误可能出现在Gradle输出
  • 1似乎与重叠的依赖项或项目配置错误有关。
  • 2似乎来自包含太多依赖项或内存问题。

可能有其他人,所以请随意提供您自己的意见或答案与其他价值观。

解决方案

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

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

gradle process

  • 1& 2 - 此处的许多答案都会告诉您enable multidex。虽然它可以解决问题,但很可能是解决方法。如果您不明白为什么使用它(请参阅链接),您可能不需要它。

如果您无法在Gradle日志中找到任何错误输出,那么建议的操作方法是打开Android Studio的Gradle窗口。

Android Studio Gradle

打开每个模块的3文件夹,并执行以下某些组合。

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

附加说明

我刚刚安装Android Studio并且出现错误

时,我看到许多帖子的值为2
  

'机器人工作室/ JRE / bin中/ JAVA'完成非零退出值2

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

如果您使用installDebug之前的 Google Play服务,则仅include the dependencies you actually need,否则您很可能达到了Multidex限制。了解如何enable it

如果您的Gradle文件中有一行显示为compile 'com.google.android.gms:play-services:X.Y.Z',那么您不需要任何其他包含compile fileTree(dir: 'libs', include: ['*.jar'])的行,因为第一种方式是"包含 compile files('libs/some_file.jar')目录中的每个 JAR文件。"

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

如果你有一行来编译另一个项目,例如dependencies,那么请确保你没有从那里复制依赖项。

与内存相关的问题的另一个解决方案涉及扩展堆大小,这是从compile project(":project_name")这样完成的

build.gradle

答案 1 :(得分:0)

非零退出值就像检查引擎灯。它只是告诉你出了问题。您仍需要进一步诊断以确定问题的确切原因。首先,您应向上滚动Gradle的输出,看看是否还有其他任何内容可以提供有关错误的详细信息。