引言
作爲一名 Androider 你應該也曾被 AS 那緩慢的編譯速度所折磨 ,更爲可怕的是即使你只是簡單的修改了幾行代碼,修改了幾個佈局文件,當你再次運行的時候還是需要再次進行:「編譯項目」—「安裝 APK 到手機」。這兩個步驟在我這臺機器上,快則 4、5 分鐘,慢則需要 10 多分鐘,調試過程異常痛苦!
Google 推出過加快編譯速度的解決方案 「Instant Run」,但是用過的朋友應該都知道,這個功能很多時候存在這一些神奇的 BUG,或者是無法應用的情況,而且速度提升有限。
還有一個比較不錯的且簡單易用的插件,名爲 「JRebel for Android」,這個插件的功能十分強大,編譯速度也很快,但是這個插件是付費插件。
今天我們要介紹的主角是「Freeline」,這是阿里巴巴螞蟻金服旗下的幾位工程師推出的 Android 平臺下的秒級編譯方案,Github 地址爲:https://github.com/alibaba/freeline。功能十分強大,在第一次全量編譯之後,每次啓動從編譯到部署到手機全程用時都在數秒之內!可以大大提高開發調試的速度與效率!
使用
「Freeline」 推薦的方式爲直接安裝 Android Studio 插件來使用,但是在實際使用過程中,可能會出現無法下載「Freeline」 的二進制依賴,而導致使用失敗,使用 Gradle 命令行指令也會存在同樣的問題。因此我推薦大家按照我下面的步驟來進行,可以確保萬無一失!
0 準備工作
對於 Windows 用戶來說,你需要提前安裝 Python 2.7+(Freeline 暫時還不支持 Python 3+),安裝完之後需要重啓一下 Android Studio。
對於 Linux/Mac 用戶,如果你已經安裝了 Python 3+,推薦你將其 alias 設爲 python3,再單獨安裝 Python 2.7+,並作爲默認的 Python 指令,避免與 Android Studio 插件自動運行的 python 命令衝突,導致無法正常使用插件。
1 安裝 Android Studio 插件
使用插件可以自動的幫我們在項目 build.gradle 文件中添加各種依賴,從而省去了我們自己修改 build.gradle 文件的步驟。
點擊運行 Freeline,在第一次運行插件時,會有如下提示:
大致意思是:檢測到我們的項目沒有初始化 Freeline,是否自動安裝 Freeline?
我們點擊 Install Freeline Automatically ,然後選擇同步 build.gradle 文件。
再次點擊運行 Freeline,來編譯項目並部署到手機,這時如果出現瞭如下圖的錯誤,不要驚慌,請按照接下來的步驟進行
2 運行 Gradle task : initFreeline
根據提示內容「執行 initFreeline 任務並下在依賴」,我們點開右側邊欄的 Gradle 選項卡,選擇執行:「Application」—「Application」—「Tasks」—「other」—「initFreeline」
這時如果你能成功執行完畢,那麼恭喜你,You are a lucky dog!
相信絕多數的小夥伴都是卡在無比漫長的下載過程中了,如下圖所示:
參考 Freeline 的手冊可以看到,官方有考慮到這個問題,並且提供了我們其他的解決方法,比如使用 Gradle 指令:gradlew initFreeline -Pmirror
來將下載指向國內的鏡像網站。
注意如果在 Linux/Mac 環境下需要使用指令 ./gradlew initFreeline -Pmirror
,否則你可能會出現如下提示 gradlew: 未找到命令
。
這時如果你能成功執行完畢,那麼恭喜你,You are a lucky dog!
如果你的執行結果如下圖:
那麼恭喜你,請繼續收看步驟三。
3 手動下載 Freeline 依賴並初始化
使用任何加載工具下載如下鏈接:http://static.freelinebuild.com/freeline/0.8.6/all/freeline.zip
請注意版本,本文使用的是 0.8.6 版本,請根據你使用的版本來調整下載鏈接。
下載完畢後,講該文件保存在一個好記的位置,因爲稍後要輸入該文件的位置。
在 Terminal 中使用指令 ./gradlew initfreeline -PfreelineLocal="/home/junerver/Freeline/freeline.zip"
來使用本地依賴來進行初始化(博主使用的是 Debian 8.7.1,如果使用的是 Windows 系統請去掉 ./
)。
恭喜你,執行到這一步,我們就已經成功的在項目中集成了 Freeline。
4 運行插件使用 Freeline
這個步驟就是最終一步了,我們再次點擊 Freeline 插件的圖標來運行 Freeline,注意第一次運行的時候會進行一次全量編譯,再之後的運行都是增量編譯,如下圖所示:
由於是一個空的項目,所以第一次運行一共用了 28.8 秒,我們來隨便的修改一下佈局文件,然後再次運行 Freeline 看一下時間:
從編譯到部署到手機一共只用了 0.7 秒,可以看到這個提速效果真的是非常的明顯。
一些補充
侷限
看了上面的文章,你會感嘆 Freeline 的強大,但它也還是有一些不足之處的,比如:僅支持 Java 語言,對其他的基於 JVM 語言(如 Kotlin)不支持;不支持刪除帶id的資源,否則可能導致aapt編譯出錯;不支持開啓 Jack 編譯等等,但是總體看來還是瑕不掩瑜的。
一些有用的命令行指令
大多數情況下我們使用插件就可以解決問題,但有時也會出現一些奇怪的 BUG,這時候你可能會需要用到一下的一個 Gradle 指令:
Gradle Task: checkBeforeCleanBuild
主要用於生成工程描述文件,每次 freeline 全量編譯前會先執行一下這個任務。當你執行 python 命令提示報錯的時候:freeline_core.exceptions.NoConfigFoundException: xxxxxx/project_description.json not found, please execute gradlew checkBeforeCleanBuild first.,也需要先執行一下gradlew checkBeforeCleanBuild。
freeline.py
使用 freeline 進行編譯的主要入口,freeline 主要通過 python 來實現跨平臺。
參數:
-h
使用方式:python freeline.py -h
參數說明:輸出 freeline 的參數使用說明
-v
使用方式:python freeline.py -v
參數說明:獲取 freeline.py 的版本號
-f
使用方式:python freeline.py -f
參數說明:強制進行全量編譯
-d
使用方式:python freeline.py -d(注:可與各類參數疊加使用)
參數說明:輸出 freeline 的調試日誌(注意:不是對 Android 工程進行調試)
-w
使用方式:python freeline.py -f -w
參數說明:讓應用啓動的時候等待調試工具連接(目前只支持全量編譯的時候配合使用),日常調試推薦直接使用 Android Studio 的attach debugger to Android process
感謝你的閱讀,如果可以對你有一些微小的幫助,請點擊喜歡+收藏,轉載請標明出處。