The Android Developer Challenge is back! Submit your idea before December 2.

Android Emulator のハードウェア アクセラレーションを設定する

Android Emulator はハードウェア アクセラレーション機能を使用して、パフォーマンスを大幅に向上させることができます。このページでは、グラフィック アクセラレーションと仮想マシン(VM)アクセラレーションを設定して、エミュレータから高いパフォーマンスを引き出す方法について説明します。

グラフィック アクセラレーションを設定する

グラフィック アクセラレーションでは、コンピュータのハードウェア(通常は GPU)を使用して、画面のレンダリングを高速化します。Android デバイスは、OpenGL for Embedded Systems(OpenGL ES または GLES)を使用して、画面上に 2D グラフィックと 3D グラフィックの両方をレンダリングします。

AVD Manager で Android 仮想デバイス(AVD)を作成するとき、エミュレータでハードウェアかソフトウェアのどちらを使用して AVD の GPU をエミュレートするかを指定できます。通常はより高速であるハードウェア アクセラレーションをおすすめします。ただし、コンピュータでエミュレータと互換性のないグラフィック ドライバを使用している場合は、ソフトウェア アクセラレーションを使用する必要があります。

デフォルトでは、エミュレータは、コンピュータの設定に基づいて、ハードウェアかソフトウェアのいずれのグラフィック アクセラレーションを使用するかを決定します。GPU ハードウェアとドライバに互換性がある場合、エミュレータは GPU を使用します。互換性がない場合、エミュレータはソフトウェア アクセラレーション(つまり、コンピュータの CPU)を使用して GPU 処理をシミュレートします。

コマンドラインからエミュレータを起動する場合、その仮想デバイス インスタンスに対する AVD のグラフィック アクセラレーション設定をオーバーライドすることもできます。

要件

グラフィック アクセラレーションを使用するには、開発環境で次の要件を満たす必要があります。

  • SDK Tools: 最新リリースが推奨されます(バージョン 17 以降)
  • SDK Platform: 最新リリースが推奨されます(Android 4.0.3 リビジョン 3 以降)

AVD Manager でグラフィック アクセラレーションを設定する

AVD のグラフィック アクセラレーションを設定するには、次の手順を行います。

  1. AVD Manager を開きます。
  2. 新しい AVD を作成するか、既存の AVD を編集します
  3. [Verify Configuration] ページで、[Emulated Performance] セクションを見つけます。
  4. [Graphics:] オプションの値を選択します。
  5. [Finish] をクリックします。

コマンドラインからグラフィック アクセラレーションを設定する

コマンドラインから AVD を実行するときにグラフィック アクセラレーション タイプを指定するには、次の例に示すように、-gpu オプションを指定します。

    emulator -avd avd_name -gpu mode [{-option [value]} ... ]
    

mode は、次のオプションのいずれかの値に設定できます。

  • auto: エミュレータは、コンピュータの設定に基づいて、ハードウェアかソフトウェアのグラフィック アクセラレーションを選択します。
  • host: ハードウェア アクセラレーションにコンピュータの GPU を使用します。これは通常、エミュレータで最高のグラフィック品質とパフォーマンスを実現するオプションです。ただし、グラフィック ドライバで OpenGL のレンダリングに問題が発生する場合は、swiftshader_indirect または angle_indirect オプションを使用しなければならないことがあります。
  • swiftshader_indirect: クイックブートと互換性のあるバリアントの SwiftShader を使用して、ソフトウェア アクセラレーションでグラフィックをレンダリングします。このオプションは、コンピュータでハードウェア アクセラレーションを使用できない場合、host モードの代替として使用できる優れたオプションです。
  • angle_indirect:(Windows のみ)クイックブートと互換性のあるバリアントの ANGLE Direct3D を使用して、ソフトウェア アクセラレーションでグラフィックをレンダリングします。このオプションは、コンピュータでハードウェア アクセラレーションを使用できない場合、host モードの代替として使用できる優れたオプションです。ANGLE は OpenGL の代わりに Microsoft DirectX を使用するため、ほとんどの場合、ANGLE のパフォーマンスは host モードを使用した場合と同様です。Windows では、ほとんどのケースで Microsoft DirectX ドライバの方が OpenGL ドライバよりも問題が発生しません。このオプションは Direct3D 11 を使用するため、Windows 10、Windows 8.1、または Windows 7 Platform Update をインストールした Windows 7 SP1 が必要です。
  • guest: ゲスト側のソフトウェア レンダリングを使用します。このオプションの場合、エミュレータのグラフィック品質とパフォーマンスが最も低くなります。

