Ubuntu 15.04編譯Android 6.0.1原始碼-Nexus5真機編譯

DroidMind發表於2019-01-24

一、原始碼下載

參看清華大學映象源網站: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

Ubuntu 15.04編譯Android 6.0.1原始碼-Nexus5真機編譯

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

Ubuntu 15.04編譯Android 6.0.1原始碼-Nexus5真機編譯

下載得到的是三個tgz檔案,我們只需依次解壓三個檔案,得到的是三個shell指令碼檔案,我們先將其置於原始碼根目錄中。

依次執行這三個指令碼檔案,這裡要注意,三個指令碼檔案的作用是生成驅動檔案,但是在執行操作前,它會讓你閱讀相關協議,你必須一直按enter鍵一行一行往下讀,更不能一鍵摁到底,因為程式在最後會讓你輸入“I ACCEPT”,如果你一鍵摁到底,也就是說最後一步也摁enter鍵的話它就會執行預設操作,即不接受此協議,那生成驅動檔案的操作就不會執行。

Ubuntu 15.04編譯Android 6.0.1原始碼-Nexus5真機編譯

四、編譯原始碼

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。

Ubuntu 15.04編譯Android 6.0.1原始碼-Nexus5真機編譯

(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


相關文章