Android 9 以降では、Android ビルドシステムを使用した /product
パーティションの作成をサポートしています。これまで、Android 8.x では Android ビルドシステムから作成された OEM 固有のコンポーネントに専用スペースを割り当てることなく、SoC 固有のコンポーネントを /system
パーティションから /vendor
パーティションに分割することを強制していました。Android 9 以降では、さまざまなパーティションの priv-apps に適用できる追加の権限とホワイトリスト登録機能を利用できます。
プロダクト パーティションについて
多くの OEM は、AOSP システム イメージをカスタマイズして独自の機能や携帯通信会社の要件を実装しています。ただし、そのようなカスタマイズを行うと、1 つのシステム イメージを複数のソフトウェア SKU に使用できなくなります。異なるロケールや携帯通信会社などのカスタマイズをサポートするには、各イメージが異なっている必要があります。個別の /product
パーティションを使用してカスタマイズを行うと、1 つのシステム イメージを複数のソフトウェア SKU に使用できます(/system
パーティションは、多くのソフトウェア SKU 間で共有可能な汎用コードをホストします)。/vendor
パーティションは、指定された SoC に基づいて複数のデバイス間で共有できる、SoC 固有の BSP コードを引き続きホストしています。
パーティションを分割して使用することには、ディスク容量の管理(一定の容量を将来の拡張に備えて予約しておく必要があります)、パーティション間の安定したアプリケーション バイナリ インターフェース(ABI)の維持などのデメリットがあります。/product
パーティションを使用する前に、独自の AOSP の実装と、可能な緩和戦術を検討することをおすすめします(たとえば、無線(OTA)アップデート中のデバイスの再パーティショニングがありますが、これは Google ではなく一部の OEM によって行われます)。
プロダクト パーティションと権限
Android 9 以降では、権限とホワイトリスト登録プロセスを変更すると、プロダクト パーティションで priv-apps に権限を付与する方法に影響します。permissions.xml
ファイルは priv-apps と同じパーティションに存在する必要があります。priv-apps 用に permissions.xml
ファイルを /system
パーティションに配置しても、それらの権限は /product
パーティションの priv-apps には(前者が後者の拡張版であるにもかかわらず)拡張されません。
権限とホワイトリスト登録プロセスの詳細については、特権のホワイトリスト登録を参照してください。
従来の /oem と /product
新しい /product
パーティションは、従来の /oem
パーティションと次の点で異なります。
パーティション | 属性 |
---|---|
/oem |
|
/product |
|
このような理由から、Android 9 は新しい /product
パーティションをサポートしながら、従来の /oem
パーティションに依存するデバイスのために、そのサポートも維持します。
/product のコンポーネント
/product
パーティションには、次のコンポーネントが含まれます。
- プロダクト固有のシステム プロパティ(
/product/build.prop
) - プロダクト固有の RRO(
/product/overlay/*.apk
) - プロダクト固有のアプリ(
/product/app/*.apk
) - プロダクト固有の priv-apps(
/product/priv-app/*.apk
) - プロダクト固有のライブラリ(
/product/lib/*
) - プロダクト固有の Java ライブラリ(
/product/framework/*.jar
) - プロダクト固有の Android フレームワーク システム構成(
/product/etc/sysconfig/*
と/product/etc/permissions/*
) - プロダクト固有のメディア ファイル(
/product/media/audio/*
) - プロダクト固有の(
bootanimation
ファイル)
custom_images は使用不可
custom_images
は使用できません。これは次の機能がサポートされていないためです。
- 特定のターゲットへのモジュールのインストール。
custom_images
は、アーティファクトをイメージにコピーすることはサポートしていますが、ビルドルールの一部としてターゲット パーティションを指定して、モジュールを特定のパーティションにインストールすることはできません。 - Soong のサポート。Soong ビルドシステムを使用して
custom_images
を作成することはできません。 - OTA アップデートのサポート。
custom_images
は、OTA アップデートを受信できないファクトリー ROM イメージとして使用されます。
パーティション間の ABI の維持
Android 9 の /product
パーティションは、/system
パーティションの拡張版です。/product
と /system
の間には弱い ABI があるため、両方を同時にアップグレードする必要があり、ABI はシステム SDK ベースである必要があります。システム SDK が、/product
と /system
の間のすべての API サーフェスをカバーしていない場合、OEM は 2 つのパーティション間の ABI を維持する必要があります。
/product
パーティションと /system
パーティションは、相互に依存関係を持つことができます。ただし、汎用システム イメージ(GSI)は、/product
パーティションなしで正しく動作する必要があります。
/product
パーティションは、/vendor
パーティションに依存することはできません。/product
パーティションと /vendor
パーティションが直接やり取りすることは禁止されています
(これは SEpolicy によって強制されます)。
プロダクト パーティションの実装
新しいプロダクト パーティションを実装する前に、AOSP の関連するプロダクト パーティションの変更を確認してください。/product
を設定するには、次のボードまたはプロダクト ビルドフラグを含めます。
BOARD_USES_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
/product/build.prop
用のPRODUCT_PRODUCT_PROPERTIES
。 これらは、PRODUCT_PRODUCT_PROPERTIES += product.abc=ok
のように、$(call inherit-product path/to/device.mk)
内に存在する必要があります。
product パーティションへのモジュールのインストール
product
パーティションにモジュールをインストールするには、次のビルドフラグを使用します。
Android.bp
のproduct_specific: true
Android.mk
のLOCAL_PRODUCT_MODULE := true
確認付きブートの有効化
悪意のあるソフトウェアによる /product
パーティションの改ざんを防ぐには、そのパーティションの Android の確認付きブート(AVB)を有効にします(/vendor
パーティションおよび /system
パーティションと同様)。AVB を有効にするには、次のビルドフラグを含めます。
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS