加快 Android Gradle build 的十個建議
簡評:在 Google I/O 2017 中有一個專題為 Speeding Up Your Android Gradle Builds(需科學上網),本文內容摘錄自該專題。
Tip 1 - 使用最新版本的 Android Gradle Plugin
Android 的 tool team 一直都在不斷改進 Android Gradle Plugin,提高構建速度。所以第一條是最簡單的,始終使用最新版本的 Android Gradle Plugin。
Tip 2 - 避免傳統的 multidex
如果你還不知道什麼是 multidex,可以先看看這篇官方說明(英文)。
對於 API 21 及更高版本的設備,multidex 對性能的影響很小,但在更低版本的設備上則不然。
因此,建議在開發中將應用的 minSdkVersion 設置為 21,測試設備也最好保證在 API 21 以上。
不過如果你是用的是最新版本的 Android Studio,就可以不需要手動設置了。
Tip 3 - 在開發中禁用 multi-APK
如果你沒有用到 ABI 或者 Density splits,那可以直接跳過這一段了。
如果你用了,那在開發過程中你應該禁用掉,這樣可以提高你的 build 時間。
在 gradle 文件中這樣設置:
android { if (project.hasProperty(『devBuild』)){ splits.abi.enable = false splits.density.enable = false }}
如果是用命令行 build:
./gradlew assembleDevelopmentDebug -PdevBuild
如果是用 Android Studio:
Tip 4 - 最小化包含的資源文件
減少不需要的資源文件能夠提升打包的速度,因此在開發過程中,我們可以設置 Gradle 只打包目前所需要的資源文件。
productFlavors { development { minSdkVersion 21 //only package english translations, and xxhdpi resources resConfigs (「en」, 「xxhdpi」) }}
Tip 5 - 禁用 PNG Crunching
對於 PNG 優化默認是啟用的,但在開發過程中其實並不必要。因此我們可以禁用以提高編譯速度。
android { if (project.hasProperty(『devBuild』)){ aaptOptions.cruncherEnabled = false }}
Tip 6 - 使用 Instant Run??
雖然 Instant Run 還不夠完善,但很多時候還是能節省你大量的時間的。並且在 Android 3.0 中 Instant Run 得到了大量的改進,相信能夠變得更加穩定可靠。
Tip 7 - 避免沒有必要的變動
Gradle 非常的靈活,我們可以做很多非常 cool 的事情。但一不小心,也可能導致 build 速度的降低。
下面的例子就是將當前時間設置為 versionCode,這對於測試很有幫助,但同樣在開發過程中其實是可以禁用的。
//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 }}
這裡的核心思想就在於確保僅在必要時才修改 gradle 文件,而不要每次 build 都修改。
還有一個例子就是如果你用到了 Fabric 的 Crashlytics,Crashlytics 對於每次 build 都會生成一個新的 build id。同樣,我們可以在 debug build 中禁用:
apply plugin: 『io.fabric』android { buildTypes { debug { ext.alwaysUpdateBuildId = false } }}
Tip 8 - 對於依賴不要使用動態版本
不要使用動態依賴版本主要有兩個原因:
- Gradle 每 24 小時就會檢查是否有新的依賴版本,這會導致更長的依賴解析時間。
- 這也就意味著可能出現不一致的 build,雖然你什麼都沒動。
所以,建議始終使用指定版本號的依賴。
Tip 9 - 注意你的緩存
從 Android Studio 2.1 開始增加了一個新特性:Dex In Process,其能夠大大提升 build 的速度和 Instant Run 的運行性能。
為了啟用 Dex In Process,需要修改 gradle.properties 文件,並將分配給 Gradle Daemon VM 的內存提升至最少 2 Gb:
org.gradle.jvmargs=-Xmx2048m
Tip 10 - 啟用 Gradle Caching
Gradle Caching 是 Gradle 3.5 的新特性,顧名思義能通過緩存來加速 build 過程。在 Android Studio 3.0 中更據此做出了許多優化,因此我們可以這樣來啟用:
# Set this in gradle.propertiesorg.gradle.caching=true
原文:How to speed up your slow Gradle builds
日報擴展閱讀:
歡迎關註:知乎專欄「極光日報」,每天為 Makers 導讀三篇優質英文文章。
推薦閱讀:
※面試阿里客戶端開發工程師(Android)實習生需要具備怎麼的能力?
※讓你變懶的 Android Studio Live Templates
※Google 可能會在 Android P 中更嚴格限制隱藏 API 的使用
※Google 開發者大會紀念 T 恤贈送(全球限量)