2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
ベンダー スナップショットの生成
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
Android 11 では、VNDK スナップショットのビルド アーティファクトとベンダー スナップショットがサポートされています。これらを使用すると、ソースツリーの Android バージョンに関係なく vendor.img
をビルドできます。これにより、古いベンダー イメージと新しいシステム イメージなど、複数のバージョンのイメージを組み合わせることができます。
複数のバージョンのイメージの組み合わせは以下ではサポートされていません。
Android.mk.
。Soong がベンダー スナップショットを生成するため、Android.mk
で定義されたモジュールはベンダー スナップショットとしてキャプチャされません(Android.mk
の SoC 独自のモジュールは、必ずしも機能するとは限りません)。
サニタイザー。サニタイザー バリアントは個別にビルドする必要があるため、ベンダーと VNDK のスナップショットはサニタイザーをサポートしていません。
ベンダー スナップショットについて
ベンダー スナップショットは OEM が所有するスナップショットです。ビルド済みの C++ モジュールのセットで、/vendor
にインストールされていますが、AOSP で維持されます。以前の Android バージョンのベンダー スナップショットをキャプチャしていない場合、新しい Android バージョンにアップグレードすることで、ベンダー パーティションが破損することがあります。これは、ベンダー スナップショット モジュールが API や ABI の互換性なしで削除または変更されることがあるためです。
ベンダー スナップショットには、AOSP の次のモジュールが含まれています。
vendor: true
または vendor_available:
true
が指定されている共有、静的、ヘッダー ライブラリ
vendor_available: true
が指定されている VNDK 静的ライブラリ
vendor: true
または vendor_available: true
が指定されている実行可能ファイルとオブジェクト ファイル
次のディレクトリにあるモジュールは、SoC 所有のハードウェア コードと見なされ、無視されます。
device/
vendor/
hardware/
(ただし、以下を除く)hardware/interfaces
hardware/libhardware
hardware/libhardware_legacy
SoC 所有のハードウェア コードは他のディレクトリに存在する場合もあります。現時点では、ベンダー スナップショットはそのような構成をサポートしていません。
ベンダー スナップショットをビルドする
次のコマンドを使用してベンダー スナップショットをビルドします。
. build/envsetup.sh
lunch target
m dist vendor-snapshot
これらのコマンドにより、$DIST_DIR
に vendor-$(TARGET_DEVICE).zip
ファイルが作成されます。次の例は、ベンダー スナップショットの ZIP ファイルを示しています。
vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│ ├── binary -> binary files, *.json files
│ ├── header -> *.json files
│ ├── object -> *.o files, *.json files
│ ├── shared -> *.so files, *.json files
│ └── static -> *.a files, *.json files
├── arch-arm-armv8-a -> (arch-arm64-armv8-a)
├── configs -> *.rc files, *.xml files
├── include -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES -> license txt files
- JSON ファイルには、モジュール名、エクスポートされたディレクトリ、
init_rc
ファイル、vintf_fragments
ファイルなどのフラグが含まれます。
configs
ディレクトリには、init_rc
および vintf_fragments
フラグの .rc
ファイルと .xml
ファイルが含まれます。
ベンダー スナップショットをインストールする
ベンダー スナップショットをインストールするには、保存先ディレクトリに移動し、次のコマンドを使用します。
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VER
このコマンドにより、/vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp
が生成されます。次の例は、ベンダー スナップショットのディレクトリ構造を示しています。
vendor/vendor name/vendor_snapshot/
├── v30
│ ├── arm64
│ │ ├── arch-arm64-armv8-a
│ │ │ ├── binary -> (prebuilt libs)
│ │ │ ├── object -> (prebuilt libs)
│ │ │ ├── shared -> (prebuilt libs)
│ │ │ └── static -> (prebuilt libs)
│ │ ├── arch-arm-armv8-a -> (same as above)
│ │ ├── configs -> (config files)
│ │ ├── include -> (exported header files)
│ │ ├── NOTICE_FILES -> (license files)
│ │ └── Android.bp -> (snapshot modules)
│ ├── arm -> (same as above)
│ ├── x86_64 -> (same as above)
│ └── x86 -> (same as above)
└── (other vendor versions) -> (same as above)
ベンダー イメージをビルドする
VNDK スナップショットのビルド アーティファクトとベンダー スナップショットを使用すると、ソースツリーの Android のバージョンに関係なく vendor.img
をビルドできるため、複数のバージョンのイメージの組み合わせることができます。VNDK スナップショットとベンダー スナップショットの両方をインストールしたら、BOARD_VNDK_VERSION
をベンダーのバージョンに設定します。次に例を示します。
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
BOARD_VNDK_VERSION
が current
以外の値に設定されている場合、ビルドシステムは次を実行します。
BOARD_VNDK_VERSION
の VNDK スナップショット モジュールとベンダー スナップショット モジュールを有効にします。各スナップショット モジュールが、同じ名前を持つ C++ ソース モジュールをオーバーライドします。
ro.vndk.version
を BOARD_VNDK_VERSION
に設定します。
BOARD_VNDK_VERSION
の VNDK スナップショット モジュールを system_ext
にインストールします。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-26 UTC。"],[],[],null,["# Generate vendor snapshots\n\nAndroid 11 supports [VNDK snapshot build\nartifacts](/docs/core/architecture/vndk/snapshot-generate#vendor-snapshots)\nand vendor snapshots, which you can use to build `vendor.img` regardless of the\nAndroid version on the source tree. This enables mixed versions of images, such\nas an older vendor and a newer system image.\n\nMixed image versions aren't supported for the following.\n\n- `Android.mk.` Because Soong generates the vendor snapshot, modules defined in\n `Android.mk` aren't captured as a vendor snapshot (SoC-proprietary modules in\n `Android.mk` also aren't guaranteed to work).\n\n- **Sanitizer.** Vendor and VNDK snapshots don't support sanitizer as sanitizer\n variants need to be built separately.\n\nAbout vendor snapshots\n----------------------\n\nA vendor snapshot is an OEM-owned snapshot. It's a set of prebuilt C++ modules\ninstalled in `/vendor` but maintained on AOSP. Without capturing a vendor\nsnapshot of the previous Android version, upgrading to a new Android version\nmight break the vendor partition because vendor snapshot modules can be removed\nor changed without API or ABI compatibility.\n\nA vendor snapshot contains following modules on AOSP.\n\n- Shared, static, and header libraries with `vendor: true` or `vendor_available:\n true`\n- VNDK static libraries with `vendor_available: true`\n- Executables and object files with `vendor: true` or `vendor_available: true`\n\nModules under the following directories are considered SoC-owned hardware code\nand are ignored.\n\n- `device/`\n- `vendor/`\n- `hardware/`, except for\n - `hardware/interfaces`\n - `hardware/libhardware`\n - `hardware/libhardware_legacy`\n\nSoC-owned hardware codes might also exist in other directories. At this time,\nvendor snapshots don't support such configurations.\n\nBuild vendor snapshots\n----------------------\n\nBuild a vendor snapshot using the following commands. \n\n . build/envsetup.sh\n lunch \u003cvar translate=\"no\"\u003etarget\u003c/var\u003e\n m dist vendor-snapshot\n\nThese commands create a `vendor-$(TARGET_DEVICE).zip` file in\n`$DIST_DIR`. The following example shows a vendor snapshot zip file: \n\n vendor-$(TARGET_DEVICE).zip\n ├── arch-arm64-armv8-a\n │ ├── binary -\u003e binary files, *.json files\n │ ├── header -\u003e *.json files\n │ ├── object -\u003e *.o files, *.json files\n │ ├── shared -\u003e *.so files, *.json files\n │ └── static -\u003e *.a files, *.json files\n ├── arch-arm-armv8-a -\u003e (arch-arm64-armv8-a)\n ├── configs -\u003e *.rc files, *.xml files\n ├── include -\u003e exported header files (*.h, *.hh, etc.)\n └── NOTICE_FILES -\u003e license txt files\n\n- The JSON files contain flags such as module name, exported directories, `init_rc` files, and `vintf_fragments` files.\n- The `configs` directory contains `.rc` and `.xml` files from flags `init_rc` and `vintf_fragments`.\n\nInstall vendor snapshots\n------------------------\n\n| **Note:** For details on uploading VNDK snapshots, see [Using locally built VNDK\n| snapshots](/docs/core/architecture/vndk/snapshot-generate#using-local-snapshots).\n\nTo install a vendor snapshot, navigate to the destination directory and use the\nfollowing commands. \n\n python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \\\n vendor/\u003cvar translate=\"no\"\u003evendor\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003ename\u003c/var\u003e/vendor_snapshot \u003cvar translate=\"no\"\u003eVER\u003c/var\u003e\n\nThis command generates\n`/vendor/`\u003cvar translate=\"no\"\u003evendor name\u003c/var\u003e`/vendor_snapshot/v`\u003cvar translate=\"no\"\u003eVER\u003c/var\u003e`/$(TARGET_ARCH)/Android.bp`.\nThe following example shows the directory structure of a vendor snapshot: \n\n vendor/\u003cvar translate=\"no\"\u003evendor name\u003c/var\u003e/vendor_snapshot/\n ├── v30\n │ ├── arm64\n │ │ ├── arch-arm64-armv8-a\n │ │ │ ├── binary -\u003e (prebuilt libs)\n │ │ │ ├── object -\u003e (prebuilt libs)\n │ │ │ ├── shared -\u003e (prebuilt libs)\n │ │ │ └── static -\u003e (prebuilt libs)\n │ │ ├── arch-arm-armv8-a -\u003e (same as above)\n │ │ ├── configs -\u003e (config files)\n │ │ ├── include -\u003e (exported header files)\n │ │ ├── NOTICE_FILES -\u003e (license files)\n │ │ └── Android.bp -\u003e (snapshot modules)\n │ ├── arm -\u003e (same as above)\n │ ├── x86_64 -\u003e (same as above)\n │ └── x86 -\u003e (same as above)\n └── (other vendor versions) -\u003e (same as above)\n\nBuild vendor images\n-------------------\n\nUsing [VNDK snapshot build\nartifacts](/docs/core/architecture/vndk/snapshot-generate#vendor-snapshots)\nand a vendor snapshot, you can build `vendor.img` regardless of the Android\nversion on the source tree, making it possible to create mixed versions of\nimages. After installing both the VNDK snapshot and vendor snapshot, set\n`BOARD_VNDK_VERSION` to the vendor's version. For example: \n\n # BoardConfig.mk\n BOARD_VNDK_VERSION := 29\n\nWhen `BOARD_VNDK_VERSION` is set to a value other than `current`, the build\nsystem:\n\n- Enables VNDK snapshot modules and vendor snapshot modules of `BOARD_VNDK_VERSION`. Each snapshot module overrides a C++ source module having the same name.\n- Sets `ro.vndk.version` to `BOARD_VNDK_VERSION`.\n- Installs VNDK snapshot modules of `BOARD_VNDK_VERSION` to `system_ext`."]]