product パーティション

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
  • 更新できません。通常、出荷時に 1 回フラッシュされます。
  • ブランドや色など、わずかな違いごとに作成されます。oem パーティションの内容が異なっても、製品ソフトウェアが異なるわけではありません。
  • system パーティションは、oem パーティションに依存しません(特定のファイルがそこで見つかった場合のみ、oem パーティションを使用します)。
  • system パーティションの公開 API のみを使用します。
product
  • 更新可能
  • システム イメージと一体化されています(一緒に更新されます)
  • プロダクトやプロダクト ファミリーごとに作成されます。
  • システム パーティションは productパーティションに依存できます。
  • 非公開 API は同時に更新されるため、使用可能です。
product(適用されるインターフェース)
  • 更新可能
  • システム イメージと切り離されます。
  • プロダクトやプロダクト ファミリーごとに作成されます。
  • system パーティションは、product パーティションに依存しません。
  • 非表示 API は使用できませんが、system パーティションの公開 API とシステム API のみを使用します。

このような理由から、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 パーティションの拡張版です。productsystem の間には弱い ABI があるため、両方を同時にアップグレードする必要があり、ABI はシステム SDK ベースである必要があります。システム SDK が、productsystem の間のすべての 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: trueAndroid.bp
  • LOCAL_PRODUCT_MODULE := trueAndroid.mk

確認付きブートを有効にする

悪意のあるソフトウェアによる product パーティションの改ざんを防ぐには、そのパーティションの Android の確認付きブート(AVB)を有効にします(vendor パーティションおよび system パーティションと同様)。AVB を有効にするには、次のビルドフラグを含めます。 BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.