编译脚本介绍
高通Android R使用vendor/qcom/opensource/core-utils/build/build.sh完成系统的编译,脚本选项如下
./build.sh dist #编译并生成OTA包
./build.sh -qssi_only #编译qssi
./build.sh -target_only #编译自己的target
./build.sh -merge_only<!-- more-->
qssi与target区别
qssi是Qcom Single System Image,就是原本的system分区,target是用户自己的内容,类似于原本的vendor分区。Android R强制使用了Treble架构,将system与vendor强制解耦,目的是为了解决Android碎片化的问题。
Android R之前的编译流程为source build/envsetup.sh>lunch target>make
Android R之后的编译流程为 source build/envsetup.sh>lunch qssi>make(system image)>lunch target>make(no-system image)
常用编译相关
首次编译
source build/envsetup.sh choosecombo release [TARGET] userdebug #TARGET为定制项目 ./build.sh dist -j8 #以上会把qssi和target以及ota包全部编译出来,编译时间较长模块编译
mm与mmm还是可以继续用的,由于Android R使用了动态分区,挂载使用了overlayofs,一部分底层文件是只读的。针对底层修改后,重新烧录分区可以生效。在编译相关修改时,如果修改了system分区相关内容,需要
lunchqssi选项才能编译出来,同理如果修改了vendor下的内容,需要lunch[TARGET]才能编译出来。编译
system.imglunch qssi-userdebug make target-files-package #或者 ./build.sh dist qssi_only -j8编译除
system.img之外的分区文件lunch target-userdebug make target-files-package 或者 ./build.sh dist target_only -j8编译
super.img(动态分区专用)source build/envsetup.sh lunch xx-userdebug ./build.sh dist merge_only -j8编译
frameworkmake -j8 framework-minus-apex make -j8 services
动态分区调试相关
Android Q以上把system和vendor分区合并为super分区,修改分区就要刷很大的super.img,以下为单刷方案
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是用户空间的代码,因为动态的逻辑分区只能在应用空间识别