Android用高速エミュレータBlueStacksを使用して開発効率を上げる

#BlueStacksとは
BlueStacksはAndroid用の高速エミュレータです。
Androidゲームを開発する際には、記述したコードが意図したとおりに動くか確認をするためにEclipse上からアプリケーションを実行することがよくあるでしょう。アプリケーション実行時に標準のエミュレータを選ぶと、起動まで非常に時間がかかります。動作確認の度に毎回何分も待たされてしまうのは非常に非効率です。実機を購入してデバッグすれば標準エミュレータよりも高速で動作するのですが、それなりの値段がするので誰でもできる方法ではありません。そこで便利なのがBlueStacksです。BlueStacksを使うことでコードの動作確認を素早く行うことができます。


#BlueStacksの使い方
<a href="http://www.bluestacks.com/" target="_blank">BlueStacksの公式サイト</a>からダウンロードしてインストールをします。

インストールしたBlueStacksを起動すると
![blue.png](https://qiita-image-store.s3.amazonaws.com/0/92839/504bbc65-9c16-aed6-3d1c-4bc712dc7da0.png)


初期化画面が表示されます。これは少し時間がかかります。
![blue2.png](https://qiita-image-store.s3.amazonaws.com/0/92839/c0326feb-f2fd-09c2-c940-b7e839b767ef.png)


初期化が完了して以下のようなホーム画面が表示されたら起動完了です
![blue3.png](https://qiita-image-store.s3.amazonaws.com/0/92839/d5508685-e0fa-cd15-a8b0-009d171bea3c.png)


誤って画面内のアプリをクリックしてしまった場合、以下のような初期設定の画面が表示されてしまいます。デバッグで使う分にはこの初期設定は必要ないので、バックキーをクリックしてホーム画面に戻って問題ありません。
![blue4.png](https://qiita-image-store.s3.amazonaws.com/0/92839/742393fd-8e27-02ac-44f9-dd62c00d19d6.png)


BlueStacksを起動した状態でEclipse上からAndroidアプリケーションの実行を行うと、デバイス選択ウィンドウにBlueStacksの環境が表示されます。emulator-xxxxの数字部分は動的に割り振られるようなので、他の実行状況によって値が変動します。
選択してOKをクリックしてください。
![emulator.png](https://qiita-image-store.s3.amazonaws.com/0/92839/c6b3cdfd-9774-5b4a-b1a6-fffde560d66e.png)

これでBlueStacksの画面内でandroidアプリケーションが起動します。後は普通に操作するだけです。一度BlueStacksを起動してしまえばアプリの実行にかかる時間は本当に短時間で済みます。
![screen.png](https://qiita-image-store.s3.amazonaws.com/0/92839/521fa5c7-917c-cbf9-61bc-14f8449433fa.png)

なお、Eclipseを起動した後にBlueStacksを起動すると、BlueStacksが認識されずにデバイス選択画面で何も表示されないことがあります。必ずBlueStacksを起動した後にEclipseを起動するようにしてください。


#BlueStacksのデメリット
とても便利なBlueStacksですが、当然のことながらそれなりのデメリットもあります。以下が私が実際に使用した時に感じたデメリットです。私の環境依存問題かもしれませんので、実際に使って該当事象が発生しない場合はこの内容は無視してください。
###LogCatにログが表示されないことがある。
動作確認中のアプリがエラーで強制終了した場合、LogCatの画面上にそのエラーに関する情報が表示されます。それを基にしてエラー行や原因を特定します。
例えば、アプリが強制終了した後に以下のようなエラーがLogCatに出力されると、Testというクラスの8行目にて0で除算を行ったことが原因でエラーが発生したとすぐに分かります。
![error.png](https://qiita-image-store.s3.amazonaws.com/0/92839/21439cfe-7fbb-f1d9-dda7-6587b9c93410.png)
実機を使ってデバッグしている場合は正常にログが出力されるのですが、BlueStacksを使用しているとログが出力されないことがあるようなのです。しばらく時間を置いて見てみると出力されていたということもあるので、単にメモリ負荷などが原因で処理が追いつかなかっただけの可能性もありますが。

###コード内容によっては実機と違う挙動をすることがある。
アプリ内にAdMobのサンプルバナーを設置したところ、LogCatに以下のログが延々と出力され続ける事象が発生しました。
```
PgaUtilsParamSize: unsuported param GL_CULL_FACE, assuming size 1
PgaUtilsParamSize: unsuported param GL_DITHER, assuming size 1
```
1という値が設定されるのを期待されているGL_CULL_FACEやGL_DITHERというパラメータに、それ以外の値が設定されたという内容でしょうか。実機上で実行した際には出力されませんでした。アプリ自体は正常に動くのですが、このメッセージが延々とLogCatに出力され続けるためログがあっという間に流れてしまいます。直接的な被害はログの確認ができなくなるというだけですが、やはり実機と何らかの挙動の違いがあるという点には気をつけておかなければなりません。

###メモリ使用量が多くなる。
都合上Eclipseなどの開発環境とBlueStacksの両方を起動することになるため、当然のことながら多くのメモリが使用されます。私の環境はCore i3-2120でメモリ4GBという環境ですが、アプリを実行した際にGCエラーで止まってしまうことがたまにあります。メモリの少ない開発環境だと却って実行までに時間がかかってしまうかもしれません。


#BlueStacksの使用時にはログ出力とメモリ使用量に注意する
実装したコードが意図したロジック通りに動くかという動作確認レベルの使用目的であれば、BlueStacksの使用は特に問題ないでしょう。ですが、エラーが発生してその原因を突き止めたいというデバッグレベルの使用目的だとやや不安があります。だいたいの当たりを付けて複数のブレークポイントを仕掛け、徐々に切り分けていくという方法ならデバッグ可能ですが、ログからピンポイントでの原因究明は難しいでしょう。エラーが多発して困っているような場合は、素直に<a href="http://qiita.com/nisihara/items/4463e4fb265ad061da5c">実機を購入してデバッグ</a>したほうが早いかもしれません。

<hr>

参考にしたページ
<a href="http://www.matim-dev.com/tutorials.html" target="_blank">AndEngine Tutorials</a>
<a href="http://westplain.sakuraweb.com/translate/AndEngine/" target="_blank">上記の日本語訳サイト(非公式)</a>