« 主页

加速安卓项目编译

版权声明:眯眼探云原创,可随意转载,请保留该版权声明及链接:https://tyun.fun/post/02.boosting-android-build/

Update: 2016年5月3日, Android Studio 2.1 Stable,已经发布,非常的快哦~ 请看使用新的 Android Studio 加速你的开发

慢!慢!慢!

说的就是安卓的编译工具: gradle!

gradle 非常强大,为安卓的编译打包提供了无限的可能,但一个很要紧问题就是:慢慢慢!

在感受过 iOS 开发编译秒完成之后,对 gradle 蜗牛般的速度完全不能忍,还好,通过一些小小的配置改进,可以极大的提升某些环节的编译速度,节省不少的时间.

注:这里只讨论 gradle 针对安卓项目编译的时候的优化,但其他采用 gradle 进行编译的项目大多也可以采用相同的策略。

时间去哪儿了

先来看看编译的时候时间主要花费在哪里了。 gradle 提供了 --profile 参数,可以获取其执行时间的细节报告。例如:

$gradle assembleDebug --profile

结果的报告可以在 build/reports/profile 中找到,时间去哪儿了一眼就能看出来。

守护进程

守护进程(daemon)是提升编译速度最常见的方式,编译一次过后,后面的编译速度都会快一些。如果你没有启用守护进程的话,gradle 在编译完了会友情提示你。官网对此有详细的说明

在 $GRADLE_HOME/.gradle/gradle.properties 加入如下参数即可:

org.gradle.daemon=true

离线编译

如果你每次编译的时候都发现 gradle 在解析依赖的时候花掉了不少时间,那你必须考虑这项优化了。基本原理是这样的:现在的安卓项目都是推荐使用 maven 依赖,好处是 gradle 可以自动从网上的获取需要的依赖包。但问题就在于,gradle 每次编译的时候都会先去做这个 check。要知道,放这些依赖包的服务器都是在国外的,因此访问这些资源通常会比较慢,慢到你想砸电脑,每次编译都想砸。还好,你可以在运行 gradle 的时候加上 --offline 的参数来限制 gradle 访问网络,瞬间世界就清净了,原来需要半分钟的步骤一秒都不用就跳过去了,感动到泪流满面……

这么重要的功能,Android Studio 当然也提供了相应的设置,打开设置界面,直接搜 offline 就可以找到了。

其他编译选项

上面两种方法是经我实践最有效的提速的方法,但如果你是一个追求极致的人,当然还有一些其他的设置,可以在特定情况下来提升编译速度,不过效果就没那么明显了。

不重复编译依赖项目

如果你的项目中的依赖模块不需要经常更新,那么你可以在编译的时候加上 -a 的参数,这样 gradle 就会知道不去重新编译那些依赖模块。不过你项目只有一个主模块的话,那就没啥用。

android.dexOptions.preDexLibraries

gradle 文件中的配置。提前 dex 你项目中的 library 模块,也可以提高后续的编译速度。同样,如果你的项目只有一个模块的话,那就没啥用。而且在自动构建服务器上面最好是关闭这个选项,具体的说明 点这里,这页面中搜 preDexLibraries 就可以了。

android.dexOptions.incremental

可以在相应模块的 build.gradle 文件中进行配置。增量编译,这个是实验中的功能,在我们的项目中运行失败,继续等完善吧。