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