開発プラットフォームとしての Android Virtual Device

Android Virtual Device(AVD)を使用するために、Android Emulator は Graphical User Interface(GUI)とコマンドライン インターフェース(CLI)をサポートしています。ワークフローは環境に合わせて最適なものを選択できます。

  • 仮想デバイスの作成と管理 GUI は、ほとんどのアプリ デベロッパーやユーザーにとって使いやすいツールです。
  • エミュレータを起動する コマンドラインで は、パワーユーザーと自動化のための柔軟な方法を提供します。たとえば、複数の AVD を使用したり、継続的なテストと継続的インテグレーションを設定したりできます。使用を開始するには、以下をご覧ください。 示されている例を ツール)。

プレビルドを使用して AOSP Car AVD を起動する

ビルド済みの AOSP Car AVD を使用してすばやく起動してテストするには、オープンソース スクリプトを使用してダウンロードします。 そこからエミュレータのビルドを ci.android.com。スクリプトは Google Kubernetes Engine macOS と Linux。

このスクリプトを使用するには Curl が必要です。

スクリプトを実行するには:

  1. launch_emu.sh スクリプトの内容をローカル ファイルに記述し、launch_emu.sh を ローカル ファイル名を指定します。
  2. ローカル スクリプトを実行可能にします。たとえば、chmod +x ./launch_emu.sh を実行します。
  3. ./launch_emu.sh -h を指定してスクリプトを実行して、使用可能なオプションを確認します。
  4. ci.android.com で、 aosp-main-throttled ブランチを開いて、最新のビルドを選択します。 sdk_car_x86_64 は緑色です。例: 11370359。ビルドが表示されない場合 Google アカウントからログアウトして、もう一度お試しください。
  5. ビルド ID を含むエミュレータ関連のバイナリ ファイルをダウンロードしてインストールします。(例: ./launch_emu.sh -i -a 11370359)。
  6. その後、./launch_emu.sh を使用して、ダウンロードおよびインストールした 使用できます(-i オプションや -a オプションは使用しないでください)。
  7. 別のビルド ID をダウンロードしてインストールするには、./launch_emu.sh -c を実行して 上のステップ 4 とステップ 5 を繰り返します。

Android Emulator を指定するには コマンドライン起動オプション オプションを使用するには、-v オプションを使用します。次に例を示します。

  ./launch_emu.sh -v “-cores 4 -memory 6144 -no-snapshot"

AOSP Car AVD をビルドする

AOSP Car AVD をビルドする手順は次のとおりです。 スマートフォン用の AVD イメージをビルドする(aosp_car_x86_64 など):

  1. 開発環境をセットアップし、ブランチを特定するには、ソース管理ツールをご覧ください。その後、ソースのダウンロードを確認します。
    ANDROID_BRANCH="android12L-release"
    REPO_URL="https://android.googlesource.com/platform/manifest"
    mkdir $ANDROID_BRANCH && cd $ANDROID_BRANCH && repo init -u $REPO_URL -b $ANDROID_BRANCH --partial-clone && repo sync -c -j8
  2. AVD イメージをビルドします。
    . build/envsetup.sh && lunch sdk_car_x86_64-userdebug && m -j32
  3. AVD イメージを実行します(必要に応じて、さらにコマンドラインの起動オプションを追加します)。
    emulator &

    次に例を示します。

    図 1. Android Virtual Emulator の画面

    このプロセスに関する注意事項:

    • ビルドプロセスは、物理デバイス用に Android をビルドするのに必要なプロセスと同様であるため、ソースをダウンロードしてビルドするまでしばらくお待ちください。
    • 他のブランチで操作するには、$ANDROID_BRANCH を別のブランチまたはタグに設定します。
    • system.img などの AVD イメージは $ANDROID_PRODUCT_OUT でビルドされます。キーイメージの詳細については、AVD システム ディレクトリをご覧ください。
    • Android ツリー内のビルド済みエミュレータ バイナリを使用してエミュレータを実行する方法については、README ファイルをご覧ください。

Car AVD を作成する

新しい車の AVD を追加するのは、新しいデバイスを追加するのとほぼ同じです。たとえば、1660554 は新しい avd_car AVD を作成します。

Car AVD を作成するには:

  1. 必要に応じて、会社とデバイスのフォルダを作成します。この例では、 $ANDROID_BUILD_TOP/device/google_car/avd_car
  2. AVD のビルド方法を定義するプロダクトの makefile、avd_car.mk を作成します。
  3. デバイス フォルダ avd_car_device を作成します。このフォルダには BoardConfig.mksource.properties を含めます。
  4. 新しい makefile と新しい lunch チョイスを AndroidProducts.mk に追加します。
  5. 新しい avd_car AVD をビルドして実行する手順は次のとおりです。
    . build/envsetup.sh && lunch acar-userdebug && m -j32 && emulator &
これで、新しい AVD でほとんどの HMI 機能とアプリ機能のプロトタイプを作成する準備が整いました。

AVD イメージの zip ファイルをパッケージ化する

AVD をパッケージ化して他のユーザーと共有したり、別のパソコンで使用したりできます。emu_img_zip.mk を使用する AVD イメージの zip ファイルを生成します。

  1. AVD をビルドしたら、emu_img_zip をターゲットにします。
    m emu_img_zip
  2. sdk-repo-linux-system-images の接頭辞が付いた AVD イメージの zip ファイルが、$ANDROID_PRODUCT_OUT という名前のフォルダに作成されます。