次の mode オプションのサポートは終了しています。

  • swiftshader: バージョン 27.0.2 でサポートが終了しました。代わりに swiftshader_indirect を使用してください。
  • angle: バージョン 27.0.2 でサポートが終了しました。代わりに angle_indirect を使用してください(Windows のみ)。
  • mesa: バージョン 25.3 でサポートが終了しました。代わりに swiftshader_indirect を使用してください。

Android UI に対して Skia レンダリングを有効にする

API レベル 27 以降のイメージを使用する場合、エミュレータで Skia を使用して Android UI をレンダリングできます。これにより、エミュレータでよりスムーズかつ効率的にグラフィックがレンダリングされます。

Skia レンダリングを有効にするには、adb シェルで次のコマンドを使用します。

su
    setprop debug.hwui.renderer skiagl
    stop
    start
    

VM アクセラレーションを設定する

VM アクセラレーションは、コンピュータのプロセッサを使用して、エミュレータの実行速度を大幅に向上させます。ハイパーバイザと呼ばれるツールは、コンピュータのプロセッサが提供する仮想化拡張機能を使用してこの操作を管理します。このセクションでは、VM アクセラレーションを使用するための要件の概要と、各オペレーティング システムで VM アクセラレーションを設定する方法について説明します。

全般的な要件

エミュレータで VM アクセラレーションを使用するには、このセクションに記載されている全般的な要件を満たすコンピュータが必要です。コンピュータは、それ以外にもオペレーティング システムに固有の要件も満たしている必要があります。

開発環境の要件

VM アクセラレーションを使用するには、開発環境で次の要件を満たす必要があります。

  • SDK Tools: バージョン 17 以降。推奨バージョンは 26.1.1 以降
  • x86 ベースのシステム イメージを使用する AVD。Android 2.3.3(API レベル 10)以降で利用可能

仮想化拡張機能の要件

開発環境の要件に加えて、コンピュータのプロセッサは、次の仮想化拡張テクノロジーのいずれかをサポートする必要があります。

  • Intel Virtualization Technology(VT、VT-x、vmx)拡張機能
  • AMD Virtualization(AMD-V、SVM)拡張機能

最新のプロセッサのほとんどは、上記の仮想化拡張機能をサポートしています。プロセッサが拡張機能をサポートしているかどうかわからない場合は、メーカーのサイトでプロセッサの仕様をご確認ください。プロセッサが上記拡張機能のいずれもサポートしていない場合は、VM アクセラレーションを使用できません。

制限

VM アクセラレーションには次の制限があります。

  • VirtualBox、VMWare、Docker でホストされている VM など、異なる VM 内では、VM アクセラレーションを使用するエミュレータを実行することはできません。VM アクセラレーションを使用するエミュレータは、ホスト コンピュータで直接実行する必要があります。
  • 一部のオペレーティング システムとハイパーバイザでは、VM アクセラレーションを使用するエミュレータと、別の仮想化テクノロジーを使用するソフトウェアを同時に実行することはできません。たとえば、VirtualBox、VMWare、Docker では現在異なる仮想化テクノロジーが使用されており、これらのソフトウェアと、アクセラレーションを使用するエミュレータを同時に実行することはできません。

ハイパーバイザについて

VM アクセラレーションにはハイパーバイザが必要です。

ハイパーバイザと VM アクセラレーションを使用できない場合、エミュレータはホスト コンピュータのアーキテクチャに適合するように、VM ブロックのマシンコードをブロックごとに変換する必要があります。この処理は非常に遅くなる可能性があります。ハイパーバイザを使用すると、VM とホスト コンピュータのアーキテクチャが一致するため、エミュレータはハイパーバイザを使用してホスト プロセッサでコードを直接実行できます。この改善により、エミュレータの速度とパフォーマンスの両方が大幅に向上します。

