実装
A/B パーティションを備えた Android 9 以下の Android 搭載デバイスでは、無効な system_other
パーティション(たとえば、slot_a
が無効な場合の system_b
)を使用して、事前に最適化された VDEX/ODEX ファイルを保存します。system_other
が使用された場合、ro.cp_system_other_odex
が 1 に設定され、パッケージ管理システム サービスが sys.cppreopt=requested
を設定し、cppreopts.rc
が機能するようになります。
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
パーティションがあります。このパーティションは Android 10 にアップグレードして PRODUCT_RETROFIT_DYNAMIC_PARTITIONS
が true
に設定された後も存在します。
リリース時に Android 10 が搭載されている A/B デバイスには論理 system_other
パーティションが存在しているはずです。次の例は、system_other
で AVB を有効にする一般的な fstab.postinstall
ファイルを示しています。
#<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
ファイルをプロダクト パーティションに配置し、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