引子

一直以来,由于项目中加入的module太多,全量编译一次公司的安卓项目需要2个小时。后来作死换了一台iMac全量编译一个安卓的项目需要四个多小时。幸亏有高人的指点,参考了2017年Google I/O 大会的 Speeding Up Your Android Gradle Builds,真的很好,油管上的播放量居然才几万。
下面下载了I/O大会上的 santa-tracker 项目作为演示尝试一下改进。
可以看出其实这个项目的规模也不是很大,module数量也不是很多。头一次运行,一步步来,将在环境中遇到的麻烦都写下来,主要的方法就是一步步的修改gradle的各个配置文件,直到 build successfully。

图片描述


开始干活

选择手动更新

1.为了完全的展示完全的过程,我们选择叉叉,手动进行更新。
图片描述


搞定Firebase

2.头一次运行项目的话会遇到,下面的报错。主要的原因是这是一个谷歌官方的项目,后台使用的是firebase,正如里面讲到的,你需要将一个google-services.json的文件放到指定的目录下,所以是需要你到firebase的console里面进行注册你的APP,由于和主题关系不大,这里就略过了。
图片描述

下面已经完成了APP的注册以及将google-services.json发放到指定的目录下,头一次全量运行就成功,花费的时间是两分半,这个时间还是蛮长的,当然和我工作中的项目时长比较起来还真实令人羡慕。我们的目标是达到三倍速度也就是,实际的时长控制在40秒以内。
图片描述


升级gradle以及gradle wrapper

3.我们首先尝试的是将 gradle 升级到目前的最新的版本 3.1 ,同时不要忘记将相应的 gradle-wrapper 也升级到的相应的版本,我的做法是将升级到 4.6 。具体就是更改项目根目录下的build.gradle 以及 gradle-wrapper.properties直接进行修改,点击Sync Now。要是遇到下面问题的话,就在 jcenter() 下面添加 google() 或者 Google的maven repo就好,具体情况看你的gradle的版本。
图片描述
图片描述


定义flavorDimensions以及dimension

4.之后遇到了关于flavor的报错,貌似是Google现在对于flavor有了更加严格的要求,以前optional的东西,现在必须声明了,我的办法也是比较简单粗暴,直接声明出来就好,但是关于flavor这部分不是很明白,有清楚地小伙伴可以推荐些课程以及书籍,感激不尽。

图片描述


BuildType要保持一致

5.登登登,新鲜的错误报告又出来了,这次的问题是 wearable 的需要依赖 common 以及 village 两个module,但是 unable to resolve,一查发现还是迁移到android studio 3.0的时候大家遇到的问题,网上一查这些错误不少都是迁移到的新版as造成的。修改的话也是一贯的拿来主义看看Stack Overflow上面的问答,原因嘛大概就是,这个module所依赖的另外的一个 module 需要有和它一样的 buildType。

图片描述


dependencies 的重复引用

6.what's wrong with you?看看 Stack Overflow,恩~说的貌似很有道理~
图片描述
图片描述


创建allprojects标签,添加Maven

7.继续报错继续改,这次的错误是设置Google的 maven 时应该放在allprojects的标签下面
图片描述
图片描述


All Done!

8.All done 现在总算是跑起来了,时间的话还比较理想的。
图片描述


总结

这次实践了 Speeding Up Your Android Gradle Builds 第一部分,也就是升级gradle,这部分是对性能提高最大的部分,比较麻烦的一部分,视频后面主要就是介绍了一些参数的修改以及良好的代码实现思想和习惯。
感觉写的还是很不完善,很多东西没有深入的挖下去,只是暂时地找到了解决的办法,markdown玩的一般,这次时间不多,写得不是很好看。下一步的话还是要多玩,自己多多练练里面涉及到的概念,像buildtype、maven以及gradle,慢慢把文章丰富起来。

PS:发现每次修改gradle文件的时候,as会非常的卡顿,但是断网了之后,却非常的流畅,难道Google在后面做什么见不得人的PY交易吗?

Notes:

android studio的gradle plugin的版本以及所对应的gradle wrapper必须要弄清,下面是对应的版本关系图。从我的测试案例来看,Jerome说现在是时候大家来开始使用multi-module编程是有道理的,但是前提是你的plugin version以及Gradle version是相对应的。
图片描述


Victor_Kim
0 声望0 粉丝