最適なハイパーバイザは、コンピュータのオペレーティング システムと設定によって異なります。詳細については、次のセクションのいずれかをご覧ください。

ハイパーバイザがインストールされているかどうかを確認する

エミュレータの -accel-check コマンドライン オプションを使用して、ハイパーバイザが現在コンピュータにインストールされているかどうかを確認できます。

次の例は、エミュレータの accel-check オプションの使用方法を示しています。各例において、sdk は Android SDK の場所を示します。

Windows:

    c:\Users\janedoe\AppData\Local\Android> sdk\emulator\emulator -accel-check
    accel:
    0
    HAXM version 7.3.2 (4) is installed and usable.
    accel
    

macOS:

    janedoe:~/Android$ ./sdk/emulator/emulator -accel-check
    accel:
    0
    HAXM version 7.3.2 (4) is installed and usable.
    accel
    

Linux:

    janedoe-macbookpro:Android janedoe$ ./sdk/emulator/emulator -accel-check
    accel:
    0
    KVM (version 12) is installed and usable.
    

Windows で VM アクセラレーションを設定する

Windows 上の VM アクセラレーションでは、Intel Hardware Accelerated Execution Manager(HAXM)か Windows Hypervisor Platform(WHPX)のいずれかのハイパーバイザを使用できます。

Windows でハイパーバイザを選択する

次の条件を使用して、使用するハイパーバイザを決定します。

条件 ハイパーバイザ
Intel プロセッサ搭載されており、Android Emulator と同時に Hyper-V を実行する必要がない Intel HAXM を使用します。
Intel プロセッサ搭載されており、Android Emulator と同時に Hyper-V を実行する必要がある WHPX を使用します。
AMD プロセッサが搭載されている。 WHPX を使用します。

Windows で Intel HAXM を使用する VM アクセラレーションを設定する

Intel HAXM をインストールして使用するには、コンピュータが次の要件を満たしている必要があります。

  • Virtualization Technology(VT-x)、Intel EM64T(Intel 64)機能、Execute Disable(XD)ビット機能が有効な Intel プロセッサ
  • 64 ビット Windows 10、Windows 8、または Windows 7(または 64 ビットプロセッサを使用する 32 ビット バージョンのオペレーティング システム)
  • Windows 10 または 8 で Intel HAXM を使用するには、Windows のコントロール パネルで Hyper-V をオフにする必要があります。 注: 特定のソフトウェアをインストールすると、Hyper-V が再びオンになる場合があります。可能な限り、Android Studio は Hyper-V が再度有効にされたかどうかを検出しようとし、Hyper-V を再びオフにできるオプションを表示します。

Intel HAXM ドライバをインストールするには、次の手順を行います。

  1. SDK Manager を開きます。
  2. [SDK Update Sites] タブをクリックし、[Intel HAXM] を選択します。
  3. [OK] をクリックします。
  4. ダウンロードが完了したら、インストーラを実行します。通常、インストーラは次の場所にあります。sdk\extras\intel\Hardware_Accelerated_Execution_Manager\intelhaxm-android.exe
  5. ウィザードを使用してインストールを完了します。
  6. Intel HAXM のインストール後、[Command Prompt] ウィンドウで次のコマンドを入力して、仮想化ドライバが正しく動作していることを確認します。

    sc query intelhaxm
        

    次の情報を含むステータス メッセージが表示されます。

    SERVICE_NAME: intelhaxm
               ...
               STATE              : 4  RUNNING
               ...
        

詳細については、Windows での Intel HAXM のインストール手順をご覧ください。

インストーラを再度実行することにより、Intel HAXM カーネル拡張機能で使用可能なメモリ量を調整できます。

Intel HAXM をアンインストールするには、インストーラまたは Windows コントロール パネルを使用します。Intel HAXM をアンインストールする場合は、現在実行中の x86 エミュレータをすべてシャットダウンします。

Windows Hypervisor Platform を使用する VM アクセラレーションを設定する

