編譯Android源碼網上資料很多,可以先簡要過一篇文章,然後按官方文檔步驟走。

我參考的是這篇文章:blog.csdn.net/lyb2518/a

官方文檔(國內舒適版):source.android.google.cn

一般編源碼分3個步驟:基礎概念理解、環境搭建、下載編譯

基礎概念主要是repo,關於repo的介紹,以上csdn的文章足以。深入的細節可以以後用到再看。

repo的下載:curl https://storage.googleapis.com/git-repo-downloads/repo > repo

環境的搭建,參考官方文檔即可,主要是ubuntu安裝,及軟體下載。

這裡我準備編譯的是Android 6源碼,使用ubuntu 14.04。主機用的是manjaro。為了隔離編譯環境,使用docker容器。(使用docker可保證編譯環境可穩定重建,且規避主機其他軟體或配置的影響)

linux下普通用戶運行docker指南:

shell sudo usermod -a -G docker $USERreboot manjaro docker服務啟動:

shell sudo systemctl start docker

Dockerfile如下:

FROM ubuntu:14.04

COPY sources.list /etc/apt/sources.list
COPY gitconfig /root/.gitconfig

RUN apt-get update && apt-get install -y openjdk-7-jdk python git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip && apt-get clean && rm -rf /var/lib/apt/lists/* && echo "export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/" >> /root/.bashrc && echo "export PATH=$PATH:/root/aosp/tool/" >> /root/.bashrc && echo "export USER=$(whoami)" >> /root/.bashrc

這裡第二行替換了apt的源為阿里鏡像(sources.list):

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

第三行,設置git:

//gitconfig內容如下:
[user]
email = [email protected]
name = Your Name

最後,根據官方文檔下載軟體。

因為國情需要,接下來用清華鏡像下源碼。根據mirrors.tuna.tsinghua.edu.cn設置REPO_URL:export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/

export USER是給docker設置USER環境變數,參考:blog.csdn.net/RonnyJian

源碼很大,編譯後佔用更大,所以,從主機掛載一個目錄給docker,而非直接在docker內編譯。掛載點設置在/root/aosp

採用如下目錄結構:

├── source # Android源碼
└── tool
├── Dockerfile
├── repo # repo工具
├── gitconfig
└── sources.list

準備容器:

docker build -t aosp_build .
docker run -it
-v $work/aosp:/root/aosp #掛載工作目錄
aosp_build

進入容器環境後,開始拉取源碼:

cd /root/aosp/source
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r43
repo sync

睡一覺後,源碼下載完畢,開始編譯,仍然按官方步驟:

source build/envsetup.sh
lunch aosp_arm-eng
make -j4

docker內編譯完,可以用emulator驗證下。

為跑GUI界面,需要將主機x11環境「借」給容器用(參考自:gist.github.com/slok/ac):

KEY=$(xauth list |grep $(hostname) | awk { print $3 } | head -n 1)
DCK_HOST=docker-aosp
xauth add $DCK_HOST/unix$DISPLAY . $KEY

docker run -it --rm -v /tmp/.X11-unix:/tmp/.X11-unix
-v $XAUTHORITY:/tmp/.Xauthority
-v /dev/snd:/dev/snd
-e DISPLAY=unix$DISPLAY
-e XAUTHORITY=/tmp/.Xauthority
-h $DCK_HOST
-v $work/aosp:/root/aosp
aosp_build

# 在容器內:
#source build/envsetup.sh
#lunch aosp_arm-eng
emulator

在完整編譯一次後,如果需要單獨編譯某個模塊,可以:

# 在容器內執行:

source build/envsetup.sh
lunch aosp_arm-eng
cd frameworks/av/media/libmedia
mm #查看日誌確認庫輸出路徑

推薦閱讀:

相关文章