最近将 Android Studio
更新后,出现了 build 失败的情况,更可恶的是,百度解决了一个问题后,又紧接着出现其他问题,而且很多问题百度找不到匹配的解决方案。本来学习 Android
就遇到不少困难了,这一下又严重打击了自信心。但既然想着要走这条路了,那就无奈只好硬着头皮一个个解决。加油!!!
PROBLEMS
<font color=red>Failed to open zip file.</font>
<font color=red>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)</font>
Re-download dependencies and sync project (requires network)
Re-download dependencies and sync project (requires network)
SOLUTIONS
可能原因是 gradle
插件版本和 gradle
版本不匹配。
因此可以将 build.gradle
文件中的插件版本和 gradle-wrapper.properties
文件中的 Gradle
版本修改进行匹配,然后重新 sync
一下。
下为官方提供的插件及相应的 gradle
版本要求:
Plugin version | Required Gradle version |
---|---|
1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2.0 - 1.3.1 | 2.2.1 - 2.9 |
1.5.0 | 2.2.1 - 2.13 |
2.0.0 - 2.1.2 | 2.10 - 2.13 |
2.1.3 - 2.2.3 | 2.14.1+ |
2.3.0+ | 3.3+ |
3.0.0+ | 4.1+ |
3.1.0+ | 4.4+ |
如果插件版本匹配的话,那么就应该是文件的 gradle
文件的问题了,很大可能是文件不完整。这时需要将 .gradle/wrapper/dists
底下相应版本的 zip
文件删除,然后重新 sync
就会自动开始重新下载 zip
文件。
Windows
系统在:C:\users\{user name}\.gradle\wrapper\dists
不过,在 Android Studio
内直接下载 Gradle
可以说是奇慢无比!有时候甚至就停在那一动不动还没有任何提示信息。
因此,建议大家直接从 官网 下载相应的包,无需解压,下载完成后直接将它覆盖在 .gradle/wrapper/dists
底下相应目录底下。
PROBLEMS
<font color=red>Gradle DSL method not found: 'google()'
Possible causes:<ul><li>The project 'GradleTest' may be using a version of the Android Gradle plug-in that does not contain the method (e.g. 'testCompile' was added in 1.1.0).
Upgrade plugin to version 3.2.1 and sync project</li><li>The project 'GradleTest' may be using a version of Gradle that does not contain the method.
Open Gradle wrapper file</li><li>The build file may be missing a Gradle plugin.
Apply Gradle plugin</li></font>
SOLUTIONS
google()
是在 Google 的Maven
存储库中查找依赖关系的快捷方式。它是从 gradlev4.0
引入的。
它目前要求:
- Gradle v.4
- Android Studio 3.x.
- Gradle plugin for Android 3.x
由于我的 Android Studio
版本号是 V3.2.1
,而项目中所用的 Gradle
是 3.2
版本,所以就出现了上面的问题。
相应的解决方案就是根据上面的要求一项一项查看过去,我这将 Gradle
版本改成了 4.0
以上就可以正常运行了。
当然如果你的 Android Studio
是 2.3
的,那你可以将 build.gradle
中的的仓库由 google()
改成 maven { url 'https://maven.google.com' }