標籤:

簡單提升編譯速度的一個方法

隨著項目越來越大,編譯速度越來越是一個問題。在編譯我們的 Android App 的時候,印象里最快的時候也得一分半,當然這還是在關閉 Chrome 的時候。當你改幾行代碼時,仍然要花上幾分鐘來編譯,這是很操蛋的一件事。Google 官方推出的 Instant Run 看上去很美好,但也是很操蛋的,廣大人民群眾紛紛表示,為什麼我改了代碼以後,編譯不生效啊摔(

增加電腦內存是提升編譯速度的一種方法,Gradle 官方推薦的編譯內存為 5120MB :

當然大多數開發者的電腦可能沒有這麼高的內存(包括我),尤其是電腦同時運行著 AS 和 Chrome 的情況下。 不過值得慶幸的是,Google 官方在介紹 MultiDex 的文檔中提到,通過限定 minSdkVersion 為 21 可以提升編譯速度,原因在於省略了 MultiDex 向後兼容的過程,而這通常是編譯最耗時的部分。在項目的 build.gradle 中按照如下配置:

android {n productFlavors {n dev {n // 開發中使用的最低支持版本n minSdkVersion 21n }n prod {n // 項目實際的最低支持版本n minSdkVersion 14n }n }n}nndependencies {n // 提升編譯速度必要的依賴(我們設置為僅在 dev 時生效)n devCompile com.android.support:multidex:1.0.1n}n

上述配置完成之後,按照 Google 的說法,我們在編譯 dev 版本時,就是增量編譯

下圖為 clean 後第一次編譯時所花費的時間:

將幾行代碼注釋以後,再次編譯的時間:

可以看到,儘管第一次編譯的時間較長,但從第二次編譯開始,時間縮短不少。相對於以前改幾行代碼都要等上幾分鐘的編譯的時間,已經是很大的提升了。

需要注意的是,在修改 build.gradle 後,我們需要手動將 AS 的 Build Variants 設置為 prod 版本,如果是 dev 的話,AS 不會顯示 API 21 的限制提示;使用命令行編譯 dev 版本,而不是使用 AS 的 Run ,否則編譯出來的還會是 prod 版本,時間並不會減少。當然對於非 MultiDex 的用戶,這個方法是否生效,還沒有測試過。另外此方法似乎只對 Android 6.0 及其以上版本的系統才生效,5.X 會拋出 ClassNotFoundException.


推薦閱讀:

如何評價 Google 推出的 Chrome ARC?
一份理想的移動應用市場的分析報告,應該包含哪些內容?
「合理」的修改簡訊時間,有時候是很必要的
為什麼要升級到 Android 7.x?
Android N / M 對比評測-Xperia Z5

TAG:Android |