原文鏈接
原文作者是對google 2017 IO大會關于加快Gradle構建的一個總結。該文章對原文做了精簡,只用作資料收集
一、引用最新的Gradle插件
Android的工具團隊經常在提升Android Gradle 插件的性能,所以這是最簡單的方式----引用最新的gradle插件。
buildscript {
repositories {
google()
}
dependencies {
classpath ‘com.android.tools.build.gradle:3.0.0-alpha3’
}
}
二、避免使用以前的MultiDex方案
為了解決android的方法數限制問題,google提供了support-multidex方法,該方法對android21以上的版本性能影響較小,但是在21以下的版本性能影響很大。如果使用了傳統的Multidex方案,那么最小sdk要設定在21以上,并且運行在21以上的手機上。
三、在開發時禁止使用ABI和密度拆分
如果沒有使用以上兩條,可以忽略
如果使用了,那么可以在開發構建的時候禁止它。如果是使用命令行構建那么需要在gradle中通過該變量來判斷。
android {
if (project.hasProperty(‘devBuild’)){
splits.abi.enable = false
splits.density.enable = false
}
}
./gradlew assembleDevelopmentDebug -PdevBuild
如果使用androidstudio構建,那么可以在 Preferences -> Build, Execution, Deployment -> Compiler settings中設置
四、盡量使用最少的資源文件
資源文件占用了APK文件相當多空間,將所有的資源打包進apk會降低打包的效率。在開發環境中,你可以只把你關注的資源打包進apk。
productFlavors {
development {
minSdkVersion 21
//only package english translations, and xxhdpi resources
resConfigs (“en”, “xxhdpi”)
}
}
五、禁止使用PNG的優化
PNG的優化默認是開啟的,在打包開發版的時候可以關閉它。
android {
if (project.hasProperty(‘devBuild’)){
aaptOptions.cruncherEnabled = false
}
}
六、使用Instant Run
在設置里面開啟就行
七、避免沒有意義的改變
gradle在構建上真的是很靈活,你可以通過修改構建的腳本做許多很酷的事情,但是如果你不小心改變了它的某個參數,那么構建將十分緩慢。下面的代碼片段是修改版本號,這意味著即使是debug版時也將會修改版本號,這是沒有必要的。
//this is BAD!
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
}
}
還可以通過標志位的方式,在debug的時候不觸發一些代碼
android {
buildTypes {
debug {
ext.alwaysUpdateBuildId = false
}
}
}
八、不要使用動態版本庫依賴
如果使用了動態版本的依賴,那么gradle將不定時的去檢查最新的版本。這樣是很耗時。
九、注意分配給gradle的內存
設定你想要分配給gradle的內存
org.gradle.jvmargs=-Xmx1536m
自從Dex In Process發布以來,不需要這種優化了
dexOptions {
javaMaxHeapSize = ‘4g’
}
十、使用gradle的緩存
gradle在3.5以后加入了緩存的功能,允許緩存以后每次構建將使用上一次構建的輸出,在androidstudio3.0對這個功能有很好的支持,只需要配置:
# Set this in gradle.properties
org.gradle.caching=true
單詞
Packing all resources 打包所有的資源
Disable the mutildex 禁用..
optimizations 優化
Gradle is super flexible gradle十分靈活
if you aren’t careful 如果你不小心
This little snippet of code 代碼片段
....takes even more advantage of .. 優勢