轉(zhuǎn)載請標(biāo)明出處:http://www.reibang.com/p/e1772bfa9a96
引言
作為一名 Androider 你應(yīng)該也曾被 AS 那緩慢的編譯速度所折磨 把夸,更為可怕的是即使你只是簡單的修改了幾行代碼映屋,修改了幾個布局文件,當(dāng)你再次運(yùn)行的時候還是需要再次進(jìn)行:「編譯項(xiàng)目」—「安裝 APK 到手機(jī)」篡诽。這兩個步驟在我這臺機(jī)器上,快則 4、5 分鐘,慢則需要 10 多分鐘撵渡,調(diào)試過程異常痛苦!
Google 推出過加快編譯速度的解決方案 「Instant Run」死嗦,但是用過的朋友應(yīng)該都知道趋距,這個功能很多時候存在這一些神奇的 BUG,或者是無法應(yīng)用的情況越除,而且速度提升有限节腐。
還有一個比較不錯的且簡單易用的插件,名為 「JRebel for Android」摘盆,這個插件的功能十分強(qiáng)大翼雀,編譯速度也很快,但是這個插件是付費(fèi)插件孩擂。
今天我們要介紹的主角是「Freeline」锅纺,這是阿里巴巴螞蟻金服旗下的幾位工程師推出的 Android 平臺下的秒級編譯方案,Github 地址為:https://github.com/alibaba/freeline肋殴。功能十分強(qiáng)大囤锉,在第一次全量編譯之后,每次啟動從編譯到部署到手機(jī)全程用時都在數(shù)秒之內(nèi)护锤!可以大大提高開發(fā)調(diào)試的速度與效率官地!
使用
「Freeline」 推薦的方式為直接安裝 Android Studio 插件來使用,但是在實(shí)際使用過程中烙懦,可能會出現(xiàn)無法下載「Freeline」 的二進(jìn)制依賴驱入,而導(dǎo)致使用失敗,使用 Gradle 命令行指令也會存在同樣的問題氯析。因此我推薦大家按照我下面的步驟來進(jìn)行亏较,可以確保萬無一失!
準(zhǔn)備工作
對于 Windows 用戶來說掩缓,你需要提前安裝 Python 2.7+(Freeline 暫時還不支持 Python 3+)雪情,安裝完之后需要重啟一下 Android Studio。
對于 Linux/Mac 用戶你辣,如果你已經(jīng)安裝了 Python 3+巡通,推薦你將其 alias 設(shè)為 python3,再單獨(dú)安裝 Python 2.7+舍哄,并作為默認(rèn)的 Python 指令宴凉,避免與 Android Studio 插件自動運(yùn)行的 python 命令沖突,導(dǎo)致無法正常使用插件表悬。
步驟一:安裝 Android Studio 插件
使用插件可以自動的幫我們在項(xiàng)目 build.gradle 文件中添加各種依賴弥锄,從而省去了我們自己修改 build.gradle 文件的步驟。
點(diǎn)擊運(yùn)行 Freeline,在第一次運(yùn)行插件時籽暇,會有如下提示:
大致意思是:檢測到我們的項(xiàng)目沒有初始化 Freeline温治,是否自動安裝 Freeline?
我們點(diǎn)擊 Install Freeline Automatically 图仓,然后選擇同步 build.gradle 文件罐盔。
再次點(diǎn)擊運(yùn)行 Freeline,來編譯項(xiàng)目并部署到手機(jī)救崔,這時如果出現(xiàn)了如下圖的錯誤惶看,不要驚慌,請按照接下來的步驟進(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」
這時如果你能成功執(zhí)行完畢,那么恭喜你劫窒,You are a lucky dog本今!
相信絕多數(shù)的小伙伴都是卡在無比漫長的下載過程中了,如下圖所示:
參考 Freeline 的手冊可以看到主巍,官方有考慮到這個問題冠息,并且提供了我們其他的解決方法,比如使用 Gradle 指令:gradlew initFreeline -Pmirror
來將下載指向國內(nèi)的鏡像網(wǎng)站孕索。
注意如果在 Linux/Mac 環(huán)境下需要使用指令 ./gradlew initFreeline -Pmirror
逛艰,否則你可能會出現(xiàn)如下提示 gradlew: 未找到命令
。
這時如果你能成功執(zhí)行完畢搞旭,那么恭喜你散怖,You are a lucky dog!
如果你的執(zhí)行結(jié)果如下圖:
那么恭喜你肄渗,請繼續(xù)收看步驟三镇眷。
步驟三:手動下載 Freeline 依賴并初始化
使用任何加載工具下載如下鏈接:http://static.freelinebuild.com/freeline/0.8.6/all/freeline.zip
請注意版本,本文使用的是 0.8.6 版本翎嫡,請根據(jù)你使用的版本來調(diào)整下載鏈接欠动。
下載完畢后,講該文件保存在一個好記的位置钝的,因?yàn)樯院笠斎朐撐募奈恢谩?/p>
在 Terminal 中使用指令 ./gradlew initfreeline -PfreelineLocal="/home/junerver/Freeline/freeline.zip"
來使用本地依賴來進(jìn)行初始化(博主使用的是 Debian 8.7.1翁垂,如果使用的是 Windows 系統(tǒng)請去掉 ./
)。
恭喜你硝桩,執(zhí)行到這一步,我們就已經(jīng)成功的在項(xiàng)目中集成了 Freeline枚荣。
步驟四:運(yùn)行插件使用 Freeline
這個步驟就是最終一步了碗脊,我們再次點(diǎn)擊 Freeline 插件的圖標(biāo)來運(yùn)行 Freeline,注意第一次運(yùn)行的時候會進(jìn)行一次全量編譯,再之后的運(yùn)行都是增量編譯衙伶,如下圖所示:
由于是一個空的項(xiàng)目祈坠,所以第一次運(yùn)行一共用了 28.8 秒,我們來隨便的修改一下布局文件矢劲,然后再次運(yùn)行 Freeline 看一下時間:
從編譯到部署到手機(jī)一共只用了 0.7 秒赦拘,可以看到這個提速效果真的是非常的明顯。
一些補(bǔ)充
局限
看了上面的文章芬沉,你會感嘆 Freeline 的強(qiáng)大躺同,但它也還是有一些不足之處的,比如:僅支持 Java 語言丸逸,對其他的基于 JVM 語言(如 Kotlin)不支持蹋艺;不支持刪除帶id的資源,否則可能導(dǎo)致aapt編譯出錯黄刚;不支持開啟 Jack 編譯等等捎谨,但是總體看來還是瑕不掩瑜的。
一些有用的命令行指令
大多數(shù)情況下我們使用插件就可以解決問題憔维,但有時也會出現(xiàn)一些奇怪的 BUG涛救,這時候你可能會需要用到一下的一個 Gradle 指令:
Gradle Task: checkBeforeCleanBuild
主要用于生成工程描述文件,每次 freeline 全量編譯前會先執(zhí)行一下這個任務(wù)业扒。當(dāng)你執(zhí)行 python 命令提示報(bào)錯的時候: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)跨平臺咧栗。
參數(shù):
-h
使用方式:python freeline.py -h
參數(shù)說明:輸出 freeline 的參數(shù)使用說明
-v
使用方式:python freeline.py -v
參數(shù)說明:獲取 freeline.py 的版本號
-f
使用方式:python freeline.py -f
參數(shù)說明:強(qiáng)制進(jìn)行全量編譯
-d
使用方式:python freeline.py -d(注:可與各類參數(shù)疊加使用)
參數(shù)說明:輸出 freeline 的調(diào)試日志(注意:不是對 Android 工程進(jìn)行調(diào)試)
-w
使用方式:python freeline.py -f -w
參數(shù)說明:讓應(yīng)用啟動的時候等待調(diào)試工具連接(目前只支持全量編譯的時候配合使用),日常調(diào)試推薦直接使用 Android Studio 的attach debugger to Android process
一個報(bào)錯 - 2018.4.23
最近在一個新項(xiàng)目上使用了 Freeline 虱肄,完成 Freeline 的依賴之后致板,在運(yùn)行 python freeline.py
時出現(xiàn)錯誤。報(bào)錯內(nèi)容為:
/usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts (沒有那個文件或目錄)
進(jìn)入該文件夾發(fā)現(xiàn)存在該文件咏窿,但雙擊該文件提示 無法使用此鏈接斟或,因?yàn)槠淠繕?biāo)“/etc/ssl/certs/java/cacerts”不存在。
解決方法是:
在終端運(yùn)行指令 apt-get install ca-certificates-java
參考
感謝你的閱讀萝挤,如果可以對你有一些微小的幫助,請點(diǎn)擊喜歡+收藏根欧,轉(zhuǎn)載請標(biāo)明出處怜珍。