Android SDK の高速エミュレータ、使ってますか?

こんにちは、開発の小野知之です。

Android アプリを開発するときに必要となる Android SDK には、AVD (Android Virtual Device) という、Android 端末のエミュレータが含まれています。スマホやタブレットの実機が無くても、PCの大画面上で簡単に動作確認やデバッグができるし画面キャプチャも撮れて、とっても便利!

・・・な、はずなのですが。

使ったことのある方ならご存知と思いますが、これが非常に「重い」のです。モッサリしていて反応も悪く、長時間の開発ではストレスが溜まります。そんなわけで結局、エミュレータを使わず、実機をPCに接続してUSB デバッグで開発している方も多いのではないでしょうか。

ところが実は、サクサク軽快に動作する高速な Androidエミュレータが存在します。しかも Android SDK で誰でも簡単に入手して使えるのです。意外と知らない方も多いようなので、ここでご紹介することにしました。

※ このエントリーの情報は執筆時(2013年9月)現在の情報を元にしています。

高速エミュレータとは

現在販売されている Android 端末のほとんどが ARM アーキテクチャの CPU を採用しています。一方、開発に使う PC や Mac の CPU は Intel x86(以下、x86 と表記。x64 含む)アーキテクチャです。従って、標準の Android エミュレータは、x86 CPU が ARM CPU をエミュレートした環境上で、ARM版Android OS が動作しているわけです。

これが、SDK 標準の Android エミュレータが重い原因です。

ところで最近の Android SDK では、Intel x86 CPU 搭載端末をエミュレートする Android エミュレータが用意されています。このエミュレータでは、開発 PC(x86)の仮想化機能を利用した環境上で、x86版Android OS が動作します。これなら、ほぼ実CPUの速度で処理が行えるので、無駄なく高速に動作しそうですね。

これが今回紹介する、Intel Atom (x86) Androidエミュレータです。

Intel Atom (x86) Androidエミュレータ

Intel Atom (x86) Android エミュレータは、「Intel VT (Virtualization Technology)」に対応した Intel 製 CPU でないとインストールできません。AMD製 などの x86 互換 CPU は、Intel VT とは別の仮想化方式を使用しているため、使用できません。もしも、Intel VT 対応 CPU なのにインストールできない場合は、PC の BIOS 設定で、Intel VT が有効化されているかを確認してみてください。

 

Intel Atom (x86) Android エミュレータの入手とインストール

それでは早速、その高速な Intel Atom (x86) Android エミュレータ (以下、「Intel エミュレータ」) をダウンロードしてインストールしてみましょう。

ここでは、開発に Windows 7 の PC で Eclipse を使用している場合を想定して手順を解説しますが、Mac など他の開発環境でも設定の参考になると思います。

1.「Android SDK Manager」を起動します。

Eclipse のメニューバーの「ウィンドウ」メニューにあります。
Eclipse

2.必要なパッケージをダウンロードします。

SDK Manager
ダウンロードするのは、下記のファイルです。

Intel x86 Atom System Image

Android の各 SDK バージョンのツリー下にあります。2013年8月現在、「2.3.3」「4.0.3」「4.1.2」「4.2.2」「4.3」用が用意されているので、必要なバージョンをダウンロードします。ダウンロードすれば自動的にインストールされます。

Intel x86 Emulator Accelerator (HAXM)

Extras のツリー下にあるのでダウンロードします。こちらは、ダウンロードしただけではインストールされないので、このあと手動でインストールします。

3.「Intel HAXM (Hardware Accelerated Execution Manager)」をインストール

ダウンロードした「Intel HAXM (Hardware Accelerated Execution Manager)」を PC にインストールします。

まず、Android SDK のインストール先フォルダ下にある、下記のフォルダをエクスプローラなどで開いてください。

android-sdkextrasintelHardware_Accelerated_Execution_Manager

ここに「IntelHaxm.exe」というファイルがあるので実行します。インストールウィザードが実行されますが、特に設定の変更は必要なく、そのまま進めて大丈夫です。

Intel Hardware Accelerated Execution Manager Setup Wizard dialog

これで、Intel エミュレータを使うための準備は完了です。

Intelエミュレータの使い方

では早速、Intel エミュレータを使ってみましょう。

使用するには、Intel x86 CPU をエミュレートする AVD を下記の手順で作成します。

1.「Android Virtual Device Manager」を起動します。

Eclipse

Eclipse のメニューバーの「ウィンドウ」メニューにあります。

2.AVD を作成します。

AVD Manager
AVD Manager の右上にある「新規」ボタンを押し、新しい AVD の設定ウィンドウを開きます。もちろん、既存の AVD を「編集」ボタンを押して変更しても構いません。

3.必要な設定をします。

Create New AVD
「Create new Android Virtual Device (AVD)」ウィンドウで、下記の箇所を変更してください。その他の設定は任意で構いません。

Target 「Intel x86 Atom System Image」をインストールしてあるAndroid バージョンを選びます。インストールされていないバージョンを選んだ場合、次の「CPU/ABI」で「Intel Atom (x86)」が選択できません。
CPU/ABI Targetを正しく選択していれば、ここの選択肢に「Intel Atom (x86)」が追加されるので、選択します。
Memory Options この「RAM」の値ですが、Intel エミュレータの場合は必ず 768 以下の値にする必要があります。1024 などを指定すると、AVD 起動時にエラーになってしまいます。
Use Host GPU これを ON にすると画面描画が更に高速化されます。
ただし、Target が Android 2.3.3 のときは、ON にすると画面が表示されません(2013年8月現在)ので、OFFにしてください。

あとは、いままでの AVD と同じように起動し、開発中のアプリをこの AVD 上で実行するだけです。

Emulator_About
エミュレータ上で「システム設定」の「端末情報」を見れば、右の画像のようにこれが Intel x86 のエミュレータであることが確認できます。
この AVD なら、非常に軽快にサクサクと動作します。
また起動時間も非常に短く、ほとんど待たされません。
これならストレスなく使えて、開発効率もアップすることでしょう。

補足: ネイティブコードを使用する場合

ところで最後に一つ、注意点があります。

この Intel エミュレータは、通常の Java のみで記述したアプリを実行するだけなら、ARM 環境用のエミュレータと何も変わりがありません。
ところが、C/C++ で書いて NDK でコンパイルしたネイティブ・バイナリを含んでいるアプリは、そうはいきません。Intel CPU のエミュレータなので、ARM 用にコンパイルしたネイティブ・バイナリは動作しないのです。

とはいえ、これは単に Intel CPU 対応にコンパイルするだけで解決します。下記のように、android.mk の APP_ABI の指定を編集(ない場合は追加)してからコンパイルしてみてください。

intel x86 専用 APP_ABI := x86
ARM(v7-A) 及び Intel x86 両対応 APP_ABI := armeabi-v7a x86
ARM(v7-A)、ARM(v5TE)、Intel x86 、MIPS 全対応 APP_ABI := all

開発中は、上記のいずれかを指定してコンパイルしておけば良いでしょう。
ただし、複数 CPU 対応 (fat binary) にすると、その分アプリのパッケージ(apk)サイズが大きくなります。アプリの公開時には、サポートする CPU だけを定義してコンパイルするよう、注意してください。

また、ARM CPU と Intel CPU は、動作が完全に同じというわけではありません。特にネイティブバイナリを含むアプリの場合は、Intelエミュレータは「開発途中の効率アップ手段の一つ」として用い、最終的には ARM CPU 搭載の実機でしっかりデバッグするようにしてください。

タグ , , | 2020/06/16 更新 |