高通R、S、T高版本AOSP源码编译指南
做过AOSP源码开发的都知道,只需要经过下面简单的2步即可完成编译环境的引导和初始化。
$ source build/envsetup.sh
$ lunch aosp-eng
如果不清楚自己想要lunch的项目,可以直接执行lunch
命令,然后从lunch出来的项目列表中选择需要项目的索引或者项目名称。
编译类型
AOSP编译类型可分为3类,eng、user-debug及user ,三种类型比较如下:
常用命令
AOSP内置了一些简单好用的命令
另外有make命令族
Android自从Q之后实现了动态分区, 将system和vendor等分区打包到一个super分区中,使得super分区中个子分区更加灵活地划分空间,所以高通编译命令也有了一些变化。
高通在Q之后的版本增加qssi的编译过程,那么什么是qssi呢?
qssi
QSSI 是 Qualcomm Single System Image 的缩写,并且高通平台从Android Q开始支持。并且其编译也和Android原生编译有差别,其差别如下:
qssi编译命令
QSSI特性的固件编译流程与通用版本有一定区别。这里的编译过程分为两种模式:Android标准编译模式和高通提供的编译脚本。
需要注意的是,通用版本的Android仍然可以通过make相关的命令直接进行编译,例如执行make superimage
或直接使用make
命令进行编译。
使用make命令编译
- 运行以下命令设置编译环境:
source build/envsetup.sh
- 编译 system.img:
lunch qssi-userdebug
make target-files-package
- 编译除 system.img 之外的其他 img:
lunch xx-userdebug
make target-files-package
使用高通提供的 build.sh 编译
编译所有 img,包括 system.img 和其他 img:
source build/envsetup.sh
lunch XX-userdebug
./build.sh dist -j32
编译 system.img,产物位于 qssi 目录下:
source build/envsetup.sh
lunch xx-userdebug
./build.sh dist qssi_only -j32
编译 super.img:
source build/envsetup.sh
lunch xx-userdebug
./build.sh dist merge_only -j32
编译其他 img,例如 vendorimage。如果不指定,则会编译所有其他 img,产物位于 XX 目录下:
source build/envsetup.sh
lunch xx-userdebug
./build.sh vendorimage dist target_only -j32
非QSSI特性的整体编译流程
非QSSI特性的编译流程与之前的Android版本编译过程变化不大,通常按照以下步骤进行:
- 复制以下命令以设置编译环境:
source build/envsetup.sh
- 选择合适的配置:
lunch xx-userdebug
- 执行make命令进行编译:
make
动态分区烧写
Android Q版本以及以上将system
和vendor
分区合并为super
分区,无法通过adb reboot bootloader
模式单独刷动态分区里面的img,例如system
、vendor
、product
、odm
,只能刷super.img
和其他的,但是fastboot
模式下可以单独刷动态分区里面的img,其方法如下:
推荐进入fastboot
模式刷机:
adb reboot fastboot
fastboot getvar is-userspace
is-userspace: yes
Finished. Total time: 0.002s
fastboot flash vendor vendor.img
fastboot flash system system.img
fastboot flash vbmeta vbmeta.img
fastboot flash vbmeta_system vbmeta_system.img
fastbootd
是用户空间的代码,因为动态的逻辑分区只能在应用空间识别。
如果是在Linux下使用fastboot
刷机出现权限问题,需要将fastboot
的所有者属性改成root
:
sudo chown root:root fastboot
sudo chmod +s fastboot