デバッグ時のAndroid エミュレーターがとても遅くなった件

2019年4月14日

Android Studioの3.3.2を入れたところ、Androidエミュレーターが激遅状態になってしまいました。ただでさえ遅いのに、描画が何十秒も待たされるのでは使い物になりません。

その解決の課程を記事にしました。腑に落ちない解決なのですが、同様の現象が出た時の参考になればさいわいです。(個人的な忘備録として残します)

1.HAXMを確認する

定番の高速対応であるHAXMを確認します。SDK ManagerでSDKのアップデートを確認して、次にWindowsでの動作状況を確認します。

動作はちゃんとしているようです。

2.デバッガを使わないで操作してみる

エミュレータの操作はデバッガを通して行っていたので、デバッガを動かさないで操作すると、今度は問題なく動作します。よって、原因はデバッガにあるようです。

また実機でもデバッガを有効にして動作させると、超遅くなりました。デバッガを動作させると、動作が重くなるようです。

3.デバッガ環境を変えてみる

デバッガ環境に問題がありそうなので、デバッガの環境を変えてみます。「run」「Debug」を選んで「Edit Config…」を選びます。ダイアログが開くので「Debugger」のタブを選択します。

また、監視をしたとしても

デバッグタイプを「Java」にします。これで早くなる場合があるようですが、全然効果がありませんでした。

4.build.gradleの修正

ここで、プロジェクトを「さっぽろ周辺マップ」から「東京周辺マップ」へ変更してみました。すると、東京周辺マップでは、描画が遅い現象が発生しませんでした。描画方法が異なる両プロジェクトですが、これはbuld.grandleで記述する各バージョンによって違いが出ているかもしれません。

さっぽろ周辺マップで使っているバージョンを東京周辺マップと同一にします。警告が出ていましたが、それも解消させました。

結論はだめでした。

5.エミュレーターが起動しなくなる

いじっている内に、ついにエミュレータが起動しない現象が発生。

0:41:40: Executing task…
10:41:40: Task execution finished.

AVDマネージャーからはエミュレーターは起動できるのですが、runメニューからは、処理がすぐ終わります。何か間違って項目を設定したのかもしれませんが、いろいろやっても全然だめです。他のプロジェクトは動くので、さっぽろ周辺マップのプロジェクトのみで発生します。

バックアップしてあった旧プロジェクトを戻します。動くようになりましたが、ソースの同期に時間がまた掛かりました。

6.オーバーヘッドの監視に時間が掛かっている

復旧した後で動かしているうちに、Android Studioの右下のウインドウにあるオーバーヘッドに目が留まりました。

非公開の英語モードで使うGetEnglishTextArray関数で、めちゃくちゃ時間が掛かっています。ここの監視のチェックを外すと、動作が軽くなりました。何で使っていない英語モードの関数のオーバーヘッドの監視をしているのでしょうか。また、監視をしたとしても処理は通らないはずなのに、何か処理をしているのでしょうか。

GetEnglishTextArray関数は変数を返すだけの関数なので、ダミーの1行を入れてブレイクポイントを設定して、再度起動してみます。

GetEnglishTextArray関数の監視はなくなり、いつも通りの速度で動作するようになりました。何でGetEnglishTextArray関数が監視されるようになったのか分かりませんが、とりあえず復旧しました。

7.結論

納得がいかない部分もありますが、動作するようになりました。まだ潜在的なバグがあるのかもしれませんが、経過を見ていこうと思います。

しかし、Android Studioの機能をもっと良く知らないと、開発は難しいということですね。私と違ってAndroidアプリの開発を仕事としている人ならば、メニューの中の各機能を理解する必要がありそうです。