android源碼編譯環(huán)境
https://source.android.com/source/initializing.html
系統(tǒng)環(huán)境: Ubuntu 14.04LTS -x64
編譯的系統(tǒng):msm8909 Android5.1 Lolipop
1、安裝JDK
$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
安裝后,需要把Java環(huán)境設(shè)置一下:
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
2、安裝編譯Android需要的包
$ sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip
也許這一步并不會(huì)特別順利,你可能會(huì)遇到讓人蛋疼的依賴問題g++-multilib-gcc-multilib,最簡(jiǎn)單的辦法是,自己手動(dòng)安裝一下gcc-multilib
$ sudo apt-get install gcc-multilib
$ sudo apt-get install g++-multilib
搞定了這個(gè)問題后,再重新執(zhí)行一遍之前的安裝命令
3、Git標(biāo)識(shí)
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
4、生成一個(gè)新的SSH密鑰
$ ssh-keygen -t rsa -C "your_email@example.com"
$ ls -a ~/.ssh
列出.ssh 目錄中存在的文件
5、安裝ssh服務(wù)
$ sudo apt-get install openssh-server
$ sudo ps -e |grep ssh
有sshd,說明ssh服務(wù)已經(jīng)啟動(dòng),如果沒有,則輸入:
$ sudo service ssh start
6、scp將本地文件上傳到服務(wù)器上
$ scp -P 2222 /home/lnmp0.4.tar.gz root@www.vpser.net:/root/lnmp0.4.tar.gz
7、scp獲取遠(yuǎn)程服務(wù)器上的文件
$ scp -P 2222 root@www.vpser.net:/root/lnmp0.4.tar.gz /home/lnmp0.4.tar.gz
8、鼠標(biāo)右鍵打開shell
$ sudo apt-get install nautilus-open-terminal
9、使用docker編譯Android系統(tǒng)源碼
安裝
$ curl -sSL https://get.docker.com/ | sh
確認(rèn)Docker是否安裝成功
$ sudo docker run hello-world
10、docker命令免輸入sudo
$ sudo groupadd docker
$ sudo gpasswd -a ${USER} docker
$ sudo service docker restart
# 若提示 /var/run/docker.sock 無(wú)權(quán)限,執(zhí)行以下命令:
$ sudo chmod a+rw /var/run/docker.sock
11、安裝系統(tǒng)基礎(chǔ)鏡像
$ sudo docker pull ubuntu:14.04 # docker默認(rèn)都是64位系統(tǒng)
12、簡(jiǎn)單的docker操作
# 查詢本地已有的鏡像(注意 鏡像編號(hào)-IMAGE ID)
$ sudo docker images
# 輸出如下:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 b969ab9f929b 5 weeks ago 188 MB
# 查看本地所有的容器(注意 容器編號(hào)-CONTAINER ID)
$ sudo docker ps -a
# 輸出如下:
CONTAINER ID IMAGE COMMAND CREATE STATUS PORTS NAMES
820fe6f58817 ubuntu:14.04 "/bin/bash" 42 hours ago Exited (0) 25 hours ago epic_bell
# 啟動(dòng)鏡像,并獲取一個(gè)偽終端
# 注意:實(shí)際啟動(dòng)的是容器,啟動(dòng)鏡像時(shí)會(huì)自動(dòng)創(chuàng)建新容器并啟動(dòng)。
$ sudo docker run -it <REPOSITORY:TAG> /bin/bash # 使用 倉(cāng)庫(kù)名+標(biāo)簽 啟動(dòng)
$ sudo docker run -it <IMAGE ID> /bin/bash # 使用 IMAGE ID 啟動(dòng)
# 退出鏡像
>> $ exit # 或使用快捷鍵 Ctrl + D
說明:
1> 這里使用 >> 符號(hào),表示命令在docker的偽終端中執(zhí)行。
2> 在docker的偽終端中使用 # 符號(hào),我們使用 $ 替代。\
13、添加中文語(yǔ)言支持
啟動(dòng)指定容器后執(zhí)行操作:
>> $ locale #查詢當(dāng)前語(yǔ)言
>> $ locale -a #查詢支持的語(yǔ)言
# 若不支持UTF-8,則添加UTF-8語(yǔ)言支持
>> $ apt-get install language-pack-zh-hant language-pack-zh-hans # 中文
>> $ language-pack-en # 英文
# 修改 /etc/profile 文件,添加:
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh
# 重新加載資源
>> $ source /etc/profile
14、更正時(shí)區(qū)時(shí)間
啟動(dòng)指定容器后執(zhí)行操作:
>> $ date # 查看當(dāng)前時(shí)間
>> $ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
>> $ echo 'Asia/Shanghai' >/etc/timezone
15、更換系統(tǒng)源
啟動(dòng)指定容器后執(zhí)行操作:
>> # cp /etc/apt/sources.list /etc/apt/sources.list.bak
>> # echo "xxx" > /etc/apt/sources.list // 使用源替換 xxx
>> # apt-get update
>> # exit
Ubuntu 14.04 阿里云的源如下:
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
16、配置編譯專用鏡像
創(chuàng)建一個(gè)容器,并掛載 ~/share 目錄到容器中的 /home/share 目錄:
$ docker run -it -v ~/share:/home/share ubuntu:14.04 /bin/bash
17、添加64位系統(tǒng)對(duì)32位的支持
1>檢查是否已經(jīng)支持
$ dpkg --print-architecture # 若支持,輸出 amd64
$ dpkg --print-foreign-architectures # 若支持,輸出 i386
2> 手動(dòng)開啟支持
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
3> 安裝支持庫(kù)
更新所有的軟件(沒必要)
$ sudo apt-get dist-upgrade
只安裝支持庫(kù)(原來需要安裝 ia32-libs,目前被以下三個(gè)庫(kù)取代)
$ sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
18、添加編譯Android源碼需要的依賴
1> 安裝編譯工具以及構(gòu)建套件:
$ sudo apt-get install gcc-multilib g++-multilib build-essential
2> 安裝必要的工具軟件
$ sudo apt-get install git-core gnupg bison flex gperf pngcrush bc zip curl lzop
$ sudo apt-get install schedtool libxml2 libxml2-utils xsltproc squashfs-tools
3> 安裝其他需要的庫(kù)
$ sudo apt-get install libesd0-dev libsdl1.2-dev libwxgtk2.8-dev libswitch-perl
$ sudo apt-get install libssl1.0.0 libssl-dev lib32readline-gplv2-dev libncurses5-dev
19、安裝JDK
下載jdk-7u79-linux-x64.tar.gz文件
解壓到當(dāng)前目錄下
$ tar -xvf ./jdk-7u79-linux-x64.tar.gz
創(chuàng)建目標(biāo)目錄
$ sudo mkdir -p /usr/lib/jvm/jdk1.7.0/
移動(dòng)文件到目標(biāo)目錄
$ sudo mv jdk1.7.0_79/* /usr/lib/jvm/jdk1.7.0/
添加環(huán)境變量
修改 /etc/profile 文件,添加如下內(nèi)容:
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_BIN:$PATH
配置完成后,執(zhí)行如下命令使其立即生效:
$ source /etc/profile
檢查JDK環(huán)境是否安裝成功
$ java -version
20、提交容器保存為鏡像
配置好環(huán)境之后,保存此容器為一個(gè)鏡像:
$ sudo docker commit -m "xxx" <CONTAINER ID> <TEPO:TAG>
例如,使用$ docker ps -a指令查詢剛才的容器編號(hào)為1a61adfb1953,我們保存為一個(gè)本地鏡像,則可執(zhí)行:
$ sudo docker commit -m "android-build" 1a61adfb1953 local:v1.0
使用$ docker images可以查看剛生成的鏡像:
輸出
REPOSITORY TAG IMAGE ID CREATED SIZE
build-android v1.0 49df00985bd1 2 hours ago 971 MB
ubuntu 14.04 b969ab9f929b 5 weeks ago 188 MB
21、使用鏡像編譯Android系統(tǒng)源碼
1> 準(zhǔn)備系統(tǒng)源碼
在宿主機(jī)上,創(chuàng)建源碼目錄,如 /home/android 目錄,并放入Android系統(tǒng)源碼。
2> 掛載源碼目錄到docker容器中
$ docker run -it -v /home/android:/home/android 49df00985bd1 /bin/bash
3> 開始編譯源碼
$ cd /home/android
$ source build/envsetup.sh
$ make -j8
附:命令說明:
bc 命令行計(jì)算器
lzop 快速壓縮工具
flex 詞法分析器生成器
curl 基于URL的文件傳輸工具
gperf 哈希函數(shù)生成器
bison 語(yǔ)法分析器生成器
xsltproc 快速XSLT引擎,可以通過XSL文件把XML轉(zhuǎn)為HTML,XHTML,PDF...
schedtool 查詢或設(shè)置CPU狀態(tài)
squashfs-tools linux內(nèi)核壓縮工具,只讀式壓縮文件系統(tǒng)Image
pngcrush 批量壓縮PNG圖片
libxml2 libxml2-utils 操作XML文檔工具