为了账号安全,请及时绑定邮箱和手机立即绑定

Gradle-什么是非零退出值,我该如何解决?

/ 猿问

Gradle-什么是非零退出值,我该如何解决?

春华秋衣 2019-10-21 15:02:52

我正在开发一个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或增加堆大小,但是我确定我都不需要任何解决方案。


我该怎么解决?



查看完整描述

2 回答

?
红颜莎娜

前言

该错误消息不足以诊断问题。有一些获取更多信息的方法,应该首先检查这些信息

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

问题

someTask部分app:someTask FAILED非常,因为它会告诉你到底是哪的构建过程中的步骤已经崩溃重要。

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

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

退出值本身有些重要。

  • 1 只是一般的错误代码,该错误很可能在Gradle输出中

  • 2 似乎与重叠的依赖关系或项目配置错误有关。

  • 3 似乎是由于包含过多的依赖项或内存问题。

可能还有其他内容,因此请随时提供您自己的评论或其他值的答案。

解决方案

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

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

//img.mukewang.com/5dad583c0001e18c02850320.jpg

  • 23-许多答案告诉您启用multidex。尽管它可以解决问题,但很可能是一种解决方法。如果您不明白为什么要使用它(请参阅链接),则可能不需要它。

如果您在Gradle日志中找不到任何错误输出,则建议的操作步骤是打开Android Studio的Gradle窗口。

//img.mukewang.com/5dad584b00011a1902110320.jpg

打开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',那么只有包括你真正需要的依赖,否则你很可能是因为打Multidex限制。了解如何启用它。


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


与此同时,如果您正在使用Gradle并能够通过搜索Maven Repository找到想要使用的依赖项,那么强烈建议您使用它而不是手动将JAR文件放入libs/目录中。对于该站点上的每个库,都有一个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 

    }

}


查看完整回答
反对 回复 2019-10-21
?
慕侠2389804

非零退出值就像检查引擎指示灯一样。它只是告诉您出了点问题。您仍然需要做进一步的诊断以找出问题所在。首先,您应该在Gradle的输出中向上滚动,查看是否还有其他东西可以提供有关发生问题的更详细信息。


查看完整回答
反对 回复 2019-10-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信