利用docker编译Android源码
本文描述了如何在一個docker上搭建Android編譯環境。
Docker
Docker是一個計算機操作系統的容器,利用主機內核,搭建獨立的文件系統,讓用戶程序運行在一個與宿主機文件系統無關的獨立環境中。 Docker支持很多優雅的特性,方便項目的程序開發、調試和運行。在大數據云計算等領域具有不可比擬的優勢,就連jvm就望而生畏。 Docker技術來源于Linux LXC技術,可以說是LXC技術的包裝、升級和商品化。現在,也支持Windows Docker。
Docker有很多用途:
- 編譯Android,你不用因為主機環境的變化或者系統的升級而煩惱。
- 學習分布式開發,一臺計算機就能模擬分布式。
- 搭建代理服務器,每一個業務邏輯都是分開的,比如搭建一個內部小型網站。
- 模擬主機作業,先在docker上處理,防止破壞主機環境。
學習Docker時,有問題和需求,第一時間訪問Docker官網,善于從英文文檔中檢索信息。
初學者可能對images和container管理、Dockerfile的CMD和ENTRYPOINT、網絡配置、跨系統版本搭建Docker等感到困惑。
簡單的提示一下:
images:靜態存在的鏡像,可以理解是一個靜態的文件系統鏡像,運行它就能得到一個container。
container:一個容器,可以理解是動態的文件系統鏡像,我們可以運行它,在其上面作業,停止并刪除它。
CMD:docker run最后一項就是CMD,在Dockerfile中定義CMD會被命令行中的CMD覆蓋。
ENTRYPOINT:docker run后,docker容器的入口點,每次container運行時都會被執行,而且會覆蓋命令行的CMD。
網絡配置:Docker默認建立一個bridge,給定一個橋地址,沒開辟一個container,自動分配一個在橋ip段的ip。
自定義網絡配置:Docker的網絡其實是linux的ip命令創建的虛擬網絡,具體查找關鍵字linux ip命令,maclan,vlan,veth,bridge等。
跨系統版本搭建Docker:比如在ubuntu16.04上搭建一個ubuntu14.04的dokcer,可能會產生內核不兼容的情況,比如,如果我們在docker執行service命令將失敗,因為ubuntu16.04內核中使用systemd而不是service管理守護進程。
以上內容,幾乎都能從Docker官網得到答案。
Android Building Docker
這里采用Dockerfile的方式建立docker鏡像。
例子:在ubuntu16.04中搭建Android6.0的編譯環境。
1 FROM ubuntu:xenial2 3 MAINTAINER jaren jlin@archos.com4 5 ADD sources.list /etc/apt/sources.list #這里更新一個源,會快很多。6 RUN apt-get update7 # 在ubuntu中安裝openjdk7需要單獨添加倉庫。8 RUN apt-get install -y software-properties-common9 RUN add-apt-repository ppa:openjdk-r/ppa10 RUN apt-get update11 RUN apt-get install -y openjdk-7-jdk12 # 安裝Android編譯的依賴包,查看Android官網可以得到。13 RUN apt-get install -y git-core gnupg flex bison gperf build-essential \14 zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \15 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \16 libgl1-mesa-dev libxml2-utils xsltproc unzip17 # ubuntu16.04中,默認不包含Python2.718 RUN apt-get install -y python2.719 20 RUN ln -sf /usr/bin/python2.7 /usr/bin/python21 # ubuntu16.04中默認不包含bc(一種編程語言)22 RUN apt-get install -y bc23 ENV USER=root例子:在ubuntu16.04中創建ubuntu14.04的docker并編譯Android6.0。
這個跟上一個例子是類似的,只是我們可以簡單安裝openjdk7。并且庫依賴也是完整的,省去了很多麻煩。
setup.sh
3 apt-get update || true4 5 apt-get install -y openjdk-7-jdk6 7 apt-get -y install git-core gnupg flex bison gperf build-essential \8 zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \9 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \10 libgl1-mesa-dev libxml2-utils xsltproc unzip python-networkx例子:搭建ubuntu14.04的docker編譯Android7. 此文創建之時,官網說明,建議采用ubuntu14.04編譯,所以,參考官網能實現編譯需求。
參考文獻
Docker
Android Building
http://nextstart.online/2017/01/24/docker-android-build/
總結
以上是生活随笔為你收集整理的利用docker编译Android源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原 Ubuntu使用VNC运行基于Doc
- 下一篇: Docker操作命令详解