ubuntu24.04编译aosp
#Pixel5a最新的代码分支
设备:Pixel5a
buildID: AP2A.240805.005.S4
标记tag(分支):android-14.0.0_r75
构建目标:aosp_barbet-trunk_staging-userdebug
运行完“lunch 构建目标”命令的显示:
============================================
PLATFORM_VERSION_CODENAME=VanillaIceCream
PLATFORM_VERSION=VanillaIceCream
PRODUCT_INCLUDE_TAGS=com.android.mainline mainline_module_prebuilt_nightly
TARGET_PRODUCT=aosp_barbet
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=arm64
TARGET_ARCH_VARIANT=armv8-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=arm
TARGET_2ND_ARCH_VARIANT=armv8-a
TARGET_2ND_CPU_VARIANT=generic
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.8.0-52-generic-x86_64-Ubuntu-24.04.1-LTS
HOST_CROSS_OS=windows
BUILD_ID=AP2A.240805.005.S4
OUT_DIR=out
============================================
同步代码
1.下载每月aosp更新包
2.修改源和分支
# 指定下载源和版本
repo init -u https://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-14.0.0_r75
3. repo sync -c // 同步当前分支代码 -c代表只同步当前分支,no-tag代表tag为default 一般执行两次sync就能完整拉下来
4. repo sync -c -j4 --fail-fast //从上次错误的地方继续同步
编译
5.准备编译环境&编译
- 根据文章开头的设备和buildId(AP2A.240805.005.S4),去官方镜像和驱动这里下载驱动二进制文件并解压到aosp根目录,执行安装(需要阅读许可,并输入 I ACCEPT),这一步会解压驱动到根目录,并跟着一起构建进镜像中
- 给ubuntu24.04缺失的但aosp编译要用到的动态库,创建软链接
- sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/libtinfo.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libncursesw.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5
- sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/libtinfo.so.5
- 下载aosp帮助脚本,执行根目录下的main.sh 只编译的话执行aosp_build.sh即可
构建到最后如果遇到Out of space? Out of inodes?,作者试过可行的是在aosp根目录建立下面的脚本,并sudo执行,怀疑是生成镜像需要root权限
#!/bin/bash
echo “>>> 开始编译…”
export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache
export CCACHE_DIR=$PWD/ccache
ccache -M 100G
source build/envsetup.sh
lunch aosp_barbet-trunk_staging-userdebug
make -j$(nproc –all)
其他的一些命令
# 指定编译frameworks/base
mmm frameworks/base
清除已生成的构建输出文件
make clean
清除构建缓存
make clobber
删除已构建的目标文件和生成的镜像
rm -rf out/
构建流程会自动将模拟器添加到您的路径中,如需运行模拟器,请输入以下命令
emulator
#处理编译中找不到库的错误
ldconfig -p | grep 动态库名
cd 到动态库所在目录
cd /usr/lib/x86_64-linux-gnu
sudo cp 系统动态.so 编译所需要的动态库
sudo cp libncurses.so.6 libncurses.so.5
sudo cp libtinfo.so.6 libtinfo.so.5
-
构建类型:
-user: 用户版,权限受限;适用于生产环境。
-userdebug:用户调试版,与 “user” 类似,但具有 root 权限和调试功能;是进行调试时的首选编译类型。
-eng:工程版,具有额外调试工具的开发配置,适用于深度开发和调试
刷入镜像
6.下载AndroidSDK平台工具(adb和fastboot)并配置环境变量,连接手机解决adb devices和fastboot devices找不到的问题
- fastboot的解决方案 需要进入fastboot模式然后再lsusb查看设备号,和未进入fastboot的不同
- adb的解决方案
7.解锁BootLoader
- 1. 开启开发者选项
设置——关于手机——版本号,连续点击7次可进入开发者模式
- 2. 开启 USB 调试和解锁OEM
开发者模式中允许 USB 调试、允许 OEM 解锁两个选项勾选
adb devices
#进入fastboot模式
adb reboot bootloader
fastboot devices
# 解锁bl
fastboot flashing unlock
刷个官方镜像先,避免变砖
8.去官网下载本地编译同版本的镜像,用开头的设备,分支,build确定下哪个版本
9.解压官方镜像,进入目录找到flash-all.sh
- adb reboot bootloader进入fastboot模式,运行flash-all.sh
10.刷入本地编译好的镜像
cd aosp根目录
# flashall会从ANDROID_PRODUCT_OUT读取镜像,所以指定一下镜像位置
export ANDROID_PRODUCT_OUT=$PWD/out/target/product/barbet
#进入fastboot
adb reboot bootloader
#刷入镜像
fastboot flashall -w
参考资料:
官方一些地址: