一 . 安裝Ubuntu虛擬機
參考在VirtualBox 6虛擬機上安裝Ubuntu Linux 18.04操作系統
這裏我是參考這篇博客的安裝的,需要注意的是Ubuntu的版本一定要是穩定版的,官方長期維護的(帶LTS)
二 . 下載repo工具
這裏我們只要知道repo是使用Python對git進行封裝的工具就行,還有就是repo的作用是方便管理Android源碼繁多的git庫,它的使用時簡化了git版本庫的管理。
安裝git:
sudo apt-get install git
創建bin,並加入到PATH中:
mkdir ~/bin
PATH=~/bin:$PATH
安裝curl庫:
sudo apt-get install curl
下載repo並設置權限:
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
安裝python,repo初始化時會用到:
sudo apt-get install python
三 . 下載源碼
建立工作目錄:
mkdir aosp
cd aosp
這裏如果想使用清華鏡像來更新repo,可以加上如下內容到你的~/.bashrc中:
export REPO_URL=‘https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/’
設置身份,添加自己的git郵箱和密碼:
git config --global user.email “[email protected]”
git config --global user.name “username”
初始化倉庫:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
初始化指定版本:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r8
// 這裏的版本有很多,最好選一個穩定版的
同步源碼:
repo sync
接下來是漫長的等待,這裏我用了6個小時。。。
四 . 編譯環境準備
安裝 jdk8:
sudo apt-get update
sudo apt-get install openjdk-8-jdk
這裏可以自己配一下java環境變量,很簡單就不說了。
使用 ubuntu 14+,需要安裝以下依賴包:
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g+±multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
五 . 源碼整編
在AOSP的根目錄,輸入如下的命令初始化環境:
source build/envsetup.sh
// 編譯前刪除build文件夾A
make clobber
這裏實際的操作就是執行build文件夾下的envsetup.sh這個腳本
選擇編譯目標:
lunch
lunch命令是envsetup.sh裏定義的一個命令,用來讓用戶選擇編譯目標。
這裏我們選擇5,具體的編譯目標類型自己可以去查看哦。
lunch 5
下面開始編譯:
通過-jN參數來設置編譯的並行任務數,以提高編譯速度,在此前我的CPU核心數爲6,這裏N值最好選在6到12之間,這裏我們設置6個並行任務進行編譯(注意:這裏看自己的電腦配置,如果配置低,N值選小一點)
make -j6
運行模擬器:
在編譯完成之後,就可以通過以下命令運行Android虛擬機了,命令如下:
source build/envsetup.sh
lunch 5
emulator
如果是在編譯完後運行虛擬機,由於之前已經執行過source和lunch命令了,可以直接運行:
emulator
這裏需要注意的是如果是在虛擬機上編譯模擬器上不會運行成功,但是如果是直接在Linux電腦上就可以運行成功,我自己的是Ubuntu16的虛擬機。
最後編譯成功會顯示綠色的successfully字樣!
最終會在 out/target/product/generic_x86/目錄生成了三個重要的鏡像文件: system.img、userdata.img、ramdisk.img。
六 . 源碼單編
比如我們要編譯系統的Settings應用模塊,
在AOSP根目錄執行:
source build/envsetup.sh
lunch 5
進入Settings的目錄:
cd packages/apps/Settings
mm編譯當前目錄下的模塊,不編譯依賴模塊:
mm
最後編譯成功會顯示綠色的successfully字樣!
最終會生成Settings.odex文件,還會在out/target/product/generic_x86/system/priv-app/Settings目錄下生成Settings.apk。
最後,啦啦啦,九九八十一難,總算編譯成功啦。但是安裝我這個流程來下載和編譯,中途肯定會遇到一些小錯誤的,這裏小夥伴們自行在網上找原因~ ~ ~