構建編譯Android項目的Docker鏡像
2016年01月26日
60
分類:Android APP開發方案
接觸Docker的這段時間里,Docker給我的Android開發帶來了許多方便與驚喜。本文就是將Docker用于自動化編譯Android項目的一次嘗試。
1.構建Android編譯環境的基礎鏡像
首先我們構建一個具有Android編譯環境的基礎鏡像,該鏡像主要是做Android SDK的下載與components的安裝,我已將其push到了DockerHub:androidbuilder。目前的最新版本是V1.0,已安裝版本號為19、21、22、23相關的build-tool。
嘗試編譯Android項目
有了基礎鏡像,我們來嘗試使用其編譯Android項目,在我們項目的根目錄添加如下Dockerfile:
ROM saymagic/androidbuilder:v1.0MAINTAINER saymagic <saymagic.dev@gmail.com>ENV PROJECT /projectRUN mkdir $PROJECTWORKDIR $PROJECTADD . $PROJECTRUN chmod +x ./gradlewRUN echo "sdk.dir=$ANDROID_HOME" > local.properties && \./gradlew --stacktrace app:dependencies
我們首先將該Dockerfile構建成鏡像:
docker build -t saymagic/androiddockertest:v1.0 .
這樣,saymagic/androiddockertest:v1.0鏡像中就會包含了我們的項目,之后,我們只需要將該容器運行起來,在根目錄下輸入如下命令:
docker run -it -v $(pwd)/app:/project/app saymagic/androiddockertest:v1.0 ./gradlew build --info
此時,我們就可以看到通過Docker構建出的apk文件:
以上只是一個簡單的嘗試,如果你對源碼感興趣或者想構建自己的編譯環境,請參考這里:https://gist.github.com/saymagic/dcbcf1629c53e5b721c3
2.搭建持續編譯環境
第一步中我們實現了可以編譯Android項目的基礎鏡像,我們將其做一次大改進,繼續在基礎鏡像中安裝gradle與jenkins。搭建一個可以持續編譯Android項目的Docker環境。
最終成型的鏡像在此:androidjenkins,最新版本v2.0.
使用方式非常簡單,在含有Docker的主機上運行如下命令(注意指定的Volume與Port):
docker run -it -v $(pwd)/jenkins:/var/jenkins_home -p 80:8080 saymagic/androidjenkins:v2.0 ./start.sh
運行完成之后,打開我們的主機80端口,就會看到Jenkins的身影:
此時,推薦安裝如下一些Jenkins插件:
Gradle 插件:
Git 插件:
Fir.im的Jenkins插件:
使用方法: http://blog.fir.im/jenkins/
該插件可以將構建后的apk文件直接上傳至Fir.im,可以很方便的讓測試人員下載到最新版本。
關于Jenkins的相關使用這里不做過多介紹。至此,一個可持續編譯Android的環境就已完成,要知道,我們只運行了一行代碼而已。
該鏡像的相關源碼在這里:https://github.com/saymagic/AndroidJenkins,歡迎star。
總結
綜上,我們只需要本地進行push代碼,就會更新Fir.im中的項目。并且整個過程非常簡單,無需再搭建復雜Android的環境。非常值得一試。
但需要提醒大家的是整個鏡像還是相當大的,并且對于內存的需求也是很高,比如不到1G內存的虛擬機就不要嘗試了。推薦digitalocean的新加坡機房,上2G內存,直接選擇含有Docker的主機,速度相當不錯,因為在國外,也無需為各種類庫無法下載而苦惱。我相信一刻鐘的時間你就會看到成型的效果。Enjoy it!