应用的构建速度会直接影响开发效率,本文将带您经过改造一个 Android 应用: “Google 追踪圣诞老人 (Google Santa Tracker)” 来为你们提供十个小技巧,帮助提高应用的 Gradle 构建速度,当咱们应用了全部的小技巧以后,该演示应用的构建速度快了三倍以上。
html
其次,在咱们开启速度提高调优以前,来了解本次三个性能指标的说明:java
全量构建,也就是从新开始编译整个工程的 debug 版;android
代码增量构建,指的是咱们修改了工程的 Java / Kotlin 代码;git
资源增量构建,指的是咱们对资源文件的修改,增长减小了图片和字符串资源等。github
小技巧 1: 使用最新版本的 Android Gradle 插件缓存

每次 Android Gradle 插件的更新都会修复大量的 bug 及提高性能等新特性,所以保持最新的 Android Gradle 插件版本有很是大的必要。
微信
这是将 Android Gradle 插件版本从 2.x 更新到 3.0.0-alpha1 以后获得的结果 (这里的演示是基于 3.0.0-alpha1 版本,随着插件版本的更新,性能的提高会更加明显),咱们能够看出,全量构建一次应用的时间直接减小了 25%,代码改动的增量构建减小了将近 40%,资源改动的增量构建也减小了 16%。app
小技巧 2: 避免激活旧版的 Multidexide

-
启用 multidex https://developer.android.google.cn/studio/build/multidex.html
小技巧 3: 禁用 Multiple APK 构建性能


禁用多 APK 构建不能仅仅在 splits 里设置,由于这里的设置对工程里全部的构建变体都是可见的。正确的禁用多 APK 构建的方法是建立一个属性来作判断,这里咱们设置了一个名为 “devBuild” 的属性,在构建的过程当中把这个值传给 gradle,此时 gradle 会将 splits.abi.enable 和 splits.density.enable 设置为 false,它就不会生成多个 APK 了。
Multiple APK
https://developer.android.google.cn/google/play/publishing/multiple-apks.html
构建变体
https://developer.android.google.cn/studio/build/build-variants.html
小技巧 4: 最小化使用资源文件


这里咱们看到了较大程度上的改观,全量构建的时间又下降了 6 秒,增量构建的时间也分别下降了 20% 以上。
小技巧 5: 禁用 PNG 压缩

小技巧 6: 使用 Apply Changes

从 Android Studio 3.5 版开始 (3.5 版目前在 Beta 构建渠道发布),开发者们可使用 Apply Changes 功能来提升构建性能,它可让代码和资源的改动直接生效而无需重启应用,有时候甚至无需重启当前的 Activity。与 Instant Run 的实现方式不同,Apply Changes 充分利用了 Android 8.0 以上版本操做系统的特性进行运行时检测,从而动态的对类进行从新定义。所以,若是您但愿使用 Apply Changes,则须要让您的工程运行在 Android 8.0 (API级别26) 以上的真机或者模拟器上。
小技巧 7: 避免被动的改动




这个例子里,咱们故意在构建脚本中加入里一些捣乱的代码以展示其带来的损失。同时也举一个在使用 Crashlytics 时的实际例子,这个插件默认会为每次构建中都加入惟一 ID 做为构建标识,这会带来没必要要的时间损失,您能够经过在构建脚本里加入 ext.alwaysUpdateBuildId = false 来避免这个,固然也能够选择在开发阶段彻底关闭 Crashlytics。
小技巧 8: 不使用动态版本标识

Gradle 提供了一个很是方便的依赖库版本号管理功能,方便开发者们经过使用一个加号 “+” 标识但愿使用这个依赖库的最新版本。可是使用动态版本有几个风险,从性能角度来讲,Gradle 会每隔 24 小时去检查一次依赖库的更新,若是您的依赖库不少,并且都使用了动态获取最新版本的这个设定,那会对构建时候的性能产生必定的影响。
即便您不是特别在乎这些性能损耗,可是它仍然是有风险的——依赖库的版本更新会让您的构建充满不肯定性,可能两周以后您就在构建一个彻底不同的工程了,由于依赖库代码的更新对开发者们是不可见的。
小技巧 9: Gradle 内存分配调优

小技巧 10: 开启 Gradle 构建缓存

-
关于 Gradle 构建缓存 https://docs.gradle.org/current/userguide/build_cache.html
总结

-
代码仓库 https://github.com/jmslau/santa-tracker-android -
官方文档 https://developer.android.google.cn/studio/build/optimize-your-build
推荐阅读
本文分享自微信公众号 - Android群英传(android_heroes)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。