Android デバイスには、起動プロセスでさまざまな機能を果たす複数のパーティションが含まれています。
標準パーティション
- bootパーティション。このパーティションはカーネル イメージを含み、- mkbootimgを使用して作成されます。仮想パーティションを使用すると、新しいブート パーティションをフラッシュせずに、任意のイメージを直接フラッシュできます。Android 13 より前にリリースされたデバイスの場合、このパーティションには汎用 RAM ディスクも含まれています。- kernel。仮想 - kernelパーティションは、新しいカーネル イメージを古いカーネル イメージに書き込むことで、カーネル(- zImage、- zImage-dtb、- Image.gz-dtb)を上書きします。提供された開発用カーネルに互換性がない場合、- vendor、- system、または- dtbのパーティション(存在する場合)を、関連するカーネル モジュールに更新する必要があります。
- ramdisk。仮想 - ramdiskパーティションは、新しい ramdisk イメージを古い ramdisk に書き込むことで、ramdisk を上書きします。
 - 上書き処理では、eMMC にある既存のイメージの開始位置を決定し、新しいイメージをその位置にコピーします。新しいイメージ(カーネルまたは RAM ディスク)が既存のイメージより大きい場合があります。スペースを空けるために、ブートローダーはイメージの後にデータを移動するか、処理を中止してエラーを報告できます。 
- init_bootパーティション。Android 13 以降のデバイスの場合は、このパーティションに汎用 RAM ディスクが含まれています。
- systemパーティション。このパーティションには Android フレームワークが格納されています。
- odmパーティション。このパーティションには、元の設計メーカー(ODM)のシステム オン チップ(SoC)ベンダーのボード サポート パッケージ(BSP)に対するカスタマイズが含まれています。このようなカスタマイズにより、ODM は、SoC コンポーネントの置き換えやカスタマイズを行えます。またハードウェア抽象化レイヤ(HAL)上のボード固有のコンポーネント、デーモン、ODM 固有の機能のカーネル モジュールを実装できます。このパーティションは省略可能です。通常、デバイスが複数のハードウェア SKU に 1 つのベンダー イメージを使用できるように、カスタマイズを格納するために使用されます。詳しくは、ODM パーティションをご覧ください。
- odm_dlkmパーティション。このパーティションは、ODM カーネル モジュールの格納専用です。ODM カーネル モジュールを(- odmパーティションではなく)- odm_dlkmパーティションに格納することで、- odmパーティションを更新することなく ODM カーネル モジュールを更新できるようになります。
- recoveryパーティション。このパーティションには、OTA プロセス中に起動されるリカバリ イメージが格納されています。シームレス アップデートをサポートするデバイスは、リカバリ イメージを個別のイメージではなく、- bootまたは- init_bootイメージに含まれる RAM ディスクとして格納できます。
- cacheパーティション。このパーティションには一時データが格納されています。デバイスがシームレス アップデートを使用する場合、このパーティションは省略可能です。キャッシュ パーティションはブートローダーから書き込み可能にする必要はありませんが、消去可能にする必要があります。パーティション サイズは、デバイスタイプと- userdataの空き容量によって異なります。通常 50 MB~100 MB で十分です。
- miscパーティション。このパーティションはリカバリ パーティションで使用され、サイズは 4 KB 以上です。
- userdataパーティション。このパーティションには、カスタマイズ データなど、ユーザーがインストールしたアプリとデータが含まれます。
- metadataパーティション。このパーティションは、デバイスがメタデータ暗号化を使用するときのメタデータ暗号鍵の保存に使用されます。サイズは 16 MB 以上です。暗号化されておらず、データはスナップショットされません。デバイスが出荷時の設定にリセットされると消去されます。このパーティションの使用には厳しい制限があります。
- vendorパーティション。このパーティションには、AOSP に配布できないあらゆるバイナリが含まれています。デバイスに専有情報が含まれていない場合は、このパーティションを省略できます。
- vendor_dlkmパーティション。このパーティションは、ベンダー カーネル モジュールの格納専用です。ベンダー カーネル モジュールを(- vendorパーティションではなく)- vendor_dlkmパーティションに格納することで、- vendorパーティションを更新することなくカーネル モジュールを更新できるようになります。
- radioパーティション。このパーティションは無線イメージを含み、無線固有のソフトウェアを専用パーティションに格納するデバイスにのみ必要です。
- tosパーティション。このパーティションには Trusty OS のバイナリ イメージが格納されます。デバイスに Trusty が含まれている場合にのみ使用されます。詳細については、TOS パーティションをご覧ください。
- pvmfwパーティション。このパーティションには、保護された仮想マシンのファームウェア(pvmfw)が含まれます。これは、保護された仮想マシンで実行される最初のコードとなります。詳細については、保護された仮想マシンのファームウェアをご覧ください。
動的パーティション
Android 11 以降を搭載したデバイスは、動的パーティションをサポートできます。動的パーティションは、Android のユーザー空間パーティショニング システムであり、無線(OTA)アップデート時のパーティションの作成、サイズ変更、破棄をサポートします。詳細については、動的パーティションをご覧ください。
クリティカル パーティションの指定
デバイスが動作するために特定のパーティションまたはデータを必要とする場合、これらのパーティションまたはデータを完全に保護されるもの、または再フラッシュ可能なものとして指定する必要があります。つまり、fastboot oem コマンドによる再構築、提供、抽出を行えます。これらのパーティションまたはデータには、デバイスごとの工場固有の設定、シリアル番号、調整データなどがあります。
Android 11 の変更点
Android 11 では、ライブラリへのリンク制限や新しい Soong イメージ バリアントなど、パーティションにいくつかの変更が加えられました。
 
 
図 1. Android 11 のパーティション レイアウト
- シングル システム イメージ(SSI)。 - systemイメージと- system_extイメージを含む新しいコンセプト イメージ。対象デバイスのグループがこれらのパーティションを共有する場合、これらのデバイスは SSI を共有し、- systemイメージと- system_extイメージのビルドをスキップできます。
- system_extパーティション。- systemリソースを使用できる新しいパーティション。以下のシステム モジュールを含めることができます。- AOSP システム モジュールを - systemパーティションに拡張します。このようなモジュールは、後で- systemパーティションにインストールできるように、AOSP にストリーミングすることをおすすめします。
- OEM または SoC 固有のモジュールをバンドルします。そのようなモジュールは、 - productパーティションまたは- vendorパーティションにインストールできるように、分割することをおすすめします。
 
