Flutter開発というよりAndroid開発での問題になると思う。
今回起きた問題
VSCodeでのFlutter開発で起動デバイスをアンドロイドエミュレーターにした場合、アンドロイドエミュレーターが単独で起動する。
以下のような感じに。
なおAndroid Studioでは開発環境のドック内に表示される仕様。
今回、エミュレーターを起動したのち、そのエミュレーターが画面内に表示されないという現象が発生した。
起動はしているらしく、タスクバーに表示がされているのと、VSCodeでアプリを実行することもできる。
タスクバーへの表示はこんな感じ。
本来の表示は以下になるはず。
原因と解決方法
原因
エミュレーターが起動する場合の初期設定に間違いがあった。
この間違いは、ウィンドウの表示位置座標が、画面外になってしまっていたこと。
ウィンドウの表示位置に関しては、エミュレーターを作成したフォルダの下のemulator-user.iniというファイルに格納されている情報を使っていることが分かった。
このファイルをノートパッドで開いてみると、以下のような感じになっていた。
起動時のウィンドウ位置がX=40, Y=-1025。
つまりY座標値がマイナスの大きい値になっていたため、画面上に出てこなかったということ。
これと同じような仕組みを、過去自作プログラムでもやってたことがあり、そちらでは座標値が画面内にないと0,0の位置もしくはデフォルト位置にするということをやっていたのだけど、Androidエミュレーターではそういう処理をしていなかったみたいだ。
あと、Y座標値がこのような異常な値になってしまった原因については分からない。
対応方法
まずエミュレーターを終了させる。
その後emulator-user.iniからwindows.xとwindows.yを消し、エミュレーターを起動すればいい。
エミュレーターが起動しっぱなしの場合は、emulator-user.iniが異常な値のまま再保存されてしまうので必ずエミュレーターはすべて終了させておく必要がある。
補足(2024/06/12記述)
emulator-user.iniでググると本件についていくつかの記事が出てきた。また書かれたのはかなり前のものが多かったので、Android開発ではFAQ的なものなのかもしれない。
Stack Overflowでは以下のQAがあった。
ただ、Flutterで検索した結果としてはうまい回答が出てきておらず、また直近の回答は以下のようなもので解決には至っていない模様。
こちらの回答は以下の2つ。
- エミュレーターデバイスを再作成してみろ。
- エミュレーターのセッティング画面からEmulator always on topをONにしろ。
前者はやってもいいけど面倒くさい。後者に関しては、これをやろうにもセッティング画面を出すこともできないので無理じゃない、という結果になってるみたい。
一応、後者のやり方については、セッティング画面を出す方法があったのだけど、Emulator always on topをONにしても画面内にエミュレーター画面が出てこなかったので回答としては間違いなんだと思うけど。
コメント