從清華源下載安卓原始碼(AOSP)Ubuntu14.04
一、環境準備
安裝open jdk
在Terminal終端下輸入如下命令列:
#新增openjdk8的第三方源
sudo add-apt-repository ppa:openjdk-r/ppa
#執行更新
apt-get update
#安裝openjdk8
sudo apt-get install openjdk-8-jdk
檢視open jdk的安裝路徑
在Terminal終端下輸入如下圖所示的命令:
從上圖中可以看到open jdk的安裝路徑為:/usr/lib/jvm/java-1.8.0-openjdk...
配置/etc/profile以及~/.bashrc檔案
按照下圖格式配置相關檔案,並使用source /etc/profile以及source ~/.bashrc指令是檔案修改生效
二、安裝編譯所需依賴包
在Terminal終端下分別輸入如下所示指令,安裝編譯安卓原始碼所需的依賴包
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
三、從清華源下載原始碼
下載repo工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
上述指令的作用是先在home目錄下建立bin目錄,然後將其新增到 PATH環境變數中,接著再從清華映象中下載repo工具,並賦予repo相應許可權確保該工具能夠被使用
配置~/.bashrc檔案
repo工具執行過程中會嘗試從官方的git上更新相應的檔案,可以將如下所示的內容新增到~/.bashrc檔案中,使其使用清華的映象源進行更新
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
使用source ~/.bashrc指令使該檔案生效
下載aosp-latest .tar
下載完畢後可以使用tar -zxvf aosp-latest.jar指令解壓該檔案,解壓出來資料夾名稱為aosp,裡面只有一個叫.repo的隱藏資料夾,該資料夾就是倉庫,安卓原始碼都在裡面,可以使用CTRL+H來檢視該隱藏資料夾。
同步下載原始碼
使用如下指令,同步並匯出原始碼
cd aosp repo sync
PS:repo sync -l // -l表示只匯出程式碼到本地,不通過網路更新程式碼
repo sync -n // -n表示只通過網路更新程式碼
上述指令一旦執行,就開始同步Android原始碼,在這個過程中如果出現網路中斷的情況,重新執行repo sync指令就會繼續執行同步下載的過程。也可以編寫一個自動下載指令碼,確保出錯了之後會自動執行repo sync。首先,在aosp資料夾下建立一個指令碼xxx.sh(檔名隨意),然後將如下程式碼複製到指令碼中:
#!/bin/bash
repo sync -j 8
while [ $? = 1 ]; do
echo “======sync failed, re-sync again======”
sleep 3
repo sync -j 8
done
最後通過sh xxx.sh 指令執行該指令碼。(PS:-j 後面的數字可以根據自己的電腦配置進行修改,比如你電腦的CPU核心數為4,就將其修改為-j 4)
同步下載完成後,可以得到如下所示的資訊以及相關的資料夾和檔案(圖中所示為Android 9.0的目錄結構):
四、編譯原始碼
初始化編譯環境
Android的每一個工程都有Android.mk檔案,在編譯整個Android系統的時候會遞迴呼叫這些檔案對Android原始碼進行編譯。而使用到的一些編譯命令是 Linux 主機沒有的,是在 envsetup.sh 指令碼定義的,所以我們需要通過該指令碼初始化一個特定的終端,使其可執行諸如 mm、mmm 這類編譯 Android 專用的命令。初初始化指令為:
source build/envsetup.sh
PS:在Android原始碼的根目錄下執行該指令,在本文中該目錄為aosp
選擇編譯目標
使用 lunch 命令設定編譯目標
對於X86架構的模擬器,可以選擇編譯的目標為aosp_x86_64-eng,所以我們的指令為: lunch aosp_x86_64-eng
編譯 Android 原始碼
在 Android 原始碼根目錄內,執行 make 命令就可以開始 Android 原始碼的編譯。但是預設情況下,系統只會使用一個 CPU 核來編譯 Android 原始碼,如果 CPU 是多核的,則可以顯示指出使用多個核編譯 Android 原始碼,這樣可以大大提高編譯效率。比如,CPU為4核的話可以執行make -j 4
執行模擬器
使用emulator 指令執行模擬器