一、原始碼下載
參看清華大學映象源網站:https://mirror.tuna.tsinghua.edu.cn/help/AOSP/
1、下載 repo 指令碼工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
複製程式碼
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo > ~/bin/repo
chmod a+x ~/bin/repo
複製程式碼
2、配置git賬戶資訊
git config --global user.name "your name"
git config --global user.email "your_email@your_domain.com"
複製程式碼
3、初始化repo和manifest倉庫
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r77
複製程式碼
上面的android-6.0.1_r77對應的具體android原始碼版本,如果你需要下載其他版本可以通過下面連結檢視具體的版本分支
https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
4、同步下載原始碼樹
repo sync
複製程式碼
這樣,原始碼就開始下載了,接下來就是漫長的等待。
二、相關配置
1、設定編譯快取
設定編譯快取的目的就是當你再次編譯的時候,它可以幫你避免編譯部分已經編譯過的內容。
(1)設定環境變數,開啟編譯快取
export USE_CCACHE=1
複製程式碼
(2)裝置編譯快取
prebuilts/misc/linux-x86/ccache/ccache -M 15G
複製程式碼
輸入上面命令之後,你會看到下面輸出:
Set cache size limit to 15.0 Gbytes
複製程式碼
2、配置Jack
Jack服務是用來構建ROM中的Java部分,它需要比較大的記憶體,為了避免記憶體分配錯誤,你可以使用環境變數ANDROID_JACK_VM_ARGS來設定允許Jack使用的儲存大小,通常設定記憶體的50%就足夠。
下面的命令就是分配一個8G的記憶體給Jack服務,並且阻止Jack需要的預設編譯選項。
export ANDROID_JACK_VM_ARGS="-Xmx8g -Dfile.encoding=UTF-8 -XX:+TieredCompilation"
複製程式碼
三、下載驅動
我們需要將Android6.0.1編譯後燒錄到Nexus 5上,所以需要下載對應的驅動。
https://developers.google.com/android/drivers#hammerheadm4b30z
下載得到的是三個tgz檔案,我們只需依次解壓三個檔案,得到的是三個shell指令碼檔案,我們先將其置於原始碼根目錄中。
依次執行這三個指令碼檔案,這裡要注意,三個指令碼檔案的作用是生成驅動檔案,但是在執行操作前,它會讓你閱讀相關協議,你必須一直按enter鍵一行一行往下讀,更不能一鍵摁到底,因為程式在最後會讓你輸入“I ACCEPT”,如果你一鍵摁到底,也就是說最後一步也摁enter鍵的話它就會執行預設操作,即不接受此協議,那生成驅動檔案的操作就不會執行。
四、編譯原始碼
1、安裝OpenJDK
See Installing the JDK for the prebuilt path and installation instructions for older versions.
- Android 7.0 (Nougat) - Android 8.0 (O release): Ubuntu - OpenJDK 8, Mac OS - jdk 8u45 or newer
- Android 5.x (Lollipop) - Android 6.0 (Marshmallow): Ubuntu - OpenJDK 7, Mac OS - jdk-7u71-macosx-x64.dmg
- Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat): Ubuntu - Java JDK 6, Mac OS - Java JDK 6
- Android 1.5 (Cupcake) - Android 2.2.x (Froyo): Ubuntu - Java JDK 5
來源:https://source.android.com/setup/requirements
我們是編譯Android 6.0,需要OpenJDK 7
sudo apt-get install openjdk-7-jdk
複製程式碼
如果安裝的時候出現找不到下載源,那麼我們可能需要更新下載源。它對應的是/etc/apt/sources.list檔案
檔案/etc/apt/sources.list是一個普通可編輯的文字檔案,儲存了ubuntu軟體更新的源伺服器的地址。
(1)首先需要備份一下原有的sources.list檔案
cd /etc/apt
sudo mv sources.list sources.list.cp //將原來的sources.list進行備份
sudo vim sources.list // 編輯sources.list
複製程式碼
(2)然後直接替換掉sources.list內容,下面提供幾個驗證可用的安裝源
如果需要安裝OpenJDK 7
將sources.list內容替換成下面內容
參考連結:https://gist.github.com/veian/8395040
deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
複製程式碼
然後執行下面命令:
sudo apt-get update
sudo apt-get install openjdk-7-jdk
複製程式碼
如果需要安裝OpenJDK 8
將sources.list內容替換成下面內容
參考連結:https://mirrors.cloud.tencent.com/help/ubuntu.html
deb http://mirrors.cloud.tencent.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ xenial-updates main restricted universe multiverse
#deb http://mirrors.cloud.tencent.com/ubuntu/ xenial-proposed main restricted universe multiverse
#deb http://mirrors.cloud.tencent.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ xenial-updates main restricted universe multiverse
#deb-src http://mirrors.cloud.tencent.com/ubuntu/ xenial-proposed main restricted universe multiverse
#deb-src http://mirrors.cloud.tencent.com/ubuntu/ xenial-backports main restricted universe multiverse
複製程式碼
然後執行下面命令
sudo apt-get update
sudo apt-get install openjdk-8-jdk
複製程式碼
下面提供幾個下載源地址:
http://mirrors.aliyun.com/help/ubuntu
http://mirrors.163.com/.help/ubuntu.html
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
https://lug.ustc.edu.cn/wiki/mirrors/help/ubuntu
https://www.cnblogs.com/dtiove/p/5917263.html
複製程式碼
2、編譯原始碼
(1) 初始化編譯環境 source或者(.)都可以執行一個shell指令碼
source build/envsetup.sh
複製程式碼
或者
. build/envsetup.sh
複製程式碼
(2) 選擇編譯目標
lunch複製程式碼
在這一步中,我們選擇:aosp_hammerhead_userdebug,因為我們的Nexus 5裝置代號就是hammerhead。
(3) 開始編譯 -jN:job,開多少個任務去執行編譯。
使用nproc命令檢視有多少個CPU來決定開多少個任務
make -j8
複製程式碼
接下來就是就是編譯的過程了,又是漫長的等待
編譯可能會遇到的問題:
https://blog.csdn.net/a4262562/article/details/52799037
https://www.jianshu.com/p/9f3aa30cb495
五、將映象刷入Nexus5
在原始碼根目錄下輸入以下命令:
sudo adb reboot bootloader
複製程式碼
隨後手機就會進入recovery模式。
然後,我們開始刷機:
fastboot -w flashall
複製程式碼
刷機的過程大概在一至兩分鐘左右,刷機結束後會自動開機。
參考連結:
https://www.digitalocean.com/community/tutorials/how-to-build-android-roms-on-ubuntu-16-04
https://blog.csdn.net/liu1075538266/article/details/51272398
https://www.jianshu.com/p/6b2de1c4a1bc