AVD カーネルをビルドする

AVD カーネルは、他の Android カーネルと同様に、すべてビルド済みのイメージです。通常は、Android の各リリースからの標準 goldfish カーネルのビルド済みイメージをそのまま使用できます。

カーネルの変更をテストするには:

  1. 次の一連の手順を実行します。
    mkdir goldfish-kernel-54
    cd goldfish-kernel-54
    repo init -u https://android.googlesource.com/kernel/manifest -b
    common-android11-5.4
    repo sync
    BUILD_CONFIG=common/build.config.gki.x86_64 build/build.sh
    BUILD_CONFIG=common-modules/virtual-device/build.config.goldfish.x86_64
    build/build.sh
    ls -l ./out/android11-5.4/dist/
    
  2. AVD Makefile に応じて、コードベースのカーネル バイナリを置き換えます。たとえば x86_64-vendor.mk x86_64-kernel.mk を含む。

カーネルのコードと構成は次のように配置されています。

アイテム
ブランチ common-android11-5.4(Android 11 で使用)
Manifest kernel/manifest/common-android11-5.4
common-modules/virtual-device kernel/common-modules/virtual-device/android11-5.4
カーネル kernel/common/android11-5.4

新しいデバイス プロファイルを作成する

ユーザーが Android Studio AVD Manager で特定の AVD を作成できるようにするには、仮想デバイスの作成と管理をご覧ください。デバイス メーカーは、AVD イメージに含まれる devices.xml ファイルを使用して、独自のハードウェア仕様(画面サイズや DPI など)を定義できます。

  • 例については、automotive.xml の Automotive Device プロファイルをご覧ください。
  • HMI の開発またはプロトタイピングでは、同じ AVD イメージのファイルに複数のデバイスを追加できます。
  • OEM AVD イメージの zip ファイルのファイルを [ABI] フォルダに含めます。たとえば、x86_64 のようにします。
  • デバイス メーカーは、エミュレータ スキンを作成することもできます。たとえば、再現性を優先した UX を実現するために追加のハードウェア ボタンを定義します。これは、デベロッパーのワークフローだけでなく、UX リサーチなどの他のタスクでも有用です 確認しましょう。

AVD イメージの XML ファイルを作成する

デバイス メーカーは、Android Studio でダウンロードする、AVD イメージの XML ファイルを作成できます。

  • たとえば、AAOS AVD のイメージ XML ファイルである sys-img2-1.xml をご覧ください。
  • デバイス メーカーは、ターゲット ユーザー(自己申告システムを採用)向けの独自の OEM AVD ライセンス契約を、Android Emulator のライセンスとともに定義できます。そのようなライセンスが含まれている場合、Android Studio はユーザーの合意を取得します。

イメージを作成するには:

  1. AVD イメージの zip ファイルを準備します。
  2. ${ANDROID_PRODUCT_OUT}/sdk-repo-linux-system-images-*.zip を解凍します。
  3. devices.xmlx86_64 フォルダに追加してから、そのファイルを zip ファイルに圧縮します。たとえば、oem_avd_img_x86_64.zip のようにします。
  4. oem-sys-img2-1.xml を更新します。
  5. zip ファイルの名前、サイズ、shasum を更新します(サンプル XML ファイルは tools で提供されています)。

たとえば、Google Cloud Storage で AVD をホストするには、ストレージ バケットの作成をご覧ください。

AVD をアップロードして誰もがアクセスできるようにするには、データを一般公開するをご覧ください。

BUCKET_NAME="aaos-avd"
gsutil mb gs://$BUCKET_NAME
gsutil cp oem_avd_img_x86_64.zip gs://$BUCKET_NAME
gsutil cp oem-sys-img2-1.xml gs://$BUCKET_NAME
gsutil iam ch allUsers:objectViewer gs://$BUCKET_NAME

AVD イメージ SDK アドオンの URL 形式は https://storage.googleapis.com/$BUCKET_NAME/oem-sys-img2-1.xml です。 たとえば、BUCKET_NAME が aaos-avd の場合、URL は https://storage.googleapis.com/aaos-avd/oem-sys-img2-1.xml になります。

Android Studio ユーザーと AVD イメージを共有する

ユーザーが AVD イメージをダウンロードして、Android Studio で AVD を使用できるようにするために、SDK アドオン XML ファイルを指定できます。詳しくは、IDE および SDK ツールの更新をご覧ください。

AVD をネットワークからダウンロードするには:

  1. イメージの zip ファイルと XML ファイルをサーバーでホストします。
  2. 対象のユーザーに URL を提供します。
  3. (省略可)ユーザー名とパスワードを使用してアクセスを制限します。

また、AVD をローカル ディレクトリにダウンロードすることで、開発をスピードアップすることもできます。

  1. XML ファイルと XML ファイルで指定されているすべてのアーティファクトを、ADDON_DIR という名前のフォルダ(たとえば、すべての AVD イメージ zip ファイル)に保存します。
  2. URL を file://$ADDON_DIR/oem-sys-img2-1.xml として指定します。