Android開發(fā)工具編譯痛點
現(xiàn)在Android開發(fā)工具應該大部分都是Android Studio吧墓怀,對于一個大型App來說,動輒就是十幾個工程相互依賴逛薇,稍微改幾行代碼捺疼,跑一下都得好幾分鐘,當然這跟電腦的配置也有關系永罚。雖然目前google推出InstantRun,在AS 2.0上使用的一個插件卧秘,用于提高編譯速度呢袱,但是就我使用后的感覺來說,并不是很理想翅敌,可能是我們這邊工程較為復雜羞福,編譯完完整的工程也得需要一兩分鐘。在這里羨慕下Xcode秒級編譯速度蚯涮,肯定的是治专,很多Android開發(fā)友們也有這樣的感覺。
為了解決這個痛點遭顶,最近公司有一個同事調研了Freeline這個工具张峰,結果是非常驚喜的,增量編譯是秒級別的棒旗,在這里喘批,我不騙大家!铣揉!很榮幸可以認識使用它饶深。
Freeline介紹
Freeline是螞蟻金服旗下一站式理財平臺螞蟻聚寶團隊在Android平臺上的量身定做的一個基于動態(tài)替換的編譯方案,穩(wěn)定性方面:完善的基線對齊逛拱,進程級別異常隔離機制敌厘。性能方面:內部采用了類似Facebook的開源工具buck的多工程多任務并發(fā)思想, 并對代碼及資源編譯流程做了深入的性能優(yōu)化。
簡單來說朽合,就是阿里提供的一個增量編譯方案俱两,主要是為了加快日常開發(fā)過程中的項目編譯速度,但是目前只支持debug模式非混淆的開發(fā)旁舰。
Pros
支持大多數(shù)場景的增量編譯
支持retrolambda與注解
支持so動態(tài)替換
支持Windows/Linux/macOS
App crash后锋华,仍然可以通過增量編譯來修復
大多數(shù)情況下增量編譯可以在10s內完成
Cons
初次接入可能存在一定的問題,需要稍微花點時間來解決
在簡單的工程上箭窜,與其他構建方案相比毯焕,沒有明顯的優(yōu)勢
不支持刪除帶id的資源,會報錯
不支持Kotlin
這邊直接進入Freeline的使用方法講解,使用其實也很簡單纳猫,請跟著司機走~
Freeline使用
1.Freeline接入
- 在根目錄的build.gradle中添加classpath 'com.antfortune.freeline:gradle:${latest-version}'婆咸,目前最新版本為0.8.2
- 在主工程(application工程)的build.gradle中添加 apply plugin: 'com.antfortune.freeline'
- ./gradlew initFreeline -Pmirror:初始化Freeline相關依賴, 也可以使用參數(shù)-PfreelineVersion={your-specific-version}來下載特定版本的 freeline 依賴,在所在項目的終端運行以上命令行即可芜辕。
Ps:
- 項目路徑不能包含中文尚骄、空格;
- 命令行符號有誤侵续,應該是./gradlew initFreeline -Pmirror “-”是減號倔丈,并且建議還是要加上鏡像-Pmirror否則下載很慢
上面配置可見下圖:
2.日常開發(fā)-增量編譯與全量編譯
- 增量編譯:python freeline.py
- 全量編譯:python freeline.py -f
Ps:
- 第一次必須全量編譯,記錄設置工程文件的修改信息状蜗,后面才可以增量編譯需五,第一次全量編譯都比較慢,所以大家要耐著心等待編譯完成.
- 如果刪除帶id的資源則必須手動強制全量更新轧坎,增量更新會報錯
- Freeline目前只支持debug buildType宏邮,并且不支持混淆
- gradle的改變都會觸發(fā)全量更新
- 從Freeline的編譯切換到as的編譯,必須先clean build一次
- 增量更新有可能啟動不了關閉的app缸血,但修改已經更新到app里蜜氨,手動啟動app即可看到
全量編譯:
當全量編譯完成,我改動二十幾行代碼捎泻,進行增量編譯:
結果表示飒炎,這個工具很強大,讓我們開發(fā)效率直線上升族扰,不用再苦苦等著緩慢編譯的完成厌丑,使用方法簡單。為了不加班渔呵,大家趕緊用起來吧怒竿!
源碼可見:https://github.com/alibaba/freeline
如果你的工程結構較為復雜,在第一次使用freeline編譯的時候報錯了的話扩氢,你可以添加一些freeline提供的配置項耕驰,來適配你的工程。具體可以看Freeline DSL References录豺。
么么噠朦肘!