ubuntu16.04 Android源碼下載編譯

本次編譯源碼的電腦為Ubuntu 16.04,4核 + 4G內存。
注. 對于電腦配置低的建議不要編譯7.0以上的版本,就像我這臺電腦,基本編譯7.0以上都會報內存不足問題,因為在7.0版以上android改用ninja來編譯源碼了,雖然它比make速度還快,但是對電腦要求也相應的增加了。

網上有人說虛擬機如果想編譯7.0以上版本,電腦配置不低于:

          CPU核心:       InterXeon E5-2630 16核(2顆8核16線程)

          內存容量:       32GB(DDR4)

          硬盤容量:       2TB(SAS/SSD)

Android源碼編譯的流程為:

  • 源碼下載
  • 構建編譯環境
  • 編譯源碼
  • 運行

一、源碼下載

  • 安裝Git
sudo apt-get install git 
git config –global user.email “×××@××.com” 
git config –global user.name “×××”
  • 下載repo工具
mkdir ~/bin PATH=~/bin
$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 
## 如果上述 URL 不可訪問,可以用下面的:
curl https://storage-googleapis.lug.ustc.edu.cn/git-repo-downloads/repo > ~/bin/repo 
chmod a+x~/bin/repo

關于repo工具介紹

  • 建立一個工作目錄
mkdir android
cd android
  • 初始化倉庫命令
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest 
## 如果提示無法連接到 gerrit.googlesource.com,可以編輯 ~/bin/repo,把 REPO_URL 一行替換成下面的:
REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
  • 如果需要某個特定的 Android 版本
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.1.0_r9

官方列表查詢
不能翻墻(到8.1的)

  • 同步源碼樹(以后只需執行這條命令來同步)
repo sync

二、構建編譯環境

源碼下載完成后,就可以構建編譯環境了.在開始之前,我們先來看看一些編譯要求:
1. 硬件要求:
64位的操作系統只能編譯2.3.x以上的版本,如果你想要編譯2.3.x以下的,那么需要32位的操作系統.
磁盤空間越多越好,至少在100GB以上.意思就是,你可以去買個大點的硬盤了啊
如果你想要在是在虛擬機運行linux,那么至少需要16GB的RAM/swap.
(實際上,我非常不推薦在虛擬機中編譯2.3.x以上的代碼.)
2. 軟件要求:
1. 操作系統要求
AOSP開源中,主分支使用Ubuntu長期版本開發和測試的,因此也建議你使用Ubuntu進行編譯,下面我們列出不同版本的的Ubuntu能夠編譯那些android版本:

Android版本 編譯要求的Ubuntu最低版本
Android 6.0至AOSP master Ubuntu 14.04
Android 2.3.x至Android 5.x Ubuntu 12.04
Android 1.5至Android 2.2.x Ubuntu 10.04

2. JDK版本要求
除了操作系統版本這個問題外,我們還需要關注JDK版本問題,為了方便,同樣我們也列出的不同Android版本的源碼需要用到的JDK版本:

Android版本 編譯要求的JDK版本
AOSP的Android主線 OpenJDK 8
Android 5.x至android 6.0 OpenJDK 7
Android 2.3.x至Android 4.4.x Oracle JDK 6
Android 1.5至Android 2.2.x Oracle JDK 5

至于ubuntu JDK配置方法,看本人另一篇文章

3、添加編譯依賴

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

網上有人說不同版本ubuntu 所需的依賴不同,本人沒驗證過,但是在Ubuntu16.04上面是OK的。

4、初始化編譯環境
上面的步驟準備完畢,直接執行初始化命令:

source build/envsetup.sh

執行完成,如果正確會出現下圖樣式:


圖片.png

三、編譯源碼

終于進入正題了。
選擇編譯目標,就是選擇編譯出來的鏡像你想跑在什么設備上,你可以通過下面命令查看可以選擇編譯什么鏡像

lunch

你會發現有很多,直接輸入你想要選擇的序號,回車就行。


圖片.png

開始編譯
通過make指令進行代碼編譯,該指令通過-j參數來設置參與編譯的線程數量,以提高編譯速度.比如這里我們設置16個線程同時編譯:

make -j16

需要注意的是,參與編譯的線程并不是越多越好,通常是根據你機器cup的核心來確定:core*2,即當前cpu的核心的2倍.比如,我現在的筆記本是雙核四線程的,因此根據公式,最快速的編譯可以make -j8.
(通過cat /proc/cpuinfo查看相關cpu信息)

提示:如果電腦配置不高,還是建議直接make就行,否則你的電腦容易炸了。

如果沒什么問題,會在好幾個小時之后出現### make completed successfully (01:18:45(hh:mm:ss)) ###就說明已經編譯好了。

四、運行

至于運行其實就是啟動刷入你剛剛編譯的鏡像的模擬器

source build/envsetup.sh
lunch(選擇剛才你設置的目標版本,比如這里了我選擇的是2)
emulator

好了,到此你的源碼就搞定了,后面你可以隨意修改代碼了,當然如果你僅僅修改單一模塊的代碼,在整體編譯一次之后,就不需要每一次都整編了,僅需要對單一模塊編譯就行,對單一模塊編譯比較簡單:

 ./build/envsetup.sh
 mmm  packages/apps/Email/

比如我們修改了email模塊的代碼, 編譯后會在out/target/product/generic/system/app目錄下看到Email.apk文件,如果是自己手機測試的話,直接將該apk push進原先的位置,替換原先apk。

adb remount
adb push 目錄/Email.apk /system/app/

或者我們在編譯apk后,重新打包sysytem.img文件

make snod

之后再重新emulator

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容