加快Android構建速度

jopen 8年前發布 | 19K 次閱讀 Android Studio開發工具

尊重勞動成果,轉載請注明出處:http://blog.csdn.net/growth58/article/details/49589885
原文鏈接:https://medium.com/android-news/android-build-speed-up-ver-english-c76890aa610#.92skzplgc
關注新浪微博:@于衛國
郵箱:yuweiguocn@gmail.com

EclipseAndroid Studio

AntGradle

自從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屬性,然后他們總是得同步GradleAS。并且不得不學習GradleGradle還很慢。

自從去年我使用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 或者其它的上面。

但是轉移到BuckBazelPants之后,一些開發者說它可以很高效節約時間對于構建。(抱歉,我忘了在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),我嘗試提高構建速度。我希望能幫助到很多開發者。

請我喝杯咖啡,請使用支付寶掃描下方二維碼:

這里寫圖片描述

來自: http://blog.csdn.net/growth58/article/details/49589885

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!