文章目錄
- 設備信息
- 下載AOSP并切換分支
- 獲取設備驅動
- 編譯系統
- 編譯遇到的問題Cannot allocate memory
- Ubuntu設置USB調試
- 刷機
- 參考鏈接
設備信息
手機:Pixel 4XL
下載AOSP并切換分支
在清華大學開源軟件鏡像站下載初始化包aosp-latest.tar。
解壓縮,切換到Pixel 4XL對應的AOSP 13分支然后同步代碼。
tar xf aosp-latest.tar
cd aosp
repo init -b android-13.0.0_r31 #切換代碼分支
repo sync
獲取設備驅動
在https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn中獲取build ID。
以android-13.0.0_r31為例,對應build ID為TP1A.221005.002.B2
根據build ID在https://developers.google.com/android/drivers?hl=zh-cn中下載驅動文件。
驅動文件解壓縮后是sh腳本文件,把sh腳本文件移動到aosp根目錄下并執行,輸入 I ACCEPT 獲取驅動文件。
編譯系統
在aosp根目錄執行下面命令。
source build/envsetup.sh
lunch XXX
m
編譯遇到的問題Cannot allocate memory
解決方法:
ulimit -n 20480
分析部分:
從表面上看,分配內存失敗,以為是內存不夠,但是我這是64G的內存,以前在16G內存+16G虛擬內存情況下都能正常編譯,現在轉到服務器上怎么就有問題呢?報錯期間,查看內存是有剩余的。期間從網上找了不同的解決方法,一個是去掉oat,WITH_DEXPREOPT 和WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY改為false,測試無效;另一個是修改dalvik.vm.dex2oat-Xmx 和dalvik.vm.image-dex2oat-Xmx等配置,調大,仍然無效。沒辦法,自己看看dex2oatd代碼,從報錯的位置跟到mapmem,發現mmap報錯位置是fd.get()==-1,難道是內有文件描述符的問題嗎?通過cat /proc/sys/fs/file-nr命令查看,10720 0 9223372036854775807服務器最大文件描述符很大,根本用不完,那就是每個用戶的數量受限了?ulimit -n查看是1024,既然服務器這么大,那調整一下,ulimit -n 20480。再次編譯的時候,沒有報錯,一次通過,刪除out目錄,再次重新編譯,也是一次通過。
原文鏈接:https://blog.csdn.net/fuyl1985/article/details/134378503
Ubuntu設置USB調試
Ubuntu設置后才能adb連接到手機。
sudo usermod -aG plugdev $LOGNAME
apt-get install android-sdk-platform-tools-common
刷機
adb reboot bootloader
fastboot devices #確認是否連接上手機
fastboot flashall -w #刷機
參考鏈接
https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn
https://yanke.info/?id=128
https://blog.csdn.net/fuyl1985/article/details/134378503
https://developer.android.com/studio/run/device.html?hl=zh-cn#setting-up
https://source.android.com/docs/setup/build/running?hl=zh-cn