轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://www.itdecent.cn/p/e1772bfa9a96
引言
作為一名 Androider 你應(yīng)該也曾被 AS 那緩慢的編譯速度所折磨 ,更為可怕的是即使你只是簡(jiǎn)單的修改了幾行代碼,修改了幾個(gè)布局文件,當(dāng)你再次運(yùn)行的時(shí)候還是需要再次進(jìn)行:「編譯項(xiàng)目」—「安裝 APK 到手機(jī)」。這兩個(gè)步驟在我這臺(tái)機(jī)器上,快則 4、5 分鐘,慢則需要 10 多分鐘,調(diào)試過程異常痛苦!
Google 推出過加快編譯速度的解決方案 「Instant Run」,但是用過的朋友應(yīng)該都知道,這個(gè)功能很多時(shí)候存在這一些神奇的 BUG,或者是無法應(yīng)用的情況,而且速度提升有限。
還有一個(gè)比較不錯(cuò)的且簡(jiǎn)單易用的插件,名為 「JRebel for Android」,這個(gè)插件的功能十分強(qiáng)大,編譯速度也很快,但是這個(gè)插件是付費(fèi)插件。
今天我們要介紹的主角是「Freeline」,這是阿里巴巴螞蟻金服旗下的幾位工程師推出的 Android 平臺(tái)下的秒級(jí)編譯方案,Github 地址為:https://github.com/alibaba/freeline。功能十分強(qiáng)大,在第一次全量編譯之后,每次啟動(dòng)從編譯到部署到手機(jī)全程用時(shí)都在數(shù)秒之內(nèi)!可以大大提高開發(fā)調(diào)試的速度與效率!
使用
「Freeline」 推薦的方式為直接安裝 Android Studio 插件來使用,但是在實(shí)際使用過程中,可能會(huì)出現(xiàn)無法下載「Freeline」 的二進(jìn)制依賴,而導(dǎo)致使用失敗,使用 Gradle 命令行指令也會(huì)存在同樣的問題。因此我推薦大家按照我下面的步驟來進(jìn)行,可以確保萬無一失!
準(zhǔn)備工作
對(duì)于 Windows 用戶來說,你需要提前安裝 Python 2.7+(Freeline 暫時(shí)還不支持 Python 3+),安裝完之后需要重啟一下 Android Studio。
對(duì)于 Linux/Mac 用戶,如果你已經(jīng)安裝了 Python 3+,推薦你將其 alias 設(shè)為 python3,再單獨(dú)安裝 Python 2.7+,并作為默認(rèn)的 Python 指令,避免與 Android Studio 插件自動(dòng)運(yùn)行的 python 命令沖突,導(dǎo)致無法正常使用插件。
步驟一:安裝 Android Studio 插件
使用插件可以自動(dòng)的幫我們?cè)陧?xiàng)目 build.gradle 文件中添加各種依賴,從而省去了我們自己修改 build.gradle 文件的步驟。

點(diǎn)擊運(yùn)行 Freeline,在第一次運(yùn)行插件時(shí),會(huì)有如下提示:

大致意思是:檢測(cè)到我們的項(xiàng)目沒有初始化 Freeline,是否自動(dòng)安裝 Freeline?
我們點(diǎn)擊 Install Freeline Automatically ,然后選擇同步 build.gradle 文件。
再次點(diǎn)擊運(yùn)行 Freeline,來編譯項(xiàng)目并部署到手機(jī),這時(shí)如果出現(xiàn)了如下圖的錯(cuò)誤,不要驚慌,請(qǐng)按照接下來的步驟進(jìn)行

步驟二:運(yùn)行 Gradle task : initFreeline
根據(jù)提示內(nèi)容「執(zhí)行 initFreeline 任務(wù)并下在依賴」,我們點(diǎn)開右側(cè)邊欄的 Gradle 選項(xiàng)卡,選擇執(zhí)行:「Application」—「Application」—「Tasks」—「other」—「initFreeline」

這時(shí)如果你能成功執(zhí)行完畢,那么恭喜你,You are a lucky dog!
相信絕多數(shù)的小伙伴都是卡在無比漫長(zhǎng)的下載過程中了,如下圖所示:

參考 Freeline 的手冊(cè)可以看到,官方有考慮到這個(gè)問題,并且提供了我們其他的解決方法,比如使用 Gradle 指令:gradlew initFreeline -Pmirror 來將下載指向國(guó)內(nèi)的鏡像網(wǎng)站。
注意如果在 Linux/Mac 環(huán)境下需要使用指令 ./gradlew initFreeline -Pmirror ,否則你可能會(huì)出現(xiàn)如下提示 gradlew: 未找到命令。
這時(shí)如果你能成功執(zhí)行完畢,那么恭喜你,You are a lucky dog!
如果你的執(zhí)行結(jié)果如下圖:

