Android 秒級編譯 Freeline

SyrMendiola 8年前發布 | 5K 次閱讀 安卓開發 Android開發 移動開發

我們知道 Android 的編譯很慢,尤其是項目大點的時候,那編譯速度簡直難以忍受,極大的降低了我們的開發效率,之前的文章「 Android 高效調試神器 JRebel 」給大家介紹過,但是是付費的,用起來不是那么自由,而今天給大家介紹另外一個強大的工具 – Freeline ,絕對秒級編譯。

什么是 Freeline?

Freeline 是螞蟻金服旗下平臺螞蟻聚寶 Android 團隊開發的一款針對 Android 平臺的增量編譯工具,它可以充分利用緩存文件,在幾秒鐘內迅速地對代碼的改動進行編譯并部署到設備上,有效地減少了日常開發中的大量重新編譯與安裝的耗時,現已開源。

穩定性方面:完善的基線對齊,進程級別異常隔離機制。

性能方面:內部采用了類似 非死book 的開源工具 buck 的多工程多任務并發思想:端口掃描,代碼掃描,并發編譯,并發 dx,并發 merge dex 等策略,在多核機器上有明顯加速效果,另外在 class 及 dex,resources 層面作了相應緩存策略,做到真正增量開發,另外引入并優化 buck 的部分加速組件 dx,DexMerger,資源編譯方面,深入改造了 Aapt 資源編譯流程,當資源發生改變時候,秒級完成增量包編譯,其中增量包僅含最小的變更集合(10Kb~數百Kb內),后期也被運用到線上進行資源/代碼動態替換。相比目前 instant-run,buck,layoutcast 等方案快數倍速度。

有何優勢?

  1. 真增量,構建過程快且增量包體積小,極大提升更改代碼部署到手機速度,較 Android studio 2.0 及 LayoutCast 快 3~5 倍

  2. 跨平臺 Linux,mac,windows

  3. 全版本覆蓋 2.x ~ 6.x版本均支持

  4. 部署流程簡化,更改代碼后,構建過程中,與手機建立了 tcp 長連接,一行命令即可完成增量部署,毋需到各自子 bundle 所在的目錄構建完成后再進入 portal/launcher 進行打包再安裝到手機的過程

  5. 事務支持,在開發過程引入的異常不會破壞工作空間

  6. 無縫支持 mPass,解決了類似 maven 各個節點需 merge 合并等與常規開發流程不一致的問題

  7. 進程級別異常隔離,開發體驗持續穩定

支持的功能

  • 支持標準的多模塊Gradle工程的增量構建

  • 并發執行增量編譯任務

  • 進程級別異常隔離機制

  • 支持so動態更新

  • 支持resource.arsc緩存

  • 支持retrolambda

  • 支持DataBinding

  • 支持各類主流注解庫

  • 支持Windows,Linux,Mac平臺

如何使用?

首先你的電腦上應該安裝 Python,如果沒有安裝,請自行搜索安裝,相信你可以搞得定。

其次配置 project-level 的 build.gradle,加入 freeline-gradle 的依賴:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.antfortune.freeline:gradle:0.8.2'
    }
}

然后,在你的主 module 的 build.gradle 中,一般也就是你 app 目錄下的 build.gradle 文件,應用 freeline 插件的依賴,記得點擊 Sync 按鈕進行同步下載。

apply plugin: 'com.antfortune.freeline'

android {
    ...
}

最后,在命令行執行以下命令來下載 freeline 的 python 和二進制依賴,注意切換到項目目錄執行:

  • Windows[CMD]: gradlew initFreeline

  • Linux/Mac: ./gradlew initFreeline

對于國內的用戶來說,如果你的下載的時候速度很慢,你也可以加上參數,執行gradlew initFreeline -Pmirror,這樣就會從國內鏡像地址來下載。

下載完成之后,在命令行輸入 python freeline.py 即可進行編譯運行。

當然如果每次都輸入也挺麻煩的,最簡單的用法是直接安裝 Android Studio 插件。

在 Android Studio 中,通過以下路徑 Preferences → Plugins → Browse repositories,搜索“freeline”,并安裝,之后你會看到工具欄有如下按鈕:

直接點擊 Run Freeline 的按鈕,本質上也就是幫你在命令行輸入上述命令而已。

使用體驗

自己在項目上親自體驗了,綜合使用下來確實很爽,真正實現了秒級編譯,不管你是更改了代碼文件還是資源文件,直接編譯運行真正是秒級的,而在之前可能得等上個一兩分鐘。但是使用下來有以下注意事項:

  • 第一次增量資源編譯的時候有點慢,不過也就在第一次的時候慢,后面速度蹭蹭的;

  • 如果設備上之前有安裝不是用 Freeline 編譯打包的 apk,請先卸載,之后再用 Freeline 編譯打包;

  • 第一次 Freeline 編譯安裝之后不會自動啟動 App,這點請大家注意下,因為第一次我一直在等待,等了好久以為沒成功,后來才發現其實安裝成功了的,只是沒有打開而已;

  • 不支持多設備同時連接,也就是說不管是模擬器還是真機,只允許同時一臺設備連接,否則會失敗;

  • 不支持刪除帶 id 的資源,否則可能導致 aapt 編譯出錯;

  • 如果你的項目有使用 Kotlin 語言,那么 Freeline 不支持;

  • 如果你的項目又想用 Freeline,又想使用 Gradle,記得執行 Gradle 腳本之前先執行 ** ./gradlew clean,否則會編譯失敗;

總體而已 Freeline 會有一些限制,以及兼容性可能也會有點問題,但是試用下來沒遇到多大的問題,而且對于調試的效率提升簡直太大了,值得推薦給大家!

 

 

來自:http://stormzhang.com/2016/12/02/android-seconds-build-freeline/

 

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