WHPX を有効にするには、コンピュータが次の要件を満たしている必要があります。

  • Intel プロセッサ: Virtualization Technology(VT-x)、Extended Page Tables(EPT)、Unrestricted Guest(UG)機能のサポート。コンピュータ BIOS 設定で VT-x を有効にする必要があります。
  • AMD プロセッサ: MD Ryzen プロセッサが推奨されます。コンピュータの BIOS 設定で仮想化または SVM を有効にする必要があります。
  • Android Studio 3.2 Beta 1 以降(developer.android.com からダウンロード)
  • Android Emulator バージョン 27.3.8 以降(SDK Manager を使用してダウンロード)
  • April 2018 Update 以降の更新プログラムを適用した Windows 10

Windows に WHPX をインストールするには、次の手順を行います。

  1. Windows デスクトップで、Windows アイコンを右クリックし、[アプリと機能] を選択します。
  2. [関連設定] で、[プログラムと機能] をクリックします。
  3. [Windows の機能の有効化または無効化] をクリックします。
  4. [Windows Hypervisor Platform] を選択します。

  5. [OK] をクリックします。

  6. インストールが完了したら、コンピュータを再起動します。

macOS で VM アクセラレーションを設定する

Mac OS X v10.10 Yosemite 以降では、Android Emulator は組み込みの Hypervisor.Framework をデフォルトで使用し、Framework.Framework の初期化に失敗した場合は Intel HAXM を使用するようフォールバックします。

Hypervisor.Framework を使用できない場合、macOS で VM アクセラレーションを使用するには、IntelHAXM カーネル拡張機能をインストールする必要があります。

Intel HAXM カーネル拡張機能をインストールするには、次の手順を行います。

  1. SDK Manager を開きます。
  2. [SDK Update Sites] タブをクリックし、[Intel HAXM] を選択します。
  3. [OK] をクリックします。
  4. ダウンロードが完了したら、インストーラを実行します。通常、インストーラは次の場所にあります。sdk/extras/intel/Hardware_Accelerated_ExecutionManager/IntelHAXMversion.dmg
  5. 画面に表示される手順でインストールを実行します。
  6. インストールが完了したら、ターミナル ウィンドウを開き、次のコマンドを実行して、新しいカーネル拡張機能が正しく動作していることを確認します。

        kextstat | grep intel
        

    次のように拡張名を含むステータス メッセージが表示されます。このメッセージは、カーネル拡張機能がロードされていることを示しています。

    com.intel.kext.intelhaxm
        

詳細については、Intel HAXM のインストール手順をご覧ください。

インストーラを再度実行することにより、Intel HAXM カーネル拡張機能で使用可能なメモリ量を調整できます。

Intel HAXM カーネル拡張機能の使用を停止するには、Intel HAXM カーネル拡張機能をアンインストールします。アンインストールするには、現在実行中の x86 エミュレータをシャットダウンしてから、ターミナル ウィンドウで次のコマンドを実行します。

    sudo /System/Library/Extensions/intelhaxm.kext/Contents/Resources/uninstall.sh
    

Linux で VM アクセラレーションを設定する

Linux ベースのシステムは、KVM ソフトウェア パッケージを介して VM アクセラレーションをサポートしています。 Linux システムへの KVM インストールの指示に沿って、KVM が有効になっていることを確認します。Ubuntu システムについては、Ubuntu KVM のインストールをご覧ください。

要件

KVM を実行するには、特定のユーザー権限が必要です。KVM のインストール手順で指定されている十分な権限があることを確認してください。

Linux で VM アクセラレーションを使用するには、コンピュータが次の要件も満たしている必要があります。

  • Intel プロセッサの場合: Virtualization Technology(VT-x)、Intel EM64T(Intel 64)機能、Execute Disable(XD)ビット機能をサポートしている
  • AMD プロセッサの場合: AMD Virtualization(AMD-V)のサポートしている

KVM が現在 Linux にインストールされているかどうかを確認する

エミュレータの -accel-check コマンドライン オプションを使用して、KVM がインストールされているかどうかを確認できます。または、kvm-ok コマンドを含む cpu-checker パッケージをインストールできます。

次の例では、kvm-ok コマンドの使用方法を示します。

$ sudo apt-get install cpu-checker
    $ egrep -c '(vmx|svm)' /proc/cpuinfo
    12
    $ kvm-ok
    INFO: /dev/kvm exists
    KVM acceleration can be used
    

Linux に KVM をインストールする

次のコマンドを使用して、KVM をインストールします。

    sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils ia32-libs-multiarch