编译脚本介绍

高通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-->

qssitarget区别

qssiQcom Single System Image,就是原本的system分区,target是用户自己的内容,类似于原本的vendor分区。Android R强制使用了Treble架构,将systemvendor强制解耦,目的是为了解决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)

常用编译相关

  1. 首次编译

    source build/envsetup.sh
    choosecombo release [TARGET] userdebug #TARGET为定制项目
    ./build.sh dist -j8
    #以上会把qssi和target以及ota包全部编译出来,编译时间较长
  2. 模块编译

    mmmmm还是可以继续用的,由于Android R使用了动态分区,挂载使用了overlayofs,一部分底层文件是只读的。针对底层修改后,重新烧录分区可以生效。

    在编译相关修改时,如果修改了system分区相关内容,需要lunch qssi选项才能编译出来,同理如果修改了vendor下的内容,需要lunch [TARGET]才能编译出来。

  3. 编译system.img

    lunch qssi-userdebug
    make target-files-package
    #或者
    ./build.sh dist qssi_only -j8
  4. 编译除system.img之外的分区文件

    lunch target-userdebug
    make target-files-package
    或者
    ./build.sh dist target_only -j8
  5. 编译super.img(动态分区专用)

    source build/envsetup.sh
    lunch xx-userdebug
    ./build.sh dist merge_only -j8
  6. 编译framework

    make -j8 framework-minus-apex
    make -j8 services

动态分区调试相关

Android Q以上把systemvendor分区合并为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是用户空间的代码,因为动态的逻辑分区只能在应用空间识别


本站由 TrillionByte 使用 Stellar 创建。