Google I/O 中有一个How to speed up your slow Gradle builds 的演讲,提出了一些加快Android studio编译速度的建议,整理如下:
1. 使用最新的Android gradle插件
Google tools team一直致力于加快Android studio的编译速度,因此最好使用最新的Android Gradle Plugin:
buildscript {
repositories {
google()
}
dependencies {
classpath ‘com.android.tools.build.gradle:3.0.0-alpha3’
}
}
2. 避免使用multidex 我们知道当方法书超过64k时,需要配置multidex,但是如果我们的工程minSdkVersion 设置为 20 或更低值,那么构建时间会大大增加,因为构建系统必须就哪些类必须包括在主 DEX 文件中以及哪些类可以包括在辅助 DEX 文件中作出复杂的决策。
【Google|Google I/O中提到的提高Android studio的编译速度的几个建议】这种情况下可以利用 productFlavors(一个开发定制和一个发布定制,具有不同的 minSdkVersion值)创建两个构建变型。
android {
defaultConfig {
...
multiDexEnabled true
}
productFlavors {
dev {
// Enable pre-dexing to produce an APK that can be tested on
// Android 5.0+ without the time-consuming DEX build processes.
minSdkVersion 21
}
prod {
// The actual minSdkVersion for the production version.
minSdkVersion 14
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
3. 减少打包的资源文件 在开发模式下,可以只打包需要的资源,不必适配所有的资源文件:
productFlavors {
dev {
minSdkVersion 21
//only package english translations, and xxhdpi resources
resConfigs (“en”, “xxhdpi”)
}
}
4. 禁用 PNG 处理 PNG优化在默认情况下是打开的,我们可以在开发模式下禁用:
android {
if (project.hasProperty(‘devBuild’)){
aaptOptions.cruncherEnabled = false
}
}
5. 使用Instant run Instant Run在android studio 3.0中有了很多的改进,可以尝试使用。
6. 不要随便修改配置 Gradle使用非常灵活,但是如果不正确的使用反而会降低编译速度。比如:
//this is BAD! 这种做法会导致每次编译 manifest文件都需要被修改,造成不必要的编译时间增加
def buildDateTime = new Date().format(‘yyMMddHHmm’).toInteger()
android {
defaultConfig {
versionCode buildDateTime
}
}
正确的做法是:
def buildDateTime = project.hasProperty(‘devBuild’) ? 100 : new Date().format(‘yyMMddHHmm’).toInteger()
android {
defaultConfig {
versionCode buildDateTime
}
}
7. 避免使用动态版本依赖 一般使用固定版本依赖即可。
8. 注意内存使用 要注意分配给Gradle的内存使用:
目前配置
org.gradle.jvmargs=-Xmx1536m
即可,不必再配置:
dexOptions {
javaMaxHeapSize = ‘4g’
}
9. 使用Gradle caching 在Gradle 3.5中,使用cache可以缓存并重复利用之前builds的生成的文件。
# Set this in gradle.properties
org.gradle.caching=true
相关的演讲地址:https://www.youtube.com/watch?v=7ll-rkLCtyk
欢迎关注公众号wutongke,定期推送移动开发前沿技术文章:
文章图片
wutongke 推荐阅读
说一说Facebook开源的Litho
使用ConstraintLayout制作漂亮的动画