我正在开发一个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堆栈跟踪。
答案 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。有关进入应用程序的所有内容,请参阅图像1
& 2
- 此处的许多答案都会告诉您enable multidex。虽然它可以解决问题,但很可能是解决方法。如果您不明白为什么使用它(请参阅链接),您可能不需要它。如果您无法在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的输出,看看是否还有其他任何内容可以提供有关错误的详细信息。