利用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:xenial
2
3 MAINTAINER jaren [email protected]
4
5 ADD sources.list /etc/apt/sources.list #這裡更新一個源,會快很多。
6 RUN apt-get update
7 # 在ubuntu中安裝openjdk7需要單獨新增倉庫。
8 RUN apt-get install -y software-properties-common
9 RUN add-apt-repository ppa:openjdk-r/ppa
10 RUN apt-get update
11 RUN apt-get install -y openjdk-7-jdk
12 # 安裝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 unzip
17 # ubuntu16.04中,預設不包含Python2.7
18 RUN apt-get install -y python2.7
19
20 RUN ln -sf /usr/bin/python2.7 /usr/bin/python
21 # ubuntu16.04中預設不包含bc(一種程式語言)
22 RUN apt-get install -y bc
23 ENV USER=root
例子:在ubuntu16.04中建立ubuntu14.04的docker並編譯Android6.0。
這個跟上一個例子是類似的,只是我們可以簡單安裝openjdk7。並且庫依賴也是完整的,省去了很多麻煩。
1 FROM ubuntu:14.04
2 MAINTAINER Jaren <[email protected]>
3
4 # Set to 32bit
5 #RUN dpkg --add-architecture i386
6
7 ADD sources.list /etc/apt/sources.list
8
9 ADD setup.sh /setup/setup.sh
10 RUN bash -x /setup/setup.sh
11
12 ENV USER=root
setup.sh
3 apt-get update || true
4
5 apt-get install -y openjdk-7-jdk
6
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編譯,所以,參考官網能實現編譯需求。
參考文獻
http://nextstart.online/2017/01/24/docker-android-build/http://nextstart.online/2017/01/24/docker-android-build/
相關推薦
利用docker編譯Android原始碼
本文描述瞭如何在一個docker上搭建Android編譯環境。DockerDocker是一個計算機作業系統的容器,利用主機核心,搭建獨立的檔案系統,讓使用者程式執行在一個與宿主機檔案系統無關的獨立環境中。 Docker支援很多優雅的特性,方便專案的程式開發、除錯和執行。在大資
使用docker搭建android原始碼編譯環境
說明 由於工作原因要對android原始碼進行編譯,用於修改底層驅動,對系統進行定製。但是編譯過程中要使用特定ubuntu版本和gcc版本,所以會比較麻煩。當時第一反映是安裝VMware虛擬機器,裝一個指定版本然後將原始碼拷貝進去再編譯,該方法是可行的。後來
利用ccache加快android原始碼和linux核心編譯速度的方法
一、android原始碼編譯加速 當你刪掉out/target目錄或者使用make clean清空輸出重新編譯原始碼的時候,編譯時間通常都很漫長。其實這個問題很容易解決,Android官方為我們帶來了解決方案–ccache編譯器快取。官方這麼講:You can optio
MacOS X 編譯Android原始碼
MacOS X 編譯Android原始碼 本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 由於在工作中遇到了很多關於android內部實現的問題,雖然後面都解決了,有些是看了原始碼實現,有些原始碼看不了只能去google,百度。這就導致了對於很多的問題其實是知其然不知其
Android系統移植與平臺開發(五)- 編譯Android原始碼
2.3編譯Android原始碼 Android原始碼體積非常龐大,由Dalvik虛擬機器、Linux核心、編譯系統、框架程式碼、Android定製C庫、測試套件、系統應用程式等部分組成,在編譯Android原始碼之前,必須要先掌握Android原始碼的組成。 2.3.1An
編譯android原始碼7---android 原始碼目錄結構
Android |-- Makefile (全域性的Makefile) |-- bionic (Android 標準C執行支援庫) |-- bootable (Android核心載入器
Mac編譯android原始碼的坑
Mac編譯android原始碼 因為專案需要在程式碼線上編譯app,想在mac上直接編譯,省時省力。不過,配置環境過程中遇到不少坑,現在逐一記錄下來。 主要有以下幾點: andr
編譯Android原始碼過程中遇到的錯誤
編譯環境:(1)ubuntu15.04(2)jdk1.6 JDK環境設定: export JAVA_HOME=/home/zr/jdk1.6.0_45 export JRE_HOME=${JAVA_HOME}/jre export CL
Linux下編譯Android原始碼問題彙總
前言 本人最近在研究Android原始碼編譯,現將編譯過程中遇到問題彙總於此。 環境 系統:CentOS 7 x86_64 源 :中科大映象源(詳見這裡) 問題彙總 (1)Increase Java heap s
Mac 10.12 編譯 Android 原始碼
Android 原始碼系列文章: 環境準備 這裡只講 Mac 10.12 的環境配置, 其他的我沒有嘗試過, 不好描述 我們需要的編譯的是 Android6.0, 所以我們需要 Xcode , Command L
在Mac OS 10.12 編譯Android原始碼:錯誤小結
在Mac OS 10.12 編譯Android原始碼 錯誤小結 記錄自己遇到的一些問題 1、在Terminal跳轉到映象目錄的命令是 cd /Volumes/映象名稱 即建立的磁碟映象是在根目錄下的Volumes資料夾 2、在通過ma
Mac上下載及編譯android原始碼
參考: https://blog.csdn.net/u010963246/article/details/71480684 https://blog.csdn.net/qq_25333681/article/details/79838325 https
ubuntu16.04 編譯android 原始碼出現的錯誤
1、openjdk 版本不對 解決:2、/bin/bash: prebuilts/misc/linux-x86/bison/bison: 沒有那個檔案或目錄 build/core/binary.mk:609: recipe for target 'out/host/linu
如何單獨編譯Android原始碼中的模組
第一次下載好Android原始碼工程後,我們通常是在Android原始碼工程目錄下執行make命令,經過漫長的等待之後,就可以得到Android系統映象system.img了。以後如果我們修改了Android原始碼中的某個模組或者在Android原始碼工程新增一個
多使用者同時在一臺伺服器編譯Android原始碼錯誤——Communication error with Jack server (77)
錯誤: FAILED: /bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-s
單獨編譯Android原始碼中的模組
第一次下載好Android原始碼工程後,我們通常是在Android原始碼工程目錄下執行make命令,經過漫長的等待之後,就可以得到Android系統映象system.img了。以後如果我們修改了Android原始碼中的某個模組或者在Android原始碼工程新增一個自己的模組
ubuntu12.04 64bit 編譯android原始碼時遇到的問題"make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates"
ubuntu12.04 64bit 編譯android原始碼時出現如下錯誤: host Executable: cmu2nuance (out/host/linux-x86/obj/EXECUTABLES/cmu2nuance_intermediates/
在Ubuntu16.04上下載並編譯Android原始碼
Android原始碼位於Google的Git程式碼庫中,由於Android原始碼工程過於複雜龐大,所以Google以Git為基礎用Python指令碼,寫了一個管理工具Repo。 1.安裝Repo 在安裝Repo之前,假定已經安裝好了git。 mkdir ~
Ubuntu(64位)編譯Android原始碼常見錯誤解決辦法
錯誤: /usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o]
使用Openjdk7編譯android原始碼出現"Could not initialize NSS"錯誤的解決辦法
最近在編譯andrioid原始碼時遇到了如下奇葩的Error,一臉三角函式懵逼 o_O!! Exception in thread "main" java.security.ProviderExce