Android源碼開發(fā)篇(一)9.0/10.0/11.0源碼下載 編譯 刷機(jī)

來點(diǎn)前奏說明

當(dāng)你打開這個(gè)文檔的時(shí)候,你已經(jīng)做好準(zhǔn)備了,話不多說開搞。
這里參考 Google官網(wǎng)文檔清華鏡像文檔

先上圖,其他的文檔有些不是很全,我這個(gè)我只能說我現(xiàn)在刷機(jī)成功了,有圖有真相。我買的Pixel 一代歐版手機(jī) 歐版 歐版 歐版,刷的 android-10.0.0_r5 分支。下圖請忽略相機(jī)名稱(這個(gè)我自己修改的)和WiFi圖標(biāo)顯示圖標(biāo)顯示問題,那個(gè)刷官方的ROM包WiFi圖標(biāo)也那樣,但是可以正常上網(wǎng)。

IMG_20190424_210030.jpg

1、硬件要求:

電腦  內(nèi)存推薦16G,硬盤推薦150G以上,最好250G以上
我之前搞內(nèi)存4G的電腦編譯各種問題換成16G一次成功,8G能不能編譯過我不知道。

2、軟件要求:

Ubuntu下載

Ubuntu系統(tǒng),谷歌建議的14.04坑太多,本人安裝的Ubuntu 20.04 LTS版的系統(tǒng)

Ubuntu下載
Android源碼對Ubuntu版本是有要求的,6.0版本最低要求14.04版本,默認(rèn)網(wǎng)址下載就是LTS版本,個(gè)人推薦安裝15.04以上

JDK下載

15.04版本及以上的JDK下載
    sudo apt-get update
    sudo apt-get install openjdk-8-jdk
14.04 版本的JDK下載,它沒有直接支持JDK 8版本

下載JDK8相應(yīng).deb 軟件包

可以下載JDK8U45版本

谷歌官網(wǎng)步驟
sudo apt-get update
cd Downloads                 到下載目錄,Downloads為默認(rèn)目錄
sudo dpkg -i   openjdk-8-jdk_8u45-b14-1_amd64.deb
解決缺少依賴項(xiàng)的問題: sudo apt-get -f install
安裝的時(shí)候可能會(huì)出現(xiàn)找不到deb文件 有同學(xué)說強(qiáng)制安裝,我沒試過
sudo apt-get update
cd Downloads                   到下載目錄
sudo dpkg -i --ignore-depends=libxml2-utils  openjdk-8-jdk_8u45-b14-1_amd64.deb
解決缺少依賴項(xiàng)的問題: sudo apt-get -f install

工具下載

sudo apt install git
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 libgl1-mesa-dev libxml2-utils xsltproc unzip
sudo apt-get install python-dev
sudo apt install adb

3、下載代碼:

下載 repo 工具

清華鏡像步驟
mkdir ~/bin 
PATH=~/bin:$PATH 
curl https://aosp.tuna.tsinghua.edu.cn/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
谷歌步驟
mkdir ~/bin 
PATH=~/bin:$PATH 
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

初始化名稱和郵箱

mkdir Aosp     (名稱隨意,我這里叫Aosp)
cd Aosp
git config --global user.name "bin zhang" 
git config --global user.email "you@example.com"

初始化repo

鏡像的(默認(rèn)下載master分支,后期也可以切換再下載)  
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
或者
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r5
谷歌的(默認(rèn)下載master分支,后期也可以切換再下載)  
repo init -u https://android.googlesource.com/platform/manifest
或者
repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r5

分支情況和對應(yīng)手機(jī),只截取一部分,這個(gè)太多了。
分支對應(yīng)機(jī)型

分支情況png

下載并且輸出下載的日志

repo sync -j4 2>&1 | tee sync_log.txt

這里推薦會(huì)掉線,建議寫一個(gè)shell腳本 具體請參考github的repo_sync.sh

