以下内容均为个人理解,如果有描述不正确的地方,欢迎指正 转载请注明原文链接
Gradle简介
开始填坑之前,先简单聊聊gradle,Gradle其实就是一个构建项目的工具,也就是把那一个个文件、文件夹按照一定的规则关联起来,形成一个项目的工具,它其实不仅仅是用在AndroidStudio上。
我们在AS中用到的Gradle其实应该被叫做 Android Gradle Plugin,也就是安卓项目上的gradle插件; Gradle插件会有版本号,每个版本号又对应有一个或一些 Gradle发行版本(一般是限定一个最低版本),也就是我们常见的类似gradle-3.1-all.zip这种东西;
如果这两个版本对应不上了,那你的工程构建的时候就会报错。 对应关系如下(参考自 https://developer.android.google.cn):
插件版本 | Gradle版本 |
---|---|
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 |
Android Studio 3.0 之后自动将插件版本升级到3.0.0,所以我们也需要对应地把Gradle升级到4.1才行
另外, Android Gradle Plugin又会跟 Android SDK BuildTool有关联,因为它还承接着AndroidStudio里的编译相关的功能,这也是我们要在项目的 local.properties 文件里写明Android SDK路径、在build.gradle 里注明 buildToolsVersion 的原因。
所以 Android Gradle Plugin 本质上就是 一个AS的插件,它一边调用 Gradle本身的代码和批处理工具来构建项目,一边调用Android SDK的编译、打包功能,从而让我们能够顺畅地在AS上进行开发。
升级Android Gradle Plugin到3.0.1的踩坑之旅
再同步gradle,又报错。 这次是提示没有26.0.2版本的 SDK buildTool ,然后直接在AS报错弹框里点击下载就可以了。现在SDK可以不用翻墙直接下载,速度还蛮快的。下载确认解压之后再次同步gradle。
继续同步,继续报错... 这次的错误提示比较接地气了,说是build/intermediates/xxxx.xml 里的某个值没有找到,这个简单,build目录下的都是编译期生成的文件,clean下再来一发;或者直接rebuild项目(rebuild = clean build)
至此再次同步gradle,总算是没有再报错了,AS上可以正常运行代码了。 我们的全部修改都只涉及到gradle的配置代码,所以不会对项目里的业务逻辑产生任何影响。 这时候再打个包,验证下我们的最后一段打包相关的gradle脚本是否正常运行.打包成功了,也就全部OK了。
参考文献
谷歌爸爸的文档: https://developer.android.google.cn/studio/build/gradle-plugin-3-0-0-migration.html
最后
附一张图
折腾一下午之后的我.gif