【Android開発】Ubuntuで高速なAndroidエミュレータを使ってみる【Linux】

僕がAndroidアプリ開発を勉強し初めの頃に使ったAndroidのエミュレータは非常に遅く、あまり使い物にならなかったのでいつも実機で開発していたのだが、どうやら最近は高速に動くAndroidエミュレータをIntelが提供してくれているようなので、早速試してみることにした。
手順はほとんどIntelの公式のドキュメントに書いてあることを参考にして行なっているので、英語が分かる人はこの記事を見るよりもそちらを参考にした方が良いかもしれない。

今回の実行環境

Ubuntu 12.04 32bit
  • ホストOSは64bit推奨であるが、必須ではない。
  • VMのRAMを2GB以上にする場合には、64bitでないと実行できないため、32bitではVMのRAMは最大2GBに制限される。
というようなことが書いてあるため、要するにAndroidエミュレータのRAMが2GBに制限されても良いならば、32bit環境でも実行できるようだ。
しかし、CPUが対応していないと実行できないため、それはインストールする際に確認する。
また、必ず動作する保証は無く、何か問題が起きる可能性は十分にあるため、インストールは自己責任で。

システムイメージのダウンロード

まず初めに、高速なエミュレータを利用するためのシステムイメージをIntelのサイトからダウンロードする。

下記のURLにアクセスし、「TOOLS & DOWNLOADS」というタブをクリックする。
http://software.intel.com/en-us/android

このような一覧が出てくるので、「x86 Emulator System Image」と後ろについてるものの中から自分が欲しいAndroidバージョンを選択する。
今回は現在の最新バージョンであるAndroid 4.3を選択する。


すると、このような画面が表示されるので、zipファイルのリンクの方をダウンロードし、解凍する。


解凍すると、「x86」という名前のフォルダが出てくるので、Android SDKがインストールされているフォルダの「system-images」フォルダの中の対応するAPIバージョンのフォルダの中に入れる。
今回はAndroid 4.3なので「android-18」フォルダの中に入れる。フォルダがなければ自分で作成する。
$ <Android SDKのディレクトリ>/system-images/android-18
ちなみに下記の記事の下の方に追記で書いてある「イメージの取得について」によると、この作業はAndroid SDK Managerを使って行うこともできるらしい(試してない)。
【番外編】Androidの爆速エミュレータ環境を構築する

「Intel® HAXM」のインストール

次に「Intel Hardware Accelerated Execution Manager(Intel® HAXM)」というものをインストールする。
http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager/
上記URLにアクセスすると分かるように、Linuxの項目には「Ubuntu (64-bit)」としか書かれておらず、基本的に64bit推奨であることがわかる。
また、WindowsとMacにはインストーラが用意されており、Linuxにはインストーラは用意されていないが、基本的にドキュメントに通りに行うことで問題なくインストールすることが出来る。
Installation Guide & System Requirements - Linux 

・KVMのインストール

KVMをインストールするには、プロセッサがハードウェア仮想化をサポートしている必要があるため、下記コマンドでそれを確認する。
$ egrep -c '(vmx|svm)' /proc/cpuinfo
このコマンドで出力された結果が0である場合は、ハードウェア仮想化をサポートしていない。
自分の環境では8が出力されたため、サポートされていることがわかった。

次に、「CPU Checker」をインストールする。
$ sudo apt-get install cpu-checker
そして下記コマンドを入力することにより、CPUがKVMをサポートしているかどうかを確認することができる。
$ kvm-ok
このような出力結果が表示されていれば、KVMをサポートしていることがわかる。
INFO: Your CPU supports KVM extensions
INFO: /dev/kvm exists
KVM acceleration can be used
このような出力結果が表示された場合は、BIOS設定から「Virtualization Technology (VT)」を有効にする必要がある(らしい)。
INFO: KVM is disabled by your BIOS
HINT: Enter your BIOS setup and enable Virtualization Technology (VT),
and then hard poweroff/poweron your system
KVM acceleration can NOT be used

