Intel HAXMを使ってMacのAndroidエミュレーターを加速させる方法


Androidの公式開発環境というと”Eclipse”なのですが、公式SDKに付属しているエミュレーターが基本的に

クソ遅い!

というのは有名な話し。
ゼスチャーを含むUIの改良をするころからエミュレーターを使うのを止めてしまっていましたが、備忘録を兼ねて少し記述しておきます。

[Androidのエミュレーターがクソ遅い原因]
・CPUの命令セットが違う(ARM)のまで再現しているため
・シングルスレッドしか使っていない
・画面描画にパソコンのGPUを使っていない

遅くなる要素満点です。・・・ですが、高速化する方法がありますので紹介します。

1)パソコンを買い換える
そもそもCPUパワーで表示しているのだから、パソコンを買い換えてしまう・・・これは地味に有効です(笑)シングルスレッド性能重視で選べば良いかと思います。(エミュレーターが2CPU以上を使わないので・・・)
Core2系から第3/4世代のCore iプロセッサ(ivy BridgeやHaswell)なら十分に速いはず・・・ですが、お金がすごくかかるのが玉に瑕。高性能な15inch MacBook Pro Retinaモデルが欲しくなりますね。

2)GPUを使ってレンダリングする。
普段はCPUパワーで画面レンダリングを表示しているものをパソコンのGPUにさせることができます。
やりかたはカンタン。Edit Android Virtual Deviceの画面の”Emulation Options”で”Use Host GPU”にチェックを入れるだけ。

20130923_1

画面のスクロールはスムーズになります(特にAndroid4.1以降)。ただし、画面が崩れることがあるので常にONにできるわけでは無さそうです。

3)Intel HAXMをインストールして、x86用のイメージを使う
こちらが本命。パソコンと同じx86プロセッサ用のイメージを利用するので、arm版みたいなCPU命令のエミュレート無しでサクサク動作します。
そのためにはHAXMこと、Intel® Hardware Accelerated Execution Managerをインストールする必要があります。

1.intel HAXMとx86用のシステムイメージの入手
入手は、ADTから行います。ADTのWindowから、Android SDK Managerを表示させます。

20130923_2
ここでAndroid各バージョンの配下にある”Intel x86 Atom System Image”を選択します。ただし、x86用のシステムイメージは全てのAndroidバージョン用に揃っているわけではありません。2.3.3と4.0.3以降になります。

20130923_3
さらに画面下部にある”Extras”を展開して、”Intel x86 Emulator Accelerator (HAXM)”を忘れずにチェックしておきましょう。

2.intel HAXMをインストール
1でダウンロードが無事終了すると、”/sdk/extras/intel/Hardware_Accelerated_Execution_Manager”配下にIntelHAXM.dmgというパッケージが格納されているので、これをダブルクリックしてインストールします。

20130923_4

メモリサイズは1GBもあれば十分でしょう。もし仮に設定を間違えたとしても、もう一度インストール作業をすればメモリサイズを変更することができます。

3.Android Virtual Device Managerで設定
1と2の設定が終わっていれば、仮想Android機の設定画面でx86版のシステムイメージが設定できるようになっているはずです。

20130923_5

CPU/ABIはIntel Atom(x86)を選択。
Emulation Optionsの”User Host GPU”は忘れずに。画面のスムース度が一段上がります(描画が崩れる場合はOFF)

4.エミュレーターを起動

20130923_6

Intel HAXMが正しく設定されている状態で、x86のシステムイメージを起動すると、スタート時のログに

“HAX is working and emulator runs in fast girt mode”

と表示されます。これが表示されない場合は、Intel HAXMのインストール状態を確認してみて下さい。

20130923_7

これでヌルヌルのエミュレーターが動作します。
楽しいエミュレーター生活を!

※注意事項:文字通りx86のCPU命令を使っての動作をします。SnapdragonやTegraといったスマートフォンが使用しているCPUとは異なるため、Javaプログラムは大丈夫ですがNDKで生成したプログラムは挙動が異なったり、(バイナリが存在しなくて)動作しない場合があります。

ちなみにRYOTAは元々Windows人間だったこともあり、Parallels上に構築したWindows7+Eclipseで開発をしているためにこの方法の出番がなく・・・(うぁ、石を投げないで!)

じゃあね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です