Androidそのものはオープンソースであり、ゆえにいくつかの開発企業ではゲーム用にチューニングしたAndroidとエミュレーション環境を提供しているソフトウェアがあります。
有名なのは以下でしょうか。
- Nox Player - https://jp.bignox.com/
どれも無料で提供されているので、それぞれにはゲームアプリの広告がついています。エミュ起動のロード中やホーム画面のサイド、アプリアイコンに登場することで広告になっているようです。さらにゲーム向けのキーボード機能や自動化ツールなども含まれているのもあり、ゲームプレイ向けの製品が多いです。
では今回、なぜAndroid-SDKのAndroid Emulatorにしようと思ったかというと、とある事でこういったエミュが起動できないからです。
追記:
BlueStacks5 からHyper-V環境でも正常に起動できるバージョンのエミュレーターが登場しました。この記事は Android Emulator でアプリを遊ぶ方法として残しておきます。
目次
- Hyper-Vの有効によりホスト型ハイパーバイザーが実行できなくなる
- Hyper-V環境でも使えるものが提供されていたが…
- Android-x86を使ってみるが…
- Android Emulator を Visual Studio から使ってみるが…
- Android Emulator を Android Studio から使う
- まとめ
- 参考
Hyper-Vの有効によりホスト型ハイパーバイザーが実行できなくなる
Windowsの仮想プラットフォームであるHyper-VはType1ハイパーバイザーであるネイティブまたはベアメタル型です。これはハイパーバイザープラットフォームを有効にすることで、ハードウェアから直接複数の仮想環境を扱えるようになります。
それとは違って、VMware Work Station や Oracle Virtual Box はType2ハイパーバイザーであるホスト型で、ホストOS上に仮想環境を作ります。
しかしながらType1の場合、ホストOSもハイパーバイザーの上に存在するようになるためかType2の仮想化がどうやらできなくなります。
上記のゲーム向けのAndroidエミュはType2であるため、Hyper-Vの環境にしてしまうと動かすことができません。
なぜ起動できないか等はこちらの記事周りをみると早いです。
※仮想化ソフトウェアについては、最近ではVMwareがHyper-Vとの共存ができるようになっていた。 また、VirtualBoxも6.0からHyper-Vとの共存がすでに可能になっていたそう。
Docker for WindowsもそうですがWSL2の登場もあり、仮想化プラットフォームを有効にする必要が出てきました。それに伴ってHyper-Vを有効にする必要があります。開発マシンと普段遣いは特に分けてないのでHyper-V向けでない仮想環境が起動できなくなります。
再起動して切り替えることができますが、いちいちそれを実行するのもめんどくさいと思ったのが今回のきっかけです。
Hyper-V環境でも使えるものが提供されていたが…
他のエミュレータもHyper-V環境で動くか調べてみたら、BlueStackについてはHyper-V環境でも動くものが提供されていました。
中身はAndroid 64bitベース(x86_64)のようで、通常の32bit版でアプリ実行に問題がある場合の代替にもなっていました。
しかし、やはり互換性の問題からか一部のゲームが起動できませんでした…(特にUnity製のゲームが起動できない)。
Android-x86を使ってみるが…
Hyper-Vプラットフォームや VMware WorkStation Player などでAndroidを実行したいとなると、Android-x86というPC向けにチューニングされたAndroidがありました。
ただ仮想環境にインストールしたものの、なぜかグラフィック処理にCPU依存しかできない構成にしかできません。(Hyper-Vマネージャーから作成する仮想環境ではそもそもGPU未対応)
通常処理が重いうえにゲーム系のアプリはそもそも起動できませんでした。
Android Emulator を Visual Studio から使ってみるが…
Android-SDKのAndroid Emulatorだとどうなんだろうと思い、まずはVisual StudioのXamarin環境から利用してみることに。
Android EmulatorはHyper-Vにも対応しているので起動に問題はありません。GPUも扱うことができるようです。
しかしながら、いろいろ弄っていてわかったことは、Visual Studioから管理する場合は構成設定を変更してしまうと、あっさりデータがリセットされてしまう。という問題がありました。
フルHDだと重いなとか、要らないセンサー切ろうとかで構成設定をVisual StudioのADV Managerから変更してしまうとユーザーデータがリセットされ初期設定に戻ります。
こんなのを繰り返してたら、構成変更時に何度も移行作業やログイン設定して時間がかって仕方がないです。
Android Emulator を Android Studio から使う
ということで、Android Studio からだとまた違うのではと利用してみました。結論はこの方法が最適でした。
Android Studio のプロジェクトを作る必要はないです。
WelcomeウインドウのConfigureからAVD Managerを起動します
Create Virtual Deviceから新しくデバイスを作成します。
利用するデバイスプロファイルとシステムは好きなバージョンのAndroidで良いですが、Play Storeにマークが書かれているものを選びます。表記がないものはGoogle Playがインストールされたイメージを利用できないので、外部パッケージのみしかインストールできないことになります。
しかしながら、Play Store付きのハードウェアプロファイルは多くの構成設定の変更ができないようになってしまっているため、解像度の変更をすることができません。ただしメモリ数とCPUコア数は後述から変更できるので解像度がそのままで良い場合はできるだけ安全であるPlay Store付きのものを選んでください。
他の解像度を利用したい場合は、カスタムハードウェアプロファイルを作るかPlay Storeのマークがついていないプロファイルを選択します。
ABIはx86を選択します。Recommended の中から選ぶようにすれば問題ないです。x86_64では動作がx86に比べて重いのと一部のアプリが動かない可能性があります。
Verify Configiration になったら、
Show Advanced Settingsを押して詳細な設定を表示します。
Boot OptionからQuick Bootを選択せず、Cold Bootにします。
クイックブートはシャットダウンの代わりに現在の状態を保存して再開できる機能ですが、アプリ起動中で閉じてしまった場合にゲームデータ不整合を起こす可能性を考慮して、通常の処理をできるようにコールドブートにします。
Play Storeプロファイルの場合、CPUコア数やメモリなどの設定がグレーアウトしており変更することができないようになっています。しかしながら、Visual Studio経由と違って通常の構成を変更してもユーザーデータが消えることがありません。
しかしながら例外があります。ストレージ容量の変更、PlayStoreが有効・無効になった場合にデータがリセットされます。それは後述します。
Finishを押すと仮想デバイスが作成されます。
まずは▶を押してデバイスを起動してみましょう。
起動後、サイドメニューの「…」→Settingsで擬似的なスマホフレーム枠表示やマウスホイールを利用可能にするか等が設定できます。これはそれぞれの仮想デバイスの共通設定です。特にAdvanced内でOpenGL ES rendererはOpenGLにします。他の描画はまず重いです。そして一部の場所では描画がおかしくなるため、API LevelはCompatibilityにします。
詳細な構成の変更
さて、通常のアプリやブラウザを利用する上では問題ないですが、
ゲームなどの重い処理をするアプリでは少し重さを感じるかもしれません。それはそのはず、デフォルトで与えられているメモリは1536MBであるため完全にメモリ不足です。PlayStoreのプロファイルではAVD Managerの設定から編集できませんが、起動時の構成設定は仮想デバイスのフォルダに存在します。選択したデバイスを右クリックもしくは▼からShow on Diskをクリックし、仮想デバイスのあるフォルダを表示します。
その中のconfig.iniファイルをテキストエディタなどで開きます。
中身は構成設定がずらーっと並んでいますが、特に変更するのは以下の部分です。
- hw.cpu.ncore(利用するCPUコア数)
- hw.ramSize (利用するメモリサイズ)
まずメモリサイズを変更しましょう。1536から少なくとも2048にします。※自身のPC搭載メモリに合わせてサイズを決定してください。多すぎると今実行しているシステムが不安定になる場合があります。
さらに可能なら利用するCPUコア数をデフォルトの3より多くします。こちらも自身のスペックに余裕があるように選んでください。オススメは3~4コアです。しかしながらCPUが4コアの場合、システム側になるべく1コアは余るようにはしたいです。全て使ってしまうとシステム側の処理が遅くなりエミュに全部持っていかれることになります。
※ここで解像度の数値を変更しても反映されません。
これでHyper-V環境でもPCでAndroid仮想デバイスが良い感じに扱えるようになりました。
ゲームだけでなく通常のAndroidの使い方もできます。
※ Play Storeプロファイル以外からのPlay Storeの利用(注意!)
Play Store準拠のプロファイルを最初に選択したデバイスはAVD Managerからは一部の構成設定しか変更できません(config.iniを変更するにしても、メモリとCPUコア数以外は変更しないことをオススメします)。
では、違う解像度を利用するためにPlayStoreの入っていないプロファイルを選択する必要がありました。そのままではPlay Storeを使うことができませんが、Play Store付きのイメージをconfig.iniから変更することができます。
ただし、注意してください!
Play Store用イメージを指定するため image.sysdir.1 を変更した後に、起動するとユーザーデータはリセットされます。
設定方法
config.iniからimge.sysdir.1のディレクトリを変更します。
同じバージョンのAndroidを利用するなら、
image.sysdir.1=system-images\android-27\google_apis\x86\
から
image.sysdir.1=system-images\android-27\google_apis_playstore\x86\
に変更。
これでPlay Store有効のイメージを使う事ができます。
解像度を変更するにはハードウェアプロファイルを設定するしかありません。もし解像度を変更する場合はプロファイル変更後に image.sysdir.1 のイメージディレクトリの変更が無いことを確認してから起動します。
特にPlayStoreが利用できるプロファイルに戻すと、AVD Managerからプロファイルの変更ができなくなります。この場合はconfig.iniで一度、imge.sysdir.1をgoogle_apisのディレクトリに戻してから、ADV Managerの🔄ボタンで更新してから構成設定を開くと変更ができるようになります。
変更後は起動する前にgoogle_apis_playstoreにディレクトリを戻すのを忘れないでください。
ストレージ容量の変更について(注意!)
ストレージサイズを変更してもフォーマットの関係上、ユーザーデータがリセットされます。CPUやメモリ設定と違ってなぜか簡単に変更できるようになっているので注意してください。なるべく16GB以上をはじめから設定しておくことをおすすめします。容量が足りなくなった場合は、新しく作り直す必要があるかもしれません。
(システムデータに加えて設定した容量の空き領域ができる仕組みです。例えば、ストレージサイズを16GBに設定するとシステムデータが15GB程度で埋まり、空き容量が16GBとなります。全体では32GBのディスクとしてみなされます。)
ところで、AVD Managerから仮想デバイスを右クリックしてDeplicateすると仮想デバイスが複製されます。このときユーザーデータも複製されるため、事実上のバックアップが可能です。プロファイルを変更する等の場合は念の為、事前にDeplicateをして複製しておくと良いでしょう。
使う上でのちょっとした問題点
まず、特にゲーム向けの機能はないのでマルチタップを扱うゲームには向きません。Ctrlを押しながらでピンチイン、ピンチアウトはできます。
次に、最大化の機能はありません。ウィンドウは可変ですが特定の大きさに固定するようなものも無いです。
ゲーム画面をOBSで配信や録画する場合はウィンドウキャプチャーを利用して、ウィンドウサイズを手動で調整する必要があります。
まとめ
自分はモバイルアプリゲームは1つ程度に押さえていますが、ヘビーな人はいくつもやっていると思います。今回の方法はあくまで1台のバーチャルデバイスとして利用する方法なので1つで複数アプリの起動はできません。
もし行うなら最低限のメモリや小さい解像度にしたデバイスをいくつか作成して、それぞれのアプリ専用として複数起動することでしょう。
また、デバイスを両手で扱うようなアプリには通常のエミュレータは向いていません。そういうアプリをPCでやりたい場合はHyper-Vを利用しない上記のようなゲーム向けエミュレータを使うのがベストでしょう。
参考