6.0源碼下載
下載方式有很多,出的去可以直接去Google Source下載,或者別人共享資源(有些會出現解壓報錯),或者鏡像站AOSP下載
前提條件:Ubuntu14.04環境
AOSP鏡像下載:
1.下載repo文件,自行下載
2.修改repo文件中REPO_URL
google的地址
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
改爲清華大學的地址
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
3.將改好repo文件拷貝到"/usr/bin/"文件夾下,並賦予“可讀可寫可執行”權限,
chmod a+x repo
可省去以下配置變量步驟
mkdir ~/bin
PATH=~/bin:$PATH
4.創建代碼目錄(Linux文件目錄區分大小寫)
mkdir /Documents/android_source
cd /Documents/android_source
5.初始化倉庫
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r72
#-b 後面的參數爲分支的名稱,每個版本的分支名稱可以在android官網列表中查看https://android.googlesource.com/platform/build/
下載完成後,當前目錄下會出現.repo目錄的隱藏文件夾,進入子目錄中可看到manifest文件包含各個分支的版本號說明,代碼都是根據它從checkout出來的,這個文件夾特別大,我下載完成後查詢內存大小爲70G,
6.同步源碼樹(以後只需執行這條命令來同步)
repo sync
# 支持(-j4) 表示併發數爲4,清華鏡像只支持最大併發數4
剩下的就是等待下載完成了,android-6.0.1_r72的源碼內存大小在30G。如果沒有刪除.repo文件夾,以後只需每次運行“repo sync”即可保持同步。
另一種源碼下載方式:
分卷下載,md5sum校驗文件是否損壞,cat合併成.tgz文件,解壓
OpenJdk7安裝
sudo apt-get update
sudo apt-get install openjdk-7-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac
編譯所需的包,預安裝
sudo apt-get install git gnupg flex bison gperf build-essential
sudo apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386
sudo apt-get install libgl1-mesa-dev g++-multilib mingw32 tofrodos
sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
開始編譯,進入到源碼所在的目錄,命令如下
source build/envsetup.sh
lunch ##運行命令之後會提示選擇編譯目標,我選擇默認目標,即aosp_arm_eng
make ##(也可以使用 make -j4 四線程編譯)
注:我使用的是make,沒有加-jx ,主要是用的虛擬機,沒有分配太多CPU資源,中間出現過虛擬機無響應,強制關機之後,出現無法打開Ubuntu圖形界面,而是進入了tty命令模式,痛苦的不行。
以下是編譯過程出現的異常彙總:
解決:Android M引入了Jack (Java Android Compiler Kit),在編譯時會啓動jack server,優化編譯速度等。
如果遇到jack編譯錯誤,可以把$HOME/.jack中的配置文件中的SERVER=true設成false,不用jack,jack現在還不穩定。此外,M對應的是OpenJDK7。
還有一個關於Java VM內存不夠的問題,沒有保存到截圖,沒做任何處理,重新make就好了。
OpenJDK Client VM - Cannot allocate memory
另一種解決方案:
中間等待的時間有點長,花費時間跟虛擬機的配置有關,我畫了4個小時左右。
生成system.img所在目錄:/out/target/product/generic/system.img
編譯完成後,可以運行模擬器了,如果我們上圖的命令界面還在,可以直接輸入命令
emulator
或者當前界面關了,可以運行如下這些命令
$ source build/envsetup.sh
$ lunch
$ emulator
我的因爲是tty命令模式界面,emulator啓動失敗了。