Android Studioでエミュレータが起動しない

スマホを新しいのにしてAndroidのバージョンが上がったおかげで地図アプリに不具合がでたことを先日書いた。
alasixosaka.hatenablog.com
ググると、Androidの新しいバージョンではバックグラウンドでのGPSによる位置情報取得が厳しく制限されているらしい。とくにバージョン11からはかなり厳しいようなので、アプリの設定も見直す必要があるようだ。
ということで、Android Studioエミュレータを使って状況を確かめようとしたら、エミュレータが起動せずはまってしまったというお話。
こんかいも、あれやこれや試行錯誤したので、何が悪くて何が良かったのかはっきりはしないが、状況とやったことを備忘録として書いておくことにする。

AVDマネージャーでAndroid11(API30)をインストール

まずは、Android11が動く仮想端末を作らないといけないので、いつものようにAVDマネージャーから新しい端末を作成して、OSにAPI30(Android11)を指定した。API30はダウンロードされていなかったので、まずダウンロードをクリックして、OSをダウンロード。仮想端末を作成した。端末は何でもよかったが、新しい方が良かろうということでPixel XLを選択した。
作成は無事に終了したが、起動しようと右の矢印をクリックすると、エラーを吐いて止まる。”The emulator process for AVD Pixel_XL_API_30 was killed”と表示されている。API29も試してみたが、こちらは端末の画面が出てくるが電源がONにならないという謎の現象。

HAXMが入ってないとダメ

ググると、HAXMを新しいのにしなさいというサイトがあったので、サイトの通りに、直接インテルのサイトからダウンロードしてインストールした。
しかし状況は変わらない。(自分の場合このやり方を最初に試したのはまずかったようだ、理由は後で)

Android Studioのアップデート

次に、Android Studioをアップデートしてみた。仮想端末のOSが新しいので、Android Studio自体もアップデートしないと対応していないのかと思った。
しかし、状況は同じ。

Android SDKのインストール

さらに調べると、ただAndroid Studioのバージョンを新しくしただけではSDKが古いままで、新しいOS用のがインストールされていないらしいことが分かった。
www.kunimiyasoft.com
リンクのサイトの下の方に書いてあります。たしかに、設定画面を開いて、Android SDKのところを開くと、インストールされているSDKの一覧が表示される。ここで、API29もAPI30もチェックが入ってなくて、インストールされていなかった。

f:id:alasixOsaka:20210722144015j:plain
Android Studioの設定画面。インストール後なのでチェックが入っているが、API29、API30にチェックが入ってなかった

絶対原因はこれだと思ったが、インストールしても相変わらずの症状。

HAXMをAndroid Studioからインストール

最初にこれをやればよかったのに、初めに見つけたサイトの方が直接インテルサイトからダウンロードしてたのでそれに従ったが、Android Studioからインストールする方が正当なやり方のようです。
先ほどの設定画面で、真ん中のSDK Toolsを開くと下の方にHAXMインストーラーの項目がある。

f:id:alasixOsaka:20210722144848j:plain
真ん中のSDK Toolsのタブを開いたところ

HAXMインストーラーにチェックが入っていなかったのでチェックと入れる。
しかし、インストールに失敗する。ここでは、インストーラーをダウンロードするだけなので、該当のフォルダを開いてインストーラーを動かしてやる必要があるが、フォルダの中身は空っぽ。
ちなみに、場所は”C:\Users\ユーザー名\AppData\Local\Android\sdk\extras\intel”でした。

VT-x、Hyper-Vの確認

これも、ぐぐると良く出てきますが、古いパソコンでVT-xに対応していないとダメらしい。また別のソフトなどでHyper-Vを使っていてもダメ見たい。
akeyfn.xyz

しかし、CPUはIntelのCorei7だし、Hyper-Vを使うようなソフトを入れた覚えもないので違うと思っていたが、ここまであれこれやってダメなのでひょっとしたらと思い確認した。
VT-xの確認はBIOS画面で確認するとVT-dというのが有効になっていた。また、Windowsの機能を開いてHyper-Vを確認したがチェックが入ってなかったので問題なし。
ということでこれもはずれ。

カスペルスキーを停止

セキュリティソフトが悪さをするということなので、カスペルスキーを停止して再度やってみる。今度はフォルダを覗いてみるとファイルが入っていてインストーラーがダウンロードされていた。
インストーラーをクリックすると、新しいHAXMがインストールされているのでインストールできませんというようなメッセージが出た。始めに入れたのが有効に機能している様子。
しかし、エミュレータについてはこれでも同じ状況。

初めに入れたHAXMをアンインストール

HAXMは入っている状態だが、Android StudioSDK Toolsを見ると、未インストールのままになっていて、気持ち悪いので、コントロールパネルからプログラムと機能を開いて、初めにインストールしたHAXMをアンインストール。
この状態で、SDK ToolsのHAXMインストーラのチェックを入れてみると、intelのフォルダにもう一つインストーラーの入ったフォルダができていた。

f:id:alasixOsaka:20210722151901j:plain
インストーラの入ったフォルダが2つ

一応新しい方を開いてインストーラーを起動してインストール。これで、SDK Toolsの表示はインストール済みに変わった。
しかし、状況は変わらない。

何故か魔法の呪文で解決。

ようやく解決です。でも何をやっているのかさっぱりなんですが、とりあえず動くようになりました。
じつは、エミュレータ―の起動に失敗したときに、”The emulator process for AVD Pixel_XL_API_30 was killed”と表示された裏にもっと詳しいエラーログが出ているのに途中で気づいてはいた。しかし、内容がよくわからなかったので、いろいろなサイトを見て解決策を探っていたが、もうどうしようもないので、この文章をコピーしてググってみると見事に解決策が見つかった。
何が書いてあったかというと、下記のようなメッセージ。
Android Emulator closed because of an internal error:
gpu found. vendor id xxxx device id yyyy
checking for bad AMD vulkan driver version...

GPUのドライバーが云々とか何かわからんので、googleにかけてみると、下記のstack overflowのページが最初にヒットした。
stackoverflow.com
同じエラーにあわれた方が質問をしていて、解答がいくつか書いてある。
最初の解決策はドッカ―を外すとうまくいったとか書いてあって、ドッカ―って何だみたいな話になって、どうも違うっぽい。ひょっとしてグラフィックスカードのことを言っているのかとも思ったが。
次の解決策はなんだかよくわからんが、advancedFeatures.ini というファイルを作成して、中に下の二行を書いて、C:\Users\\.androidのフォルダに入れるというもの。
Vulkan = off
GLDirectMen = on
全然わからん、魔法の呪文だが、何とこれをやったらうまく起動した。
ありがとうございました!!

しかし、たかがエミュレータでここまで苦労するとは思わなかった。恐るべしAndroid Studio