那么恭喜你,請(qǐng)繼續(xù)收看步驟三。
步驟三:手動(dòng)下載 Freeline 依賴并初始化
使用任何加載工具下載如下鏈接:http://static.freelinebuild.com/freeline/0.8.6/all/freeline.zip
請(qǐng)注意版本,本文使用的是 0.8.6 版本,請(qǐng)根據(jù)你使用的版本來調(diào)整下載鏈接。
下載完畢后,講該文件保存在一個(gè)好記的位置,因?yàn)樯院笠斎朐撐募奈恢谩?/p>
在 Terminal 中使用指令 ./gradlew initfreeline -PfreelineLocal="/home/junerver/Freeline/freeline.zip" 來使用本地依賴來進(jìn)行初始化(博主使用的是 Debian 8.7.1,如果使用的是 Windows 系統(tǒng)請(qǐng)去掉 ./)。

恭喜你,執(zhí)行到這一步,我們就已經(jīng)成功的在項(xiàng)目中集成了 Freeline。
步驟四:運(yùn)行插件使用 Freeline
這個(gè)步驟就是最終一步了,我們?cè)俅吸c(diǎn)擊 Freeline 插件的圖標(biāo)來運(yùn)行 Freeline,注意第一次運(yùn)行的時(shí)候會(huì)進(jìn)行一次全量編譯,再之后的運(yùn)行都是增量編譯,如下圖所示:

由于是一個(gè)空的項(xiàng)目,所以第一次運(yùn)行一共用了 28.8 秒,我們來隨便的修改一下布局文件,然后再次運(yùn)行 Freeline 看一下時(shí)間:

從編譯到部署到手機(jī)一共只用了 0.7 秒,可以看到這個(gè)提速效果真的是非常的明顯。
一些補(bǔ)充
局限
看了上面的文章,你會(huì)感嘆 Freeline 的強(qiáng)大,但它也還是有一些不足之處的,比如:僅支持 Java 語言,對(duì)其他的基于 JVM 語言(如 Kotlin)不支持;不支持刪除帶id的資源,否則可能導(dǎo)致aapt編譯出錯(cuò);不支持開啟 Jack 編譯等等,但是總體看來還是瑕不掩瑜的。
一些有用的命令行指令
大多數(shù)情況下我們使用插件就可以解決問題,但有時(shí)也會(huì)出現(xiàn)一些奇怪的 BUG,這時(shí)候你可能會(huì)需要用到一下的一個(gè) Gradle 指令:
Gradle Task: checkBeforeCleanBuild
主要用于生成工程描述文件,每次 freeline 全量編譯前會(huì)先執(zhí)行一下這個(gè)任務(wù)。當(dāng)你執(zhí)行 python 命令提示報(bào)錯(cuò)的時(shí)候:freeline_core.exceptions.NoConfigFoundException: xxxxxx/project_description.json not found, please execute gradlew checkBeforeCleanBuild first.,也需要先執(zhí)行一下./gradlew checkBeforeCleanBuild。
freeline.py
使用 freeline 進(jìn)行編譯的主要入口,freeline 主要通過 python 來實(shí)現(xiàn)跨平臺(tái)。
參數(shù):
-h
使用方式:python freeline.py -h
參數(shù)說明:輸出 freeline 的參數(shù)使用說明
-v
使用方式:python freeline.py -v
參數(shù)說明:獲取 freeline.py 的版本號(hào)
-f
使用方式:python freeline.py -f
參數(shù)說明:強(qiáng)制進(jìn)行全量編譯
-d
使用方式:python freeline.py -d(注:可與各類參數(shù)疊加使用)
參數(shù)說明:輸出 freeline 的調(diào)試日志(注意:不是對(duì) Android 工程進(jìn)行調(diào)試)
-w
使用方式:python freeline.py -f -w
參數(shù)說明:讓應(yīng)用啟動(dòng)的時(shí)候等待調(diào)試工具連接(目前只支持全量編譯的時(shí)候配合使用),日常調(diào)試推薦直接使用 Android Studio 的attach debugger to Android process
一個(gè)報(bào)錯(cuò) - 2018.4.23
最近在一個(gè)新項(xiàng)目上使用了 Freeline ,完成 Freeline 的依賴之后,在運(yùn)行 python freeline.py 時(shí)出現(xiàn)錯(cuò)誤。報(bào)錯(cuò)內(nèi)容為:
/usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts (沒有那個(gè)文件或目錄)
進(jìn)入該文件夾發(fā)現(xiàn)存在該文件,但雙擊該文件提示 無法使用此鏈接,因?yàn)槠淠繕?biāo)“/etc/ssl/certs/java/cacerts”不存在。
解決方法是:
在終端運(yùn)行指令 apt-get install ca-certificates-java
參考
感謝你的閱讀,如果可以對(duì)你有一些微小的幫助,請(qǐng)點(diǎn)擊喜歡+收藏,轉(zhuǎn)載請(qǐng)標(biāo)明出處。