微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 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堆栈跟踪.

解决方法:

前言

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

Gradle输出本身应指向该消息之上的几行中的实际错误:module:soMetask Failed和last:module:someOtherTask.因此,如果您询问有关错误的问题,请编辑您的问题以包含错误的更多上下文.

问题

应用程序的soMetask部分:soMetask Failed非常重要,因为它告诉您构建过程的哪个步骤已经崩溃.

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

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

退出值本身有点重要.

> 1只是一般错误代码,错误可能在Gradle输出
> 2似乎与重叠依赖项或项目配置错误有关.
> 3似乎来自包含太多依赖项或内存问题.

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

解决方

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

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

gradle process

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

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

Android Studio Gradle

打开每个模块的“任务”文件夹,然后执行以下某些组合.

>要清理和重置生成文件代码,请使用build>清洁后跟构建>建立.
>要检查嵌套的依赖项,请使用help>依赖.确保没有重复.
>要检查代码是否存在语法错误和警告,请运行验证>皮棉.这将输出您可以在浏览器中阅读的HTML文件. Gradle日志会将HTML报告写入file:///path/to/app/build/outputs/lint-results.html,因此只需打开该文件即可查看所有错误和警告.
>要尝试在设备上运行该应用,请使用install> installDebug.

补充说明

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

‘android-studio/jre/bin/java’ finished with non-zero exit value 2

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

如果您使用Google Play服务编译’com.google.android.gms:play-services:X.Y.Z’,那么只有include the dependencies you actually need,否则您很可能达到了Multidex限制.了解如何enable it.

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

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

如果你有一行编译另一个项目,如编译项目(“:project_name”),那么请确保你没有从那里复制依赖项.

与内存相关的问题的另一个解决方案涉及扩展堆大小,这是从build.gradle中完成的,就像这样

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