プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Android エミュレータを複数ディスプレイのメイン以外に移動させるとフリーズする

タイトルの通り、 Android のエミュレータを起動して、メインのディスプレイ以外に移動させようとすると、隣の画面に映ったとたんにエミュレータがフリーズします。

こちらの記事で3画面化の話を書きましたが、それ以前から問題は起きていたので、グラボ関係とは別問題だと思います。

まあ、今までは一度フリーズしても、次にエミュレータを起動するときに Cold boot をさせれば、メインディスプレイに表示されてそのまま動いていたので、若干不便でしたが使ってきてました。

ところが、先日エミュレータを起動したままディスプレイの電源を切ったか何かのタイミングで、エミュレータがメイン以外のディスプレイに表示されました。後日、このエミュレータを起動しようとすると、どうにもメインディスプレイに戻りません。

ということで、これへの対応方法を検討しなくてはならなくなったので、調べてみたことをメモっておきます。

環境は下記のとおりでした。

  • Windows 10 21H2
  • Android Studio 4.1.3

解決方法

ググったら、割とすぐに解決方法が見つかりました(ずばり、下記記事です)。

android - AVD Crash on second monitor - Stack Overflow

なるほど、 Open GS EL renderer の設定の問題なんですね。

デフォルトでは、

f:id:junichim:20220203115741p:plain

のように、 host で検出したものを使うとなっているのを

f:id:junichim:20220203115858p:plain

ANGLE(D3D11) に変更するとよいとのことです(要エミュレータの再起動)。

試してみると、メインディスプレイ以外でも問題なく表示できるようになりました。

起動しないエミュレータの場合

上記のやり方は、エミュレータが起動している場合にしか使えません。今回のように、メインディスプレイに持ってくることができなくてエミュレータが起動しない場合は、設定そのものが変更できません。

この場合、問題のあるエミュレータのディレクトリ直下にある『 hardware-qemu.ini 』ファイルをテキストエディタで開いて、

hw.gpu.mode = host

となっている個所を

hw.gpu.mode = angle_indirect

に変更してから、エミュレータを起動( Cold boot )したら、無事立ち上がりました。

これが、正しい設定方法かどうかはわかりませんが、お困りの方、何かのご参考にしていただければと思います。