在接觸Docker的這段時(shí)間里捎泻,Docker給我的Android開(kāi)發(fā)帶來(lái)了許多方便與驚喜。本文就是將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ǔ)鏡像犀勒,我們來(lái)嘗試使用其編譯Android項(xiàng)目,在我們項(xiàng)目的根目錄添加如下Dockerfile:
ROM saymagic/androidbuilder:v1.0
MAINTAINER saymagic <saymagic.dev@gmail.com>
ENV PROJECT /project
RUN mkdir $PROJECT
WORKDIR $PROJECT
ADD . $PROJECT
RUN chmod +x ./gradlew
RUN 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)行起來(lái)逾一,在根目錄下輸入如下命令:
docker run -it -v $(pwd)/app:/project/app saymagic/androiddockertest:v1.0 ./gradlew build --info
此時(shí)铸本,我們就可以看到通過(guò)Docker構(gòu)建出的apk文件:
以上只是一個(gè)簡(jiǎn)單的嘗試,如果你對(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.
使用方式非常簡(jiǎn)單,在含有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)行完成之后舶得,打開(kāi)我們的主機(jī)80端口掰烟,就會(huì)看到Jenkins的身影:
此時(shí),推薦安裝如下一些Jenkins插件:
- Gradle 插件:
- Git 插件:
- Fir.im的Jenkins插件:
使用方法: http://blog.fir.im/jenkins/
該插件可以將構(gòu)建后的apk文件直接上傳至Fir.im沐批,可以很方便的讓測(cè)試人員下載到最新版本纫骑。
關(guān)于Jenkins的相關(guān)使用這里不做過(guò)多介紹。至此九孩,一個(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è)過(guò)程非常簡(jiǎn)單她君,無(wú)需再搭建復(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)樵趪?guó)外魏烫,也無(wú)需為各種類(lèi)庫(kù)無(wú)法下載而苦惱。我相信一刻鐘的時(shí)間你就會(huì)看到成型的效果肝箱。Enjoy it哄褒!