Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る
このページは Cloud Translation API によって翻訳されました。
Switch to English

ベンダースナップショットの生成

Android 11は、 VNDKスナップショットビルドアーティファクトとベンダースナップショットをサポートしています。これらは、ソースツリーのAndroidバージョンに関係なく、 vendor.imgビルドに使用できます。これにより、古いベンダーと新しいシステムイメージなど、イメージの混合バージョンが可能になります。

混合イメージバージョンは、以下ではサポートされていません。

  • Android.mk. Soongはベンダースナップショットを生成するため、 Android.mk定義されたモジュールはベンダースナップショットとしてキャプチャされません( Android.mk SoC独自のモジュールもAndroid.mkことが保証されていません)。

  • 消毒剤。ベンダーとVNDKのスナップショットは、サニタイザーバリアントを個別に作成する必要があるため、サニタイザーをサポートしていません。

ベンダースナップショットについて

ベンダースナップショットは、OEMが所有するスナップショットです。これは、 /vendorインストールされているが、AOSPで維持されているビルド済みのC ++モジュールのセットです。以前のAndroidバージョンのベンダースナップショットをキャプチャしないと、新しいAndroidバージョンにアップグレードすると、APIまたはABIとの互換性がなくてもベンダースナップショットモジュールを削除または変更できるため、ベンダーパーティションが破損する可能性があります。

ベンダースナップショットには、AOSPの次のモジュールが含まれています。

  • vendor: trueとの共有、静的、およびヘッダーライブラリvendor: trueまたはvendor_available: true
  • vendor_availableのVNDK静的ライブラリvendor_available: true
  • vendor: true実行可能ファイルとオブジェクトファイル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

これらのコマンドは、作成vendor-$(TARGET_DEVICE).zip内のファイル$DIST_DIR 。以下の例は、ベンダーのスナップショット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ディレクトリが含まれている.rc.xmlフラグからファイルinit_rcvintf_fragments

ベンダースナップショットのインストール

ベンダースナップショットをインストールするには、宛先ディレクトリに移動して、次のコマンドを使用します。

python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
    vendor/vendor name/vendor_snapshot VER

このコマンドは、 /vendor/ vendor name /vendor_snapshot/v VER /$(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_VERSIONcurrent以外の値に設定されている場合、ビルドシステムは次のようになります。

  • BOARD_VNDK_VERSIONのVNDKスナップショットモジュールとベンダースナップショットモジュールをBOARD_VNDK_VERSIONます。各スナップショットモジュールは、同じ名前のC ++ソースモジュールをオーバーライドします。
  • ro.vndk.versionBOARD_VNDK_VERSION設定しBOARD_VNDK_VERSION
  • インストールVNDKはのモジュールスナップショットBOARD_VNDK_VERSIONするsystem_ext