- systemパーティション。OEM 製品で使用される一般的なシステム イメージ。独自のモジュールを AOSP にアップストリーミングするか、- system_extパーティションに移動することで、これらのモジュールを- systemパーティションから移動することをおすすめします。
- productパーティション。このパーティションでは、許可されたインターフェースを使用して、他のパーティションにバンドルされていない製品固有のモジュールをインストールできるようになりました。
VNDK の変更点
Vendor Native Development Kit(VNDK)は、system パーティションにインストールされるライブラリのセットであり、特にベンダーがその HAL を実装するために設計されたものです。
- Android 10 以前では、 - vendorパーティションは- systemパーティション内の VNDK ライブラリにリンクできますが、- systemパーティション内の他のライブラリにリンクすることはできません。- productパーティション内のネイティブ モジュールは、- systemパーティション内の任意のライブラリにリンクできます。
- Android 11 以降では、 - productパーティションと- vendorパーティションを- systemパーティションの VNDK ライブラリにリンクできますが、- systemパーティション内の他のライブラリにリンクすることはできません。
Soong 製品バリエーション
Soong ビルドシステムは、イメージ バリアントを使用してビルドの依存関係を分割します。ネイティブ モジュール(/build/soong/cc)は、システム プロセス モジュールをコアバリアントに変更し、ベンダー プロセス モジュールをベンダー バリアントに変更できます。1 つのイメージ バリアントのモジュールを他のイメージ バリアントの他のモジュールにリンクすることはできません。
- Android 10 以前では、システム モジュールはコアバリアントを自動的に作成します。また、 - Android.bpファイルで- vendor_available: trueを定義してベンダー バリアントを作成することもできます。これにより、ベンダー モジュールをシステム モジュールにリンクできます。VNDK ライブラリは- systemライブラリのベンダー バリアントです。- Android.bpファイルで- vendor_available: trueを定義して、ベンダー モジュールのベンダー バリアントを作成することもできます(例をご覧ください)。
- Android 11 では、システム モジュールは - vendor_available: trueを定義することで、コアバリアントやベンダー バリアントに加えて、プロダクト バリアントも作成できます。
- Android 12 以降では、 - vendor_available: trueが定義されたシステム モジュールは、コアバリアントに加えて、ベンダー バリアントも作成できます。プロダクト バリアントを作成するには、- product_available: trueを定義する必要があります。- product_available: trueが定義されていない一部の VNDK ライブラリは、プロダクト モジュールでは利用できません。
