FreeLine使用指南

FreeLine

阿里Gradle加速使用指南。

FreeLine介紹

Freeline是由阿里巴巴螞蟻聚寶Android團(tuán)隊(duì)開發(fā)的一款針對Android平臺的增量編譯工具,它可以充分利用緩存文件,在幾秒鐘內(nèi)迅速地對代碼的改動進(jìn)行編譯并部署到設(shè)備上,有效地減少了日常開發(fā)中的大量重新編譯與安裝的耗時(shí)。

Freeline代碼開源在Github

Freeline在云棲社區(qū)的原理說明

特性

  • 支持標(biāo)準(zhǔn)的多模塊 Gradle 工程的增量構(gòu)建
  • 并發(fā)執(zhí)行增量編譯任務(wù)
  • 進(jìn)程級別異常隔離機(jī)制
  • 支持 so 動態(tài)更新
  • 支持 resource.arsc 緩存
  • 支持 retrolambda
  • 支持 DataBinding
  • 支持各類主流注解庫
  • 支持 Windows,Linux,Mac 平臺

局限性

  • 第一次增量資源編譯的時(shí)候可能會有點(diǎn)慢
  • 不支持刪除帶 id 的資源,否則可能導(dǎo)致 aapt 編譯出錯(cuò)
  • 暫不支持抽象類的增量編譯
  • 不支持開啟 Jack 編譯
  • 不支持 Kotlin/Groovy/Scala

如何安裝FreeLine

FreeLine安裝前的準(zhǔn)備

1.安裝python、并配置系統(tǒng)環(huán)境變量

因?yàn)镕reeline是用python寫的,下面的的所有操作,包括編譯等都要依賴python,所以我們要安裝python,并且配置系統(tǒng)環(huán)境變量。

Python分2.x版本和3.x版本,但是Freeline目前只支持2.x版本的,以前學(xué)過一點(diǎn)點(diǎn)python,這里為大家推薦2.7.12版:點(diǎn)擊下載

FreeLine的項(xiàng)目初始化安裝

1.配置項(xiàng)目根目錄的 build.gradle,加入 freeline-gradle 的依賴:

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

2.然后,在你的主 module 的 build.gradle 中,應(yīng)用 freeline 插件的依賴:

apply plugin: 'com.antfortune.freeline'

android {
    ...
}

3.在命令行執(zhí)行以下命令來下載 freeline 的 python 和二進(jìn)制依賴。

  • Windows: gradlew initFreeline
  • Linux/Mac: ./gradlew initFreeline

注意點(diǎn):

  • 如果命令執(zhí)行提示-bash: ./gradlew: Permission denied,使用命令 chmod +x gradlew 解決

  • 如果你的下載的時(shí)候速度很慢,你也可以加上參數(shù),執(zhí)行g(shù)radlew initFreeline -Pmirror,這樣就會從國內(nèi)鏡像地址來下載。

  • 你也可以使用參數(shù)-PfreelineVersion={your-specific-version}來下載特定版本的 freeline 依賴。

  • 如果你的工程結(jié)構(gòu)較為復(fù)雜,在第一次使用 freeline 編譯的時(shí)候報(bào)錯(cuò)了的話,你可以添加一些 freeline 提供的配置項(xiàng),來適配你的工程。具體可以看 Freeline DSL References。

完成如上操作后,你的項(xiàng)目中會增加如下內(nèi)容:


image

至此,你已經(jīng)安裝完畢所有的freeline依賴。

如何使用FreeLine

運(yùn)行項(xiàng)目

第一次運(yùn)行是需要全量編譯,所以第一次的時(shí)間相對較長,甚至比gradle編譯還要長,但是后期的運(yùn)行會很快。
第一次全量編譯,在命令行輸入:

python freeline.py -f

如果我們后期修改了代碼,秒秒鐘就可以熱更新到手機(jī)

python freeline.py

如果你要調(diào)試應(yīng)用,在命令行輸入:

python freeline.py -d

常用命令

執(zhí)行命令 描述
python freeline.py 增量編譯
python freeline.py -f 全量編譯 cleanBuild 強(qiáng)制執(zhí)行一次 clean build
python freeline.py -d 調(diào)試 打開debug模式
python freeline.py -h 幫助 顯示幫助信息并退出
python freeline.py -v 版本 顯示版本信息
python freeline.py -w 等待 讓應(yīng)用程序等待 debugger
python freeline.py -a 全部 在所有工程上強(qiáng)制執(zhí)行clean build 并執(zhí)行-f全量編譯
python freeline.py -c 清空 清空緩存目錄和工作空間
python freeline.py -i 初始化 對工程進(jìn)行進(jìn)行freeline初始化配置

【注意】:雖然官方提供了freeline的AS插件,但是在實(shí)際使用的過程中,我發(fā)現(xiàn)還是存在各種奇葩的問題,因此不推薦使用。實(shí)踐證明,還是使用命令比較穩(wěn)健。

速度測試

為了測試freeline加速的效果,我使用本項(xiàng)目進(jìn)行測試

測試內(nèi)容:

  • 第一次全量編譯
  • 第二次修改項(xiàng)目代碼(修改內(nèi)容如下圖),進(jìn)行增量編譯。
image

Instant Run

1.第一次進(jìn)行全量編譯:

image

2.第二次進(jìn)行增量編譯:

image

FreeLine

1.第一次進(jìn)行全量編譯:

image

2.第二次進(jìn)行增量編譯:

image

由上可以看到,freeline第一次進(jìn)行全量編譯所需要的時(shí)間要遠(yuǎn)大于Instant Run,但是在后面修改代碼后進(jìn)行增量編譯時(shí),freeline明顯要快好多。

常見問題

1.問:使用python freeline.py -d無法進(jìn)行debug斷點(diǎn)調(diào)試?
答:“python freeline.py -d" 中的-d 不是我想象中的進(jìn)行debug,而是輸出freeline的log參數(shù);如果想進(jìn)行debug,要結(jié)合android studio的attach debugger 按鈕。

2.問:資源文件(res下)修改后,編譯閃退問題。
答:閃退現(xiàn)象是:單單資源文件修改會閃退,資源文件+java文件修改正常。
github上的回復(fù)是:這個(gè)現(xiàn)象不是閃退,而是我的activity在重建的時(shí)候調(diào)用了兩次finish,把重建的activity的關(guān)掉了。
暫時(shí)解決方案是:如果單單修改資源文件,那么找個(gè)java文件 打個(gè)空格保存一下,這樣也不是特別麻煩,可以接受,先這樣用著吧。

其實(shí),在修改個(gè)別資源文件,進(jìn)行增量編譯時(shí),可能會導(dǎo)致程序崩潰。因此,我建議如果你修改了資源文件,還是不要使用freeline的增量編譯。

其他常見問題點(diǎn)擊查看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容