KVMがサポートされていることがわかったら、次にKVMをインストールする。
インストール中に「Postfix Configuration」というものが表示されたら、「No Configuration」を選択し、無視しても良いらしい。
$ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
問題なくインストールが終わったら、自分のユーザーアカウント名を kvm と libvirtd のグループに追加する。
$ sudo adduser 自分のユーザーアカウント名 kvm
$ sudo adduser 自分のユーザーアカウント名 libvirtd
ここまで問題なく作業が終われば、KVMのインストールは終わり。
インストールが成功しているかどうかは、下記のコマンドで確認することができる。
$ sudo virsh -c qemu:///system list
このような結果が表示されれば、インストールは成功している。
Id Name                 State
----------------------------------

Androidエミュレータの起動

Androidエミュレータ(AVD)の起動方法は、ターミナルから起動する方法と、Eclipseを利用して起動する方法がある。
ターミナルから起動する場合は毎回コマンドを入力して起動し、Eclipseから起動する場合も「Run Configuration」から起動しなければならないため、少しだけ設定を追加する必要がある。
どちらも起動したら結局一緒だが、GoogleはEclipseから起動する方法を推奨しているので、そちらで起動した方が良いかもしれない。

・ターミナルからAVDを起動する

ターミナルから起動する場合は、x86ベースのAVDを予め作成しておく必要がある。

ターミナルからのAVDの作成は、まず下記のコマンドでターゲットのIDを確認する。
$ <Android SDKのディレクトリ>/tools/android list targets
そして下記のコマンドで作成したいターゲットのIDやオプションを入力すると、作成することができるが、すべて説明していると長くなってしまうので、今回は細かい説明は省略する。
$ <Android SDKのディレクトリ>/tools/android create avd -n <name> -t <targetID> [-<option> <value>] ...
細かい説明は下記のGoogleが用意しているドキュメントを参照すると良いだろう。
Managing AVDs from the Command Line
AVDの起動は下記のコマンドで行うことが出来る。
$ <Android SDKのディレクトリ>/tools/emulator-x86 -avd AVDの名前 -qemu -m 2047 -enable-kvm
AVDの名前の部分には、予め作成されているAVDの名前を入力する。
2047と書かれている部分は仮想メモリの値だが、最初に記述したように、32bit OSでは2GBに制限されているため、最大で1900くらいしか割り当てることしか出来ない。
公式のドキュメントにも書いてあるように、ここには実メモリの3分の1くらいの値を入力しておくと良いだろう。
実際に起動してみるとこんな感じになる。


下記のようなエラーで「ライブラリが見つからないため、代わりにソフトウェアレンダラーを使ってエミュレーションしている」というようなことが書いてあるが、 色々調べて試してみても解決しなかったため、とりあえず無視することにした。
emulator: ERROR: Could not load OpenGLES emulation library: libOpenglRender.so: cannot open shared object file: No such file or directory
emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.
しかし、実際に動かしてみるとわかるが、通常のエミュレータよりも動作がかなり速くなっている。

・EclipseからAVDを起動する

EclipseからAVDを起動するには、AVD Managerからx86ベースのAVDを作成する必要があるので、こんな感じで作成する。


作成できたら、次に Run > RunConfigurations... から Run Configurations を開く。


ダイアログを開いたら、左の「Android Application」を右クリックして「New」を選択する。


「Android」タブから「Browse...」ボタンをクリックし、起動するプロジェクトを選択する。


「Target」タブから、最初に作成したx86ベースのAVDにチェックを入れ、「Additional Emulator Command Line Options」の欄に
-qemu -m 2047 -enable-kvm
と入力する。
最後に「Apply」ボタンを押して設定を適用し、「Run」ボタンからAVDを起動する。


起動すると、選択したAndroidプロジェクトが自動的に起動される。
コマンド入力で起動したときと同じように、かなり高速にAVDが起動された。


このように、公式のドキュメント通りにやると「Run Configuration」から起動しなければならないが、試しにAVD Managerから起動してみると同じように高速なAndroidエミュレータを起動することが出来たので、AVD Managerからでも起動できないわけではないようだ。

まとめ

僕がAndroidアプリ開発を勉強し初めの頃に比べると、今回試したこのAndroidエミュレータはかなり高速で、十分使えるようになっていた。
これならば、Androidエミュレータでも快適に開発することが出来るだろう。



コメント

人気の投稿

[Qiita] Google Playのクローズドベータ版テストでメールアドレスを指定して公開する

[Qiita] Androidの実機でPCのlocalhostに接続したり、Webページの要素を検証する

[Qiita] AppCompatのAlertDialogのテーマカラーを変える