加快 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.fabricandroid { 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 恤贈送(全球限量)

TAG:Android | 编程 | Android开发 |