在编译中大型Android工程时,编译慢是一个很头疼的问题,大量的第三方库和模块导致工程编译慢。将模块打成aar或发布到私有maven上可能稍微缓解编译慢的问题。
AS功能强大,但硬盘的性能却是个很大的瓶颈。即使换了SSD,编译速度还不是提升特别客观。
当然,今年Intel的XPoint技术的闪腾存储器又会进一步提升系统性能(要换支持M.2的主板,还不如加大内存)
1、安装Ramdisk。
推荐使用 SoftPerfect RAM Disk,目前性能最好的Ramdisk,编译速度至少提升一倍以上(以我目前项目而言,clean重编至少要10分钟,现在只要2分多钟,日常修改编译跑一下平均半分钟不到,当然你还可以开启Instant Run)。
官网:https://www.softperfect.com/products/ramdisk/ 目前最新的4.0.2只有30天试用期,使用3.4.8的已经足够了。
2、创建镜像盘。(可选)
主要是能将数据保存到硬盘上,以便开机后能恢复数据,这个过程在关机或者手动触发。当然如果项目编译快的话,可以不用镜像保存。
新建镜像文件,选择你要保存的位置(一般第一分区速度是最快的),参照你项目所有build目录的大小,设置镜像大小。不要太大,否则会占用太多用不到的内存,也不能太小,以免编译时出现空间不足。
3、加载到内存。
点击工具栏上的 + 号,选择镜像文件(如果你使用的话),勾选保存内容到镜像,再选择下需要的盘符,最后点确定,创建内存盘。
4、配置工程。
在工程根目录下新建 ramdisk.gradle,添加一下脚本:
ext {
buildRamdiskDir = null
}
String getRamdiskDir() {
Properties properties = new Properties()
File propertyFile = new File(rootDir.getAbsolutePath() + "/local.properties")
if (propertyFile.exists()) {
properties.load(propertyFile.newDataInputStream())
return properties.getProperty('ramdisk.dir')
}
return null
}
allprojects {
if (buildRamdiskDir == null) {
buildRamdiskDir = getRamdiskDir()
if (buildRamdiskDir == null) {
buildRamdiskDir = "";
}
System.err.println("Build Ramdisk: " + buildRamdiskDir)
}
if (buildRamdiskDir != null && buildRamdiskDir.length() > 0) {
buildDir = "${buildRamdiskDir}/build/${rootProject.name}/${project.name}"
}
}
在根目录的build.gradle中第一行增加 :
apply from: 'ramdisk.gradle'
ramdisk.dir=H\:\\
其中盘符H为第3步中配置的盘符,不同的项目最好使用不同的镜像文件和盘符,以便快速卸载腾出内存空间。
5、在关机和休眠之前,记得选中内存盘,点下保存。
以上,你就可以几乎发挥电脑的性能来编译工程。当然,如果内存盘够大的话,可以把整个工程目录都放在ramdisk中,那无疑是最快的。
一般而言,内存盘的速度是HDD的50倍以上,SDD的10几倍,而且比SSD好的是不会抢宝贵的IO资源,发挥CPU的最大性能。