我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情
场景
随着项目代码的增多,在windows下使用Android Studio编译的速度也越来越慢,修改一点代码然后编译一次甚至需要几分钟的时间,这对于我们码农来说实在无法忍受。
这里介绍一些在实践中验证的比较有效的在windows下提升Android Studio编译速度的方法。
解决方案
一、更改配置文件
1、在C:\Users\用户名\.gradle\目录下,新建gradle.properties文件,文件内容:
#JVM运行时允许分配的最大堆内存
org.gradle.jvmargs=-Xmx4608M
# 编译时使用守护进程
org.gradle.daemon=true
#使用并行编译
org.gradle.parallel=true
#启用新的孵化模式
org.gradle.configureondemand=true
2、使用本地的gradle文件,并且关闭gradle在线更新模式
3、具体的module中设置gradle文件
dexOptions {
//是否支持大工程模式
jumboMode true
//最大堆内存
javaMaxHeapSize "4g"
//使用增量模式构建
incremental true
//预编译
preDexLibraries = true
//线程数
threadCount = 8
}
二、使用Freeline编译
frreline可谓是解决提升编译速度的究极方案,它利用热补丁原理达到快速编译的效果,往往一个原来需要几分钟编译的工程,现在可能只需要不到10秒钟。
freeline的官方地址:
https://github.com/alibaba/freeline
具体的使用说明这里就不再赘述了,可以参考官网的使用手册接入。
现在我们看下freeline使用前后的对比。
使用前:
使用后:
可以见得,使用freeline的时候,第一次编译项目会很慢,这里用了430秒。
但是只要这个项目被freeline编译过后,以后再使用freeline的话,就能体验到freeline飞一般的速度了。
按上图所示,增加了一行代码,只用了11.1秒就编译完成。
同样,对资源文件的编译,freeline也是得心应手:
三、模块化
将常用的功能封装为aar或jar包,以jar或jar包形式引入项目,避免每次编译的时候都要重新编译一遍java文件。
四、组件化
工程内部按照组件化方式构造起来,需要什么功能的组件,就compile这个组件,自由搭配,而不是像以往那样这个工程全部编译。
组件化这块的内容,后续我会专门写文章介绍。
五、更换操作系统
有条件的话,可以购买Mac电脑开发,那个速度绝对是杠杠滴。
如果手头紧的话,可以考虑装个黑苹果,或者用linux系统开发,编译速度也是比windows要快很多。
六、其它方案
1、减少带有flavors标签的compile;
比如:
productFlavors {
develop {
resValue "string", "app_name", "测试版"
}
product {
resValue "string", "app_name", "正式版"
}
}
developCompile project(path: ':module-A', configuration: 'developRelease')
productCompile project(path: ':module-A', configuration: 'productRelease')
2、implementation能够提升编译速度
网上有传言说AS3.0以后的implementation能够提升编译速度,但是我没有实际去测试过,
因为3.0配4.x的gradle有一些bug。
如果大家想体验的话,可以按照以下方式来配置AS,这样就可以使用implementation了。
android3.0+gradle4.0+com.android.tools.build:gradle3.0
3、屏蔽某些task
比如Test这样的task,可能是我们不需要用到的,但是gradle在编译的时候却执行了,我们可以将这样的task屏蔽掉,也能节省一部分的时间。
在项目的gradle里面,进行如下的配置:
4、使用固态硬盘,提升电脑硬件。
比如:
productFlavors {
develop {
resValue "string", "app_name", "测试版"
}
product {
resValue "string", "app_name", "正式版"
}
}
developCompile project(path: ':module-A', configuration: 'developRelease')
productCompile project(path: ':module-A', configuration: 'productRelease')
2、implementation能够提升编译速度
网上有传言说AS3.0以后的implementation能够提升编译速度,但是我没有实际去测试过,
因为3.0配4.x的gradle有一些bug。
如果大家想体验的话,可以按照以下方式来配置AS,这样就可以使用implementation了。
android3.0+gradle4.0+com.android.tools.build:gradle3.0
3、屏蔽某些task
比如Test这样的task,可能是我们不需要用到的,但是gradle在编译的时候却执行了,我们可以将这样的task屏蔽掉,也能节省一部分的时间。
在项目的gradle里面,进行如下的配置:
4、使用固态硬盘,提升电脑硬件。
总结
1、
freeline是大招,是解决AS编译慢的终结方案,大家能用上都尽快用上;
2、其它方案能够配上的最好也都配上。
比如像gradle的offline模式,android studio打开项目的时候每次都去检查更新,有时候网络不好的情况下,需要很长时间,导致AS假死状态。参考:https://www.jianshu.com/p/200d55b4d40a