在項目中集成Freeline來提升編譯速度【百分百成功】

轉載請標明出處:http://www.jianshu.com/p/e1772bfa9a96

引言

作爲一名 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,是否自動安裝 Freeline?

我們點擊 Install Freeline Automatically ,然後選擇同步 build.gradle 文件。

再次點擊運行 Freeline,來編譯項目並部署到手機,這時如果出現瞭如下圖的錯誤,不要驚慌,請按照接下來的步驟進行

提示執行 Gradle task

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

感謝你的閱讀,如果可以對你有一些微小的幫助,請點擊喜歡+收藏,轉載請標明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章