構(gòu)建編譯Android項(xiàng)目的Docker鏡像
2016年01月26日
60
分類:Android APP開發(fā)方案
接觸Docker的這段時(shí)間里,Docker給我的Android開發(fā)帶來了許多方便與驚喜。本文就是將Docker用于自動(dòng)化編譯Android項(xiàng)目的一次嘗試。
1.構(gòu)建Android編譯環(huán)境的基礎(chǔ)鏡像
首先我們構(gòu)建一個(gè)具有Android編譯環(huán)境的基礎(chǔ)鏡像,該鏡像主要是做Android SDK的下載與components的安裝,我已將其push到了DockerHub:androidbuilder。目前的最新版本是V1.0,已安裝版本號(hào)為19、21、22、23相關(guān)的build-tool。
嘗試編譯Android項(xiàng)目
有了基礎(chǔ)鏡像,我們來嘗試使用其編譯Android項(xiàng)目,在我們項(xiàng)目的根目錄添加如下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構(gòu)建成鏡像:
docker build -t saymagic/androiddockertest:v1.0 .
這樣,saymagic/androiddockertest:v1.0鏡像中就會(huì)包含了我們的項(xiàng)目,之后,我們只需要將該容器運(yùn)行起來,在根目錄下輸入如下命令:
docker run -it -v $(pwd)/app:/project/app saymagic/androiddockertest:v1.0 ./gradlew build --info
此時(shí),我們就可以看到通過Docker構(gòu)建出的apk文件:

以上只是一個(gè)簡單的嘗試,如果你對(duì)源碼感興趣或者想構(gòu)建自己的編譯環(huán)境,請(qǐng)參考這里:https://gist.github.com/saymagic/dcbcf1629c53e5b721c3
2.搭建持續(xù)編譯環(huán)境
第一步中我們實(shí)現(xiàn)了可以編譯Android項(xiàng)目的基礎(chǔ)鏡像,我們將其做一次大改進(jìn),繼續(xù)在基礎(chǔ)鏡像中安裝gradle與jenkins。搭建一個(gè)可以持續(xù)編譯Android項(xiàng)目的Docker環(huán)境。
最終成型的鏡像在此:androidjenkins,最新版本v2.0.
使用方式非常簡單,在含有Docker的主機(jī)上運(yùn)行如下命令(注意指定的Volume與Port):
docker run -it -v $(pwd)/jenkins:/var/jenkins_home -p 80:8080 saymagic/androidjenkins:v2.0 ./start.sh
運(yùn)行完成之后,打開我們的主機(jī)80端口,就會(huì)看到Jenkins的身影:

此時(shí),推薦安裝如下一些Jenkins插件:
Gradle 插件:

Git 插件:

Fir.im的Jenkins插件:
使用方法: http://blog.fir.im/jenkins/
該插件可以將構(gòu)建后的apk文件直接上傳至Fir.im,可以很方便的讓測試人員下載到最新版本。
關(guān)于Jenkins的相關(guān)使用這里不做過多介紹。至此,一個(gè)可持續(xù)編譯Android的環(huán)境就已完成,要知道,我們只運(yùn)行了一行代碼而已。
該鏡像的相關(guān)源碼在這里:https://github.com/saymagic/AndroidJenkins,歡迎star。
總結(jié)
綜上,我們只需要本地進(jìn)行push代碼,就會(huì)更新Fir.im中的項(xiàng)目。并且整個(gè)過程非常簡單,無需再搭建復(fù)雜Android的環(huán)境。非常值得一試。
但需要提醒大家的是整個(gè)鏡像還是相當(dāng)大的,并且對(duì)于內(nèi)存的需求也是很高,比如不到1G內(nèi)存的虛擬機(jī)就不要嘗試了。推薦digitalocean的新加坡機(jī)房,上2G內(nèi)存,直接選擇含有Docker的主機(jī),速度相當(dāng)不錯(cuò),因?yàn)樵趪猓矡o需為各種類庫無法下載而苦惱。我相信一刻鐘的時(shí)間你就會(huì)看到成型的效果。Enjoy it!