Android 秒級編譯 Freeline

http://mp.weixin.qq.com/s?__biz=MzA4NTQwNDcyMA==&mid=2650662410&idx=1&sn=c654fa7b0cc8c91ae10e5d85c6a99f2d&chksm=87d13b55b0a6b243459bb28be86c64b76c5f2db518f7025fab4a50ca71444e8adb858bc65a8b&scene=0#rdpython

 

Android 秒級編譯 Freeline

閱讀本文大概須要 6.66 分鐘。android

咱們知道 Android 的編譯很慢,尤爲是項目大點的時候,那編譯速度簡直難以忍受,極大的下降了咱們的開發效率,以前的文章「」給你們介紹過,可是是付費的,用起來不是那麼自由,而今天給你們介紹另一個強大的工具 -- Freeline,絕對秒級編譯。
git

 

GitHub:https://github.com/alibaba/freelinegithub

 

什麼是 Freeline?windows

 

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

 

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

 

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

 

有何優點?maven

 

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

 

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 會有一些限制,以及兼容性可能也會有點問題,可是試用下來沒遇到多大的問題,並且對於調試的效率提高簡直太大了,值得推薦給你們!

 


 

PS: 想要更多的瞭解其原理,請參考如下官方詳細介紹。

 

https://github.com/alibaba/freeline/blob/master/README-zh.md

 

https://yq.aliyun.com/articles/59122

相關文章
相關標籤/搜索