Android Emulator の仮想デバイスを使用する

Android Emulator を使用して Android デバイスのエミュレーションを作成し、独自のカスタム Android システム イメージを実行できます。他のユーザーがエミュレーションを実行できるように、カスタム Android システム イメージを共有することもできます。また、Android Emulator のエミュレーションにはマルチディスプレイのサポートを追加できます。

Android Emulator のアーキテクチャ

Android Emulator を使用すると、Windows、macOS、Linux マシンで Android デバイスをエミュレートできます。Android Emulator は、Android Virtual Device(AVD)と呼ばれる仮想マシンで、Android オペレーティング システムを実行します。AVD には完全な Android ソフトウェア スタックが含まれているため、物理デバイス上にあるかのようにシステムが動作します。図 1 は、Android Emulator のアーキテクチャの概念図です。エミュレータについて詳しくは、Android Emulator 上でアプリを実行するを参照してください。

Android Emulator のアーキテクチャ

図 1. Android Emulator のアーキテクチャ

AVD イメージをビルドする

各 AVD には、AVD で動作する Android システム イメージが含まれています。AVD Manager には、複数のシステム イメージが含まれています。ソースコードからカスタム AVD システム イメージをビルドし、デバイス エミュレーションを作成してビルドしたイメージを実行することも可能です。

AVD システム イメージをビルドして実行する手順は次のとおりです。

  1. Android ソースをダウンロードします。

    mkdir aosp-main; cd aosp-main
    repo init -u
    repo sync -j24
    

    他の Android バージョンをビルドする場合は、Android 一般公開リポジトリから、ブランチ名を見つけてください。ブランチ名は、Android コードネーム、タグ、ビルド番号にマッピングされます。

  2. AVD システム イメージをビルドします。Android デバイスのシステム イメージをビルドする場合と同じプロセスです。たとえば、x86 32 ビットの AVD をビルドする場合のプロセスは、以下のとおりです。

    mkdir aosp-main; cd aosp-main
    source ./build/envsetup.sh
    lunch sdk_phone_x86
    make -j32
    

    x86 64 ビットの AVD をビルドする場合は、以下のように 64 ビット ターゲットを指定して lunch を実行します。

    lunch sdk_phone_x86_64
    
  3. Android Emulator で AVD システム イメージを実行します。

    emulator
    

エミュレータの実行について詳しくは、コマンドライン起動オプションを参照してください。図 2 は、AVD を実行している Android Emulator の例を示したものです。

AVD を実行している Android Emulator

図 2. AVD を実行している Android Emulator

他のユーザーが Android Studio で使用できるように AVD システム イメージを共有する

AVD システム イメージを他のユーザーと共有する手順は、以下のとおりです。他のユーザーは Android Studio で AVD システム イメージを使用して、アプリを開発、テストできます。

  1. 以下のように、sdk パッケージと sdk_repo パッケージを追加で作成します。

    Android 13 以降の場合は、emu_img_zip コマンドを使用します。

    $ make emu_img_zip
    

    これにより sdk-repo-linux-system-images-eng.[username]].zip ファイルが生成されます。

    Android 12 以前の場合は、sdk_repo コマンドを使用します。

    $ make -j32 sdk sdk_repo
    

    make sdk sdk_repo コマンドにより、aosp-main/out/host/linux-x86/sdk/sdk_phone_x86 の下に 2 つのファイルが作成されます。

    • sdk-repo-linux-system-images-eng.[username].zip
    • repo-sys-img.xml
  2. sdk-repo-linux-system-images-eng.[username].zip ファイルを、ユーザーがアクセス可能な場所にホストしたら、その URL を取得して、AVD システム イメージ URL として使用します。

  3. Android 12 以前では、repo-sys-img.xml を適切に編集します。

    • <sdk:url>AVD システム イメージ URL に更新します。
    • その他のファイルの更新については、sdk-sys-img-03.xsd を参照してください。
    • ユーザーがアクセス可能な場所に repo-sys-img.xml をホストしたら、その URL を取得して、カスタム更新サイトの URL として使用します。

カスタム AVD イメージを使用するには、SDK Manager で次の操作を行います。

  1. カスタム更新サイトの URL を、SDK 更新サイトとして追加します。

    これにより、カスタム AVD システム イメージが [システム イメージ] ページに追加されます。

  2. カスタム AVD システム イメージをダウンロードして選択し、AVD を作成します。

マルチディスプレイ サポートを追加する

Android 10 では、マルチディスプレイ(MD)を強化することで、自動モードやデスクトップ モードなどをはじめとする、より多くのユースケースをサポートします。Android Emulator は、マルチディスプレイ エミュレーションにも対応しています。そのため、実際のハードウェアを設定したりせずに、特定のマルチディスプレイ環境を作成できます。

AVD にマルチディスプレイ サポートを追加するには、次の変更を行うか、こちらの CL を取得します。

  • 以下の行を build/target/product/sdk_phone_x86.mk ファイルに追加して、マルチディスプレイ プロバイダをビルドに追加します。

    PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST := \
        system/lib/libemulator_multidisplay_jni.so \
        system/lib64/libemulator_multidisplay_jni.so \
        system/priv-app/MultiDisplayProvider/MultiDisplayProvider.apk \
    PRODUCT_PACKAGES += MultiDisplayProvider
    
  • 以下の行を device/generic/goldfish/data/etc/advancedFeatures.ini ファイルに追加して、マルチディスプレイ フィーチャー トグルを有効にします。

    MultiDisplay = on
    

エミュレータの最新の機能とリリース情報は、以下のソースから入手できます。