虽然回答晚了,但这对谷歌(单引号)来说是一个困难,而且还不清楚发生了什么。我还没有评论或询问范围(或发布 3 个链接)的声誉,所以这个答案可能有点乏味。
为了快速回答,您的项目中可能有多个 Gradle 插件。
同步 Gradle 包装器和插件
我的问题似乎是从损坏的 IML 文件开始的。 Android Studio(在关闭和重新打开项目之间)开始抱怨 IML 消失了(事实并非如此)并且应该删除一个模块,但我拒绝了。它仍然存在,我升级到 AS 0.8.7(金丝雀通道)并陷入了 OP 问题(在根项目中找不到任务“”)。这完全阻止了构建,所以我不得不深入研究 Gradle。
我在OSX上的修复步骤(Windows请调整):
- Upgrade Android Studio to 0.8.7
- 偏好 |更新 |将“Beta 频道”切换到“Canary 频道”,然后立即检查。
- 您也许可以跳过此步骤。
- Checked the Gradle wrapper (currently 1.12.2; don’t try to use 2.0 at this time).
-
假设您不需要特定版本,请使用最新支持的发行版
$ 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 文件plugin。对于整个项目,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.1)时,我的构建成功了。 +) 到固定版本:gradle:0.12.2。
其他检查
- Ensure you don’t have two Android Application modules in the same Project
-
这可能会与最终解决方案(上面的不同 Gradle 版本)交互,并导致
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define (various classes)
-
要检查,构建 | Make Project 不应弹出一个窗口询问您要创建什么应用程序。
- Invalidate your caches
- 文件 |使缓存无效/重新启动 (stackoverflow.com/a/19223269/513413)
- If step 2 doesn't work, delete ~/.gradle/ (www.wuttech.com/index.php/tag/groovy-lang-closure/)
- 退出 Android Studio
- $ rm -rf ~/.gradle/
- Start Android Studio, then sync:
- 在放弃之前重复整个序列(退出...同步)几次。
- Clean the project
- 项目结构不匹配;看https://stackoverflow.com/a/64962359/8740349了解详情。
如果你看到这个...
在我最近的构建中,我不断看到可怕的失败(异常页面),但几秒钟内消息就会清除,构建成功并部署应用程序。由于我永远无法解释它并且该应用程序工作正常,因此我从未注意到我的项目中有两个 Gradle 插件。所以我认为 Gradle 插件互相争斗;一个崩溃了,另一个失去了状态并报告了错误。
如果有时间的话,1小时的视频《Gradle简单介绍》(www.youtube.com/watch?v=OFUEb7pLLXw)确实帮助我处理 Gradle 构建文件、任务、构建决策等。
免责声明
在从事不同的职业之后,我正在外国操作系统上学习整个堆栈……所有这些都是同时在压力下进行的。在过去的几个月里,我遇到了 Android 遇到的每一个障碍;我经常来这里,这是我的第一篇文章。我认为这是一个很难解决的问题,所以如果我的答案的质量反映了我在实现它时遇到的困难,我真诚地道歉。