加快Android構建速度
尊重勞動成果,轉載請注明出處:http://blog.csdn.net/growth58/article/details/49589885
原文鏈接:https://medium.com/android-news/android-build-speed-up-ver-english-c76890aa610#.92skzplgc
關注新浪微博:@于衛國
郵箱:yuweiguocn@gmail.com
從Eclipse 到Android Studio…
Ant到Gradle…
自從Google發布Android Studio & Gradle Plugin 1.0,Android開發環境已經改變了很多。
但是有很多的開發者抱怨構建花費的時間太長。
實事上我花費了比之前多2倍的時間。對此我很難過。
因此我試了很多方法來減少構建時間。并且這篇文章是關于它的。
Android 應用構建環境
1.Ant
可以說,Android開始于這個工具。我在 Jenkins (CI) 用于自動化構建和發布。但我很少用于開發。
2.Eclipse
很多開發者使用這個IDE。在SingleDex情況下,它是個好工具。實事上,對于構建增量它是相當好的。
3.Gradle-Android Studio
Android Studio基于Gradle。如果開發者修改Gradle屬性,然后他們總是得同步Gradle到AS。并且不得不學習Gradle,Gradle還很慢。
自從去年我使用AS & IntelliJ,一直在抱怨Gradle的性能。在硅谷的很多技術公司,他們嘗試了別的解決方法。
新的Android 應用構建
1.Bazel (by Google, Github)
它不但能構建Android,而且還能構建IOS。Bazel 開始于Blaze (Google構建系統)。Bazel 目前為Beta版。
2.Buck (by 非死book, Github)
Buck 比Bazel支持更多的語言、平臺。(Go,Rust等等)
3.Pants (by 推ter, FourSquare, Square, Github)
三大組件協同工作。(對不起,我對它不太了解。)
性能
1.Bazel
來源: Bazel (http://bazel.io/docs/mobile-install.html)
2.Buck
來源 : Buck (https://buckbuild.com/article/exopackage.html)
3.Pants
我沒能找到相關的數據
我們為什么從Gradle轉移到其它的構建工具?
在gradle 團隊的博客
Gradle團隊對于Bazel 的觀點 03,2015
https://gradle.org/gradle-team-perspective-on-bazel/
他們指出了Bazel的缺點
1.Bazel 沒有一個高級別聲明構建語言讓構建變得簡單對開發者來說。
2.沒有建立可擴展性
3.首先是central repo,然后才是性能
4.Bazel is *nix only,它不能運行在Windows上。
5.沒有插件的生態系統
結論
新的構建系統 (Bazel, Buck)看起來要比gradle更好。但對于初學者來說它們太困難了,因此我不會從Gradle轉移到buck 或者其它的上面。
但是轉移到Buck 、Bazel或Pants之后,一些開發者說它可以很高效節約時間對于構建。(抱歉,我忘了在reddit 上面發布)
解決方案只能轉移構建工具?
從GDG 的韓國Android成員Alan Jeon,我改進了構建。
1.更新Gradle
$> $project/gradle/wrapper/gradle-wrapper.properties // ... distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-all.zip
2.更新Android Plugin在build.gradle文件中
buildscrpt { dependencies { classpath 'com.android.tools.build:gradle:1.5.0' } }
3.設置minSdk in build.gradle (★★★)
http://developer.android.com/intl/ko/tools/building/multidex.html
android { productFlavors { dev { minSdkVersion 21 } prod { minSdkVersion 14 } } }
打包進程分兩步。一是從class到dex。另一個是合并dex。但api 21 (Lollipop)之后基于ART。因此它不會合并dex。關鍵是節省構建時間。
需要小心的時,修改minsdk 值后,AS不會警告API level。
4.添加gradle.properties
org.gradle.daemon=true org.gradle.parallel=true org.gradle.jvmargs=-Xmx768m
5.添加DexOptions 在 build.gradle文件中
android { dexOptions { incremental true } }
※incremental 有潛在的錯誤(參考鏈接)
性能
構建設備:MacBook Pro Retina 2012 (i7 2.3Ghz, 8GB Ram)
之前
Clean Build : 56.97s Incremental Build : 16.3s
之后
Clean Build : 47.0s (up to 17% ) Incremental Build : 9.58s (up to 41%)
※ 在MultiDex時,Incremental 構建從47秒提高到了17秒。
在迭代開發時(包括TDD),我嘗試提高構建速度。我希望能幫助到很多開發者。
請我喝杯咖啡,請使用支付寶掃描下方二維碼: