Android專案快速編譯之Freeline-Android的配置與整合
螞蟻金服旗下開發的Freeline,在使用中遇到的一些問題 。做如下整理,希望對大家有幫助
接下來我們就開始整合Freeline到專案中去,主要講一下我在配置的過程中遇到的問題。
首先,Freeline是採用Python編寫的,所以我們需要安裝python環境,根據網上的說法,最好使用python2.7版本(有人使用python3.5無法成功整合)。
在python環境安裝成功後,我們就可以著手在專案中整合Freeline了。根據在github中給出的配置的過程,我們先做一下幾件事。
Freeline 初始化環境:
根目錄下的 build.gradle(工程級別的build.gradle檔案)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
專案下面的 build.gradle(Module級別的build.gradle檔案)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
自定義的 Application
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
執行完這些步驟以後,接下在命令列(或者AS的終端)中執行以下命令:
Windows: gradlew.bat initFreeline -Pmirror
Linux/Mac:
./gradlew initFreeline -Pmirror
初始化成功後,執行第一條python命令
python freeline.py
第一次編譯時全量編譯比較慢,第二次就是毫秒級別的了
至此,Freeline已經成功的整合到了我們的專案中,如果覺得每次執行命令列比較繁瑣,可以在AS中安裝Freeline的外掛
File->Settings->plugins->搜尋Freeline即可
安裝後就可以在專案中直接點選相應的圖示使用,其實也是執行python freeline.py這條命令。
在Android Studio中,通過以下路徑File → Settings → Plugins → Browse
repositories,搜尋“freeline”,並安裝。
安裝完之後需要重啟Android Studio。
這時候會有以下圖示
4、點選這個按鈕,第一次點選會自動進行gradle的配置,但是不會自動build。需要自己手動進行,如果不是的話也會有相應提示,仔細找會找到的,操作很簡單。
5、看Android
Studio的底部,你會看到以下圖示
開啟Freeline的視窗,跟Terminal的視窗差不多,然後執行 gradlew -initFreeline
, 如果Freeline的命令視窗執行不了,可以在Terminal的視窗執行也可以,當然也可以在cmd裡面執行,只不過要切換到專案目錄裡面去執行... 這個操作會下載相應的檔案,如果比較慢或者無法下載那麼就要使用vpn了
6、然後再次點選Freeline的外掛按鈕,預設執行
python freeline.py 也可以手動輸入命令進行編譯,編譯完後會自動安裝到手機上或者模擬器上。
上面就是安裝流程了,下面說下遇見的錯誤,首先:
1、使用Freeline編譯不能使用
1.Python版本問題
2.productFlavors問題
在主Module的build.gradle中配置productFlavors,例如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
3.could not find class……問題
在Application類中的onCreate()方法中新增FreelineCore.init(this)方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4.能夠正常編譯,但是開啟應用程式崩
在主Module的build.gradle中配置freeline :
- 1
- 2
- 3
- 1
- 2
- 3
在Application類中加入:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
5.install apk to device failed
排查方法:
- 換成系統5.0以上的裝置
- 刪除手機上的應用程式,進行一次全量編譯(python freeline.py -f)
- clean專案(gradlew clean),進行全量編譯(python freeline.py -f)
6.連線不到裝置
排查方法如下(建議配合使用Python freeline.py -d):
1.確定FreelineCore.init(this);加入到Application類中,且在onCreate()下的第一行,不要根據是否在主程序做特殊處理,否則可能導致FreelineService無法正常啟動;[Freeline 0.7.0+開始,預設開啟了Application替換,這條可以不用檢查]
2.確定FreelineService以及freeline相關元件是否正常merge到最終的minifest中,最終的manifest路徑在${module}/build/intermediates/manifests中;
3.確定python freeline.py -v與定義在build.gradle中的freeline的版本是否一致;
4.確定是否剛剛執行了清空app資料的操作,freeline快取資料在/data/data路徑,清空app資料也會導致連線不上的問題(執行freeline命令時,通常會有句明顯的日誌反覆出現:server result is -1);
5.確定是否開啟了網路代理導致127.0.0.1被重定向?
* 6.一定要先使用freeline來打全量包,再來進行增量,否則也會出現這個問題。即,freeline的全量編譯與Android-studio自帶的RUN會存在衝突。*
當上述問題都無法解決時,有個終極的解決方案就是重啟試試…不少人通過重啟順利解決連線不上的問題。。。
後續會通過自動化的方式,儘量避免手工排查上述問題。有遇見相關的問題可以具體描述一下,在issue中進行回覆,可以幫忙排查。
連線不到裝置,重點排查第5,6步驟。另外還需在AndroidManifest檔案中新增:
- 1
- 2
- 3
- 1
- 2
- 3
注意事項
- 第一次編譯與沒有使用freeline之前的編譯時間是一樣的,耐心等待就是了。第一次使用全量編譯(python freeline.py -f),但在全量編譯前最好clean一下(gradlew clean),以後的編譯使用python freeline.py就行了。
- 如果裝置上安裝的不是使用freeline編譯打包的程式,請先解除安裝,否則會無法安裝。ps:後續使用freeline編譯打包安裝完,可能不會自動開啟應用程式。
- 不支援刪除res/values資源,否則可能導致 aapt 編譯出錯。
- 不支援Kotlin/Groovy/Scala語言
其他參考連結: http://www.qingpingshan.com/rjbc/az/182819.html