实施
搭载 Android 9 及更低版本的 Android 设备,并且具有 A/B 分区,可以使用非活动 system_other
分区(例如,当 slot_a
处于活动状态时为 system_b
)来存储预优化的 VDEX/ODEX 文件。当使用 system_other
时,会将 ro.cp_system_other_odex
设置为 1,以便软件包管理器服务为 cppreopts.rc
设置 sys.cppreopt=requested
以对其执行操作。
在 Android 10 中,引入了 libfs_avb
以支持 system_other
分区的独立 AVB 验证。此类分区的 VBMeta 结构附加到分区的末尾,以通过文件系统中预期的公钥进行验证。Android 构建系统支持对 system_other.img
进行签名,同时在 /product/etc/security/avb/system_other.avbpubkey
下包含相应的签名密钥。发布工具 sign_target_files_apks.py
也支持将签名密钥替换为发布版本。
在 Android 10 之前发布的 A/B 设备具有物理 system_other
分区,即使它已使用设置为 true
的 PRODUCT_RETROFIT_DYNAMIC_PARTITIONS
升级到 Android 10 也是如此。
使用 Android 10 发布的 A/B 设备必须具有逻辑 system_other
分区。以下示例显示了一个典型的 fstab.postinstall
文件,该文件在 system_other
上启用 AVB。
#<dev> <mnt_point> <type> <mnt_flags options> <fs_mgr_flags> system /postinstall ext4 ro,nosuid,nodev,noexec slotselect_other,logical,avb_keys=/product/etc/security/avb/system_other.avbpubkey
需要在 system_other
分区上启用 AVB 的设备应将 fstab
文件放在 product 分区中,并将属性 ro.postinstall.fstab.prefix
设置为 /product
。
# Use /product/etc/fstab.postinstall to mount system_other. PRODUCT_PRODUCT_PROPERTIES += \ ro.postinstall.fstab.prefix=/product PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/fstab.postinstall:$(TARGET_COPY_OUT_PRODUCT)/etc/fstab.postinstall