虽然回答得很晚,但这对 Google 来说是一个难题(单引号),而且还不清楚发生了什么。我还没有评论或询问范围(或发布 3 个链接)的声誉,所以这个答案可能有点乏味。
为了快速回答,您的项目中可能有多个 Gradle 插件。
同步 Gradle Wrapper 和插件
我的问题似乎始于 IML 文件损坏。 Android Studio(在关闭和重新打开项目之间)开始抱怨 IML 消失了(它没有消失)并且应该删除一个模块,我拒绝了。它仍然存在,我升级到 AS 0.8.7(金丝雀频道)并陷入 OP 问题(在根项目中找不到任务'')。这完全阻止了构建,所以我不得不深入研究 Gradle。
我在 OSX 上的修复步骤(请针对 Windows 进行调整):
- 将 Android Studio 升级到 0.8.7
- 首选项 |更新 |将“Beta 频道”切换到“Canary 频道”,然后立即检查。
- 您或许可以跳过这个。
-
检查了 Gradle 包装器(当前为 1.12.2;此时不要尝试使用 2.0)。
-
假设您不需要特定版本,请使用latest supported distribution
$ vi ~/project/gradle-wrapper.properties
...
distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip
这可以在 Android Studio 中的 Preferences | Gradle(但 0.8.7 给了我“无效位置”错误)。
- “包装器”只是每个 Android Studio 项目的 Gradle 副本。它允许您在您的操作系统中安装 Gradle 2,并在您的项目中安装不同的版本。 Android 开发者文档解释说 here。
- 然后为 插件 调整您的 build.gradle 文件。对于整个项目,Gradle 插件版本必须与分发/包装器版本兼容。由于工具文档 (tools.android.com/tech-docs/new-build-system/user-guide#TOC-Requirements) 有点过时,您可以将插件版本设置得太低(如 0.8.0)和Android Studio 将在包装器的可接受范围内抛出错误。
例如,在 build.gradle 中,你有这个插件:
dependencies {
classpath "com.android.tools.build:gradle:0.12.+"
}
您可以尝试将其切换到确切的版本,如下所示:
dependencies {
classpath "com.android.tools.build:gradle:0.12.2"
}
并且(在记录每种情况下您要更改的版本之后)验证项目中的每个 build.gradle 文件是否引入了相同的插件版本。保留“+”应该可以工作(对于 0.12.0、0.12.1、0.12.2 等),但是当我更新 Google 的 Volley 库(最初是 gradle:0.8.+)和我的主要项目(最初是 0.12. +) 到固定版本:gradle:0.12.2。
其他检查
-
确保您在同一个项目中没有两个 Android 应用程序模块
-
这可能会与最终解决方案(不同的 Gradle 版本,如上)交互,并导致
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define (various classes)
检查,构建 | Make Project 不应弹出询问您要制作什么应用程序的窗口。
- 使您的缓存无效
- 文件 |使缓存无效/重新启动 (stackoverflow.com/a/19223269/513413)
- 如果第 2 步不起作用,请删除 ~/.gradle/ (www.wuttech.com/index.php/tag/groovy-lang-closure/)
- 退出 Android Studio
- $ rm -rf ~/.gradle/
- 启动 Android Studio,然后同步:
- 在放弃之前重复整个序列(退出...同步)几次。
- 清理项目
如果你看到这个...
在我最近的构建中,我不断看到可怕的失败(异常页面),但在几秒钟内消息就会清除,构建成功并部署应用程序。由于我永远无法解释它并且该应用程序有效,因此我从未注意到我的项目中有两个 Gradle 插件。所以我认为 Gradle 插件互相争斗;一个崩溃,另一个丢失状态并报告错误。
如果您有时间,1 小时的视频“Gradle 简介”(www.youtube.com/watch?v=OFUEb7pLLXw) 确实帮助我了解 Gradle 构建文件、任务、构建决策等。
免责声明
我正在学习这整个堆栈,在一个外国操作系统上,在从事不同的职业之后......同时在压力下。在过去的几个月里,我遇到了我认为 Android 拥有的每一面墙。我经常来这里,这是我的第一篇文章。我认为这是一个很难解决的问题,所以如果我的答案的质量反映了我在解决问题时遇到的困难,我深表歉意。