fn_repo_sync()
{
    repo sync -j8 2>&1 | tee sync_log.txt
}
fn_get_source_code()
{
    echo "fn_get_source_code:$(pwd)"
    fn_repo_sync
    FETCH_ERROR=`grep -i "error: Exited sync" -A 1  sync_log.txt`
    echo  "${FETCH_ERROR}"
    while [ -n "${FETCH_ERROR}" ]
    do
        echo "需要重新拉取代碼"
        fn_repo_sync
        FETCH_ERROR=`grep -i "error: Exited sync" -A 1  sync_log.txt`
    done
    echo "leave begin download source"
    #repo start ${DATE_TIME} --all
}
fn_get_source_code

4、下載驅(qū)動(dòng):

下載驅(qū)動(dòng)(專有的二進(jìn)制文件),官網(wǎng)地址這個(gè)時(shí)候細(xì)分版本那欄就用到了,先找到Pixel手機(jī),搜索QP1A.191005.007.A1 有幾個(gè)下載幾個(gè)

QP1A.191005.007.A1 .png

下載完成之后每個(gè)目錄里面有一個(gè)shell腳本,將兩個(gè)shell腳本放在Aosp 目錄下,chmod 777 XXX.sh 然后執(zhí)行 ./XXX.sh 先按一個(gè)回車,一直按回車只到出現(xiàn) I ACCEPT輸入這兩個(gè)單詞再回車,注意在第8條左右

5、編譯 Android:

關(guān)聯(lián)代碼:

方法一:
source build/envsetup.sh 
方法二:
 . build/envsetup.sh

選擇手機(jī)型號:

lunch  aosp_sailfish-userdebug

只截取一部分,這個(gè)也不少


2019-04-25 0-49-15.png

編譯并且輸出日志

make -j4 2>&1 | tee build.log   (電腦內(nèi)存高的可以16或者32,我用的16)

6、刷機(jī):

打開OEM開關(guān):
先點(diǎn)擊設(shè)置---關(guān)于手機(jī)----版本號七次---開發(fā)者選項(xiàng)---打開OEM解鎖(這步必須可以上網(wǎng),否則打不開)

進(jìn)入bootloader頁面(使用方法1必須安裝adb) platform-tools下載地址

我也下載好了 具體請參考github

方法1:
adb reboot bootloader  
方法2:
使用下圖的快捷鍵,我的手機(jī) Pixel  就是音量減鍵和電源鍵

下圖只貼了一部分手機(jī)機(jī)型

image.png

在源碼根目錄(我的項(xiàng)目Aosp目錄下)執(zhí)行,這步必須下載SDK,手機(jī)已經(jīng)解鎖的跳過此步

對于新款設(shè)備(2015 年及之后發(fā)布的設(shè)備)
fastboot flashing unlock
對于老款設(shè)備(2014 年及之前發(fā)布的設(shè)備)
fastboot oem unlock

配置adb和fastboot

su root
vim ~/.bashrc
export ADB=/home/zhangbin/Android/Sdk/platform-tools
export PATH=$ADB:$PATH 
:wq       保存退出
source ~/.bashrc

adb version   確認(rèn)配置的目錄和顯示的一致
fastboot  --version

配置生成的out目錄,刷機(jī)

export ANDROID_PRODUCT_OUT=/home/zhangbin/Aosp/out/target/product/sailfish
cd Aosp/out/target/product/sailfish
fastboot flashall -w 

切換分支

清華鏡像
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r5
repo sync
谷歌
repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r5
repo sync

FAQ

platforms下載地址

Question1:怎么重新關(guān)閉引導(dǎo)加載程序?
Answer1:我能問一下為什么要關(guān)閉,你后期使用還得開。車跑偏了哈,回答問題。

對于新款設(shè)備(2015 年及之后發(fā)布的設(shè)備)
fastboot flashing lock
對于老款設(shè)備(2014 年及之前發(fā)布的設(shè)備)
fastboot oem lock

Question2:mac電腦配置有哪些問題?
Answer1:

首先下載mac os 10.11sdk 
拷貝到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
然后解壓 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容