1. 從清華大學鏡像站點下載 AOSP 源碼:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
建議用下載aosp源碼包方式下載;
參考:https://blog.csdn.net/cxq234843654/article/details/52301759
2. 下載完代碼切換分支:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r71
如果時 aosp_latest.tar包解壓的,首先用 repo sync -l 同步本地代碼。
然後 cd .repo/manifests 目錄執行 git branch -a |grep 8.1.0會看到很多8.1.0的分支,
輸入 git checkout -b android-8.1.0_r71 origin/android-8.1.0_r71 切換到 8.1.0 分支。
然後回根目錄 repo sync 同步代碼。
3. 同步代碼
repo sync
4. 源碼同步完需要找對應手機硬件的bsp文件放到源碼裏,
從這裏下載google 手機的driver,要科學上網的:
https://developers.google.com/android/drivers
參考文檔:
https://kswapd.cn/article/aosp-build-to-pixel/
5. repo sync 同步後的代碼是沒有本地分支名字的,你用 git branch 會看到一個遊離分支:
~/aosp/frameworks/base$ git branch
* (頭指針分離於 4fdbba0)
~/aosp/frameworks/base$ git branch -a
* (頭指針分離於 4fdbba0)
remotes/aosp/android10-c2f2-release
remotes/aosp/android10-c2f2-s1-release
remotes/aosp/android10-c2f2-s2-release
remotes/aosp/android10-dev
remotes/aosp/android10-gsi
remotes/aosp/android10-mainline-a-release
remotes/aosp/android10-mainline-release
remotes/aosp/android10-qpr1-b-release
remotes/aosp/android10-qpr1-b-s1-release
remotes/aosp/android10-qpr1-c-s1-release
remotes/aosp/android10-qpr1-mainline-release
remotes/aosp/android10-qpr1-release
remotes/aosp/android10-release
remotes/aosp/android10-s1-release
remotes/aosp/android10-s2-release
remotes/aosp/android10-s3-release
remotes/aosp/android10-security-release
remotes/aosp/android10-tests-dev
remotes/aosp/android10-tests-release
remotes/aosp/b_141248619
remotes/aosp/donut-release
remotes/aosp/donut-release2
remotes/aosp/eclair-passion-release
remotes/aosp/eclair-release
remotes/aosp/eclair-sholes-release
remotes/aosp/eclair-sholes-release2
remotes/aosp/froyo
remotes/aosp/froyo-release
remotes/aosp/gingerbread
remotes/aosp/gingerbread-mr4-release
remotes/aosp/gingerbread-release
remotes/aosp/ics-factoryrom-2-release
remotes/aosp/ics-mr0
remotes/aosp/ics-mr0-release
remotes/aosp/ics-mr1
remotes/aosp/ics-mr1-release
remotes/aosp/ics-plus-aosp
remotes/aosp/idea133
remotes/aosp/idea133-weekly-release
remotes/aosp/jb-dev
remotes/aosp/jb-mr0-release
remotes/aosp/jb-mr1-dev
remotes/aosp/jb-mr1-dev-plus-aosp
remotes/aosp/jb-mr1-release
remotes/aosp/jb-mr1.1-dev
remotes/aosp/jb-mr1.1-dev-plus-aosp
remotes/aosp/jb-mr1.1-release
remotes/aosp/jb-mr2-dev
remotes/aosp/jb-mr2-release
remotes/aosp/jb-mr2.0-release
remotes/aosp/jb-mr2.0.0-release
remotes/aosp/jb-release
remotes/aosp/kitkat-cts-dev
remotes/aosp/kitkat-cts-release
remotes/aosp/kitkat-dev
remotes/aosp/kitkat-mr1-release
remotes/aosp/kitkat-mr1.1-release
remotes/aosp/kitkat-mr2-release
remotes/aosp/kitkat-mr2.1-release
remotes/aosp/kitkat-mr2.2-release
remotes/aosp/kitkat-release
remotes/aosp/kitkat-wear
remotes/aosp/l-preview
remotes/aosp/lollipop-cts-release
remotes/aosp/lollipop-dev
remotes/aosp/lollipop-mr1-cts-release
remotes/aosp/lollipop-mr1-dev
remotes/aosp/lollipop-mr1-fi-release
remotes/aosp/lollipop-mr1-release
remotes/aosp/lollipop-mr1-wfc-release
remotes/aosp/lollipop-release
remotes/aosp/lollipop-wear-release
remotes/aosp/marshmallow-cts-release
remotes/aosp/marshmallow-dev
remotes/aosp/marshmallow-dr-dev
remotes/aosp/marshmallow-dr-dragon-release
remotes/aosp/marshmallow-dr-dragon-release-May
remotes/aosp/marshmallow-dr-release
remotes/aosp/marshmallow-dr1.5-dev
remotes/aosp/marshmallow-dr1.5-release
remotes/aosp/marshmallow-dr1.6-release
remotes/aosp/marshmallow-mr1-dev
remotes/aosp/marshmallow-mr1-release
remotes/aosp/marshmallow-mr2-release
remotes/aosp/marshmallow-mr3-release
remotes/aosp/marshmallow-release
remotes/aosp/master
remotes/aosp/master-cuttlefish-testing-release
remotes/aosp/master-soong
remotes/aosp/n-iot-preview-2
remotes/aosp/n-iot-preview-4
remotes/aosp/nougat-bugfix-release
remotes/aosp/nougat-cts-release
remotes/aosp/nougat-dev
remotes/aosp/nougat-dr1-release
remotes/aosp/nougat-iot-release
remotes/aosp/nougat-mr0.5-release
remotes/aosp/nougat-mr1-cts-release
remotes/aosp/nougat-mr1-dev
remotes/aosp/nougat-mr1-flounder-release
remotes/aosp/nougat-mr1-release
remotes/aosp/nougat-mr1-security-release
remotes/aosp/nougat-mr1-volantis-release
remotes/aosp/nougat-mr1-wear-release
remotes/aosp/nougat-mr1.1-release
remotes/aosp/nougat-mr1.2-release
remotes/aosp/nougat-mr1.3-release
remotes/aosp/nougat-mr1.4-release
remotes/aosp/nougat-mr1.5-release
remotes/aosp/nougat-mr1.6-release
remotes/aosp/nougat-mr1.7-release
remotes/aosp/nougat-mr1.8-release
remotes/aosp/nougat-mr2-dev
remotes/aosp/nougat-mr2-pixel-release
remotes/aosp/nougat-mr2-release
remotes/aosp/nougat-mr2-security-release
remotes/aosp/nougat-mr2.1-release
remotes/aosp/nougat-mr2.2-release
remotes/aosp/nougat-mr2.3-release
remotes/aosp/nougat-release
remotes/aosp/o-iot-preview-5
remotes/aosp/o-mr1-iot-preview-6
remotes/aosp/o-mr1-iot-preview-7
remotes/aosp/o-mr1-iot-preview-8
remotes/aosp/o-preview
remotes/aosp/oreo-cts-release
remotes/aosp/oreo-dev
remotes/aosp/oreo-dr1-dev
remotes/aosp/oreo-dr1-release
remotes/aosp/oreo-dr2-release
remotes/aosp/oreo-dr3-release
remotes/aosp/oreo-m2-release
remotes/aosp/oreo-m2-s1-release
remotes/aosp/oreo-m2-s2-release
remotes/aosp/oreo-m2-s3-release
remotes/aosp/oreo-m2-s4-release
remotes/aosp/oreo-m2-s5-release
remotes/aosp/oreo-m3-release
remotes/aosp/oreo-m4-s1-release
remotes/aosp/oreo-m4-s10-release
remotes/aosp/oreo-m4-s11-release
remotes/aosp/oreo-m4-s12-release
remotes/aosp/oreo-m4-s2-release
remotes/aosp/oreo-m4-s3-release
remotes/aosp/oreo-m4-s4-release
remotes/aosp/oreo-m4-s5-release
remotes/aosp/oreo-m4-s6-release
remotes/aosp/oreo-m4-s7-release
remotes/aosp/oreo-m4-s8-release
remotes/aosp/oreo-m4-s9-release
remotes/aosp/oreo-m5-release
remotes/aosp/oreo-m6-s2-release
remotes/aosp/oreo-m6-s3-release
remotes/aosp/oreo-m6-s4-release
remotes/aosp/oreo-m7-release
remotes/aosp/oreo-m8-release
remotes/aosp/oreo-mr1-1.2-iot-release
remotes/aosp/oreo-mr1-cts-release
remotes/aosp/oreo-mr1-cuttlefish-testing
remotes/aosp/oreo-mr1-dev
remotes/aosp/oreo-mr1-iot-release
remotes/aosp/oreo-mr1-release
remotes/aosp/oreo-mr1-s1-release
remotes/aosp/oreo-mr1-security-release
remotes/aosp/oreo-mr1-vts-release
remotes/aosp/oreo-mr1-wear-release
remotes/aosp/oreo-r2-release
remotes/aosp/oreo-r3-release
remotes/aosp/oreo-r4-release
remotes/aosp/oreo-r5-release
remotes/aosp/oreo-r6-release
remotes/aosp/oreo-release
remotes/aosp/oreo-security-release
remotes/aosp/oreo-vts-release
remotes/aosp/pie-angle-preview-dev
remotes/aosp/pie-b4s4-dev
remotes/aosp/pie-b4s4-release
remotes/aosp/pie-cts-release
remotes/aosp/pie-cuttlefish-testing
remotes/aosp/pie-dev
remotes/aosp/pie-dr1-dev
remotes/aosp/pie-dr1-release
remotes/aosp/pie-gsi
remotes/aosp/pie-platform-release
remotes/aosp/pie-qpr1-release
remotes/aosp/pie-qpr1-s1-release
remotes/aosp/pie-qpr1-s2-release
remotes/aosp/pie-qpr1-s3-release
remotes/aosp/pie-qpr2-release
remotes/aosp/pie-qpr3-b-release
remotes/aosp/pie-qpr3-release
remotes/aosp/pie-qpr3-s1-release
remotes/aosp/pie-r2-release
remotes/aosp/pie-r2-s1-release
remotes/aosp/pie-r2-s2-release
remotes/aosp/pie-release
remotes/aosp/pie-release-2
remotes/aosp/pie-s2-release
remotes/aosp/pie-security-release
remotes/aosp/pie-temp
remotes/aosp/pie-vts-release
remotes/aosp/sdk-release
remotes/aosp/simpleperf-release
remotes/aosp/stage-telephony-refactor
remotes/aosp/studio-master-dev
remotes/aosp/temp-124234733-master
remotes/aosp/temp-PPRL.190605.003
remotes/aosp/temp-b_69925323
remotes/aosp/temp_140451723
remotes/aosp/temp_b_131756210_stage-aosp-master
remotes/aosp/temp_b_132622481_stage-aosp-master
remotes/aosp/temp_b_145570283
remotes/aosp/temp_p_merge
remotes/aosp/tools_r20
remotes/aosp/tools_r21
remotes/aosp/tools_r22
remotes/aosp/tools_r22.2
remotes/m/android-8.1.0_r71 -> m/android-8.1.0_r71
remotes/m/master -> aosp/master
所以你可以用下面命令基於當前分支創建本地分支:
$ repo start --all 8.1.0
Starting 8.1.0: 100% (590/590), done.
$ repo branch
* 8.1.0 | in all projects
5. 編譯
source build/envsetup.sh
lunch xxx-userdebug
make -j4
6. 編譯後的images可以通過fastboot刷到真機中。
$ adb reboot bootloader
$ fastboot flashall -w
7. 編譯問題
剛開始編譯就報告錯誤:
ninja: no work to do.
ninja: no work to do.
out/build-aosp_angler.ninja is missing, regenerating...
[493/998] including ./hardware/qcom/sdm845/Android.mk ...
./hardware/qcom/power/Android.mk:3: error: ./hardware/qcom/sdm845/Android.mk: No such file or directory
14:36:37 ckati failed with: exit status 1
ninja: no work to do.
[1/2] glob hardware/*/Android.bp
ninja: no work to do.
out/build-aosp_angler.ninja is missing, regenerating...
[493/997] including ./hardware/qcom/sm8150/Android.mk ...
./hardware/qcom/power/Android.mk:3: error: ./hardware/qcom/sm8150/Android.mk: No such file or directory
14:45:02 ckati failed with: exit status 1
進目錄查看,有無效軟鏈接:
~/aosp/hardware/qcom/sdm845$ ls -l
總用量 0
lrwxrwxrwx 1 zhb zhb 28 12月 12 14:20 Android.bp -> data/ipacfg-mgr/os_pickup.bp
lrwxrwxrwx 1 zhb zhb 28 12月 12 14:20 Android.mk -> data/ipacfg-mgr/os_pickup.mk
解決辦法是刪除 sdm845和sm8150目錄。
8. 內核下載問題
要科學上網,下載 msm 內核代碼的,https://android.googlesource.com/kernel/msm/
git clone https://android.googlesource.com/kernel/msm
clone成功後切換到分支 android-msm-angler-3.10-oreo-m7
然後開始編譯kernel:
cd msm
git checkout -b android-msm-angler-3.10-oreo-m7 origin/android-msm-angler-3.10-oreo-m7
export ARCH=arm64
export PATH=/home/xxx/aosp/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/:$PATH
export CROSS_COMPILE=aarch64-linux-android-
make angler_defconfig
make -j4
#編譯成功後復制結果到 aosp 目錄
cp arch/arm64/boot/Image.gz-dtb /home/xxx/aosp/device/huawei/angler-kernel/
9. 刷機問題
Nexus 6p 手機插入電腦後,用 adb 命令總提示出錯:
~/aosp$ adb shell
error: insufficient permissions for device: user in plugdev group; are your udev rules wrong?
See [http://developer.android.com/tools/device.html] for more information
出錯原因是手機usb id未被信任,看下手機usb id:
~/aosp$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 174c:55aa ASMedia Technology Inc. ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge
Bus 001 Device 047: ID 258a:001a
Bus 001 Device 002: ID 8087:07dc Intel Corp.
Bus 001 Device 005: ID 093a:2532 Pixart Imaging, Inc.
Bus 001 Device 095: ID 18d1:4ee7 Google Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
從中發現 Nexus 6p的 usb ID:18d1:4ee7,通過下面命令加到系統中,然後重新插拔usb即可。
$sudo vim /etc/udev/rules.d/51-android.rules
加入下面一行,保存退出:
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee7", GROUP="plugdev", MODE="0666"
刷機步驟:
adb reboot bootloader
然後手機會重啓進入bootloader界面,有個小機器人和 START 文字指示。
按音量鍵,文字會在 START,Reboot bootloader, Factory, Recovery mode, Power off, BP tools之間切換。
咱們切換到 Reboot bootloader,然後按Power鍵。
在這個界面如果下方文字顯示 Device is unlocked, 證明設備已經解鎖OK,否則電腦上輸入 fastboot flashing unlock解鎖。
注意調用fastboot要用root提權:
~/aosp$ sudo ./out/host/linux-x86/bin/fastboot reboot
單獨刷某個img:
~/aosp$cd out/target/product/angler
~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot devices
84B5T16219000743 fastboot
~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot flash system system.img
target reported max download size of 494927872 bytes
erasing 'system'...
OKAY [ 0.199s]
sending sparse 'system' 1/3 (483314 KB)...
OKAY [ 13.356s]
writing 'system' 1/3...
OKAY [ 7.274s]
sending sparse 'system' 2/3 (483019 KB)...
OKAY [ 12.758s]
writing 'system' 2/3...
OKAY [ 8.064s]
sending sparse 'system' 3/3 (51520 KB)...
OKAY [ 1.432s]
writing 'system' 3/3...
OKAY [ 0.738s]
finished. total time: 43.822s
~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot flash boot boot.img
target reported max download size of 494927872 bytes
sending 'boot' (12125 KB)...
OKAY [ 0.358s]
writing 'boot'...
OKAY [ 0.183s]
finished. total time: 0.541s
~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot flash recovery recovery.img
target reported max download size of 494927872 bytes
sending 'recovery' (19005 KB)...
OKAY [ 0.549s]
writing 'recovery'...
OKAY [ 0.290s]
finished. total time: 0.840s
~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot flash userdata userdata.img
target reported max download size of 494927872 bytes
erasing 'userdata'...
OKAY [ 4.165s]
sending 'userdata' (148357 KB)...
OKAY [ 3.889s]
writing 'userdata'...
OKAY [ 2.187s]
finished. total time: 10.241s
~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot flash cache cache.img
target reported max download size of 494927872 bytes
erasing 'cache'...
OKAY [ 0.029s]
sending 'cache' (5752 KB)...
OKAY [ 0.209s]
writing 'cache'...
OKAY [ 0.107s]
finished. total time: 0.345s
~/aosp/out/target/product/angler$ sudo ../../../host/linux-x86/bin/fastboot reboot
rebooting...
finished. total time: 0.072s
重啓後就進入 Android 8.1 的界面了。
參考https://blog.csdn.net/konga/article/details/84786784