Android StudioでKotlinの学習をしていたところ、
ビルド時に突然出た謎のエラー
「qwmu-system-x86_64が予期しないで終了しました。」
によりエミュレータが一切起動しなくなり、
解決するために数時間格闘したので再発時のために試した手順を残しておく。
(調べても日本語のサイト全然出てこなくて四苦八苦したため)
環境↓
mac(Catalina) バージョン 10.15.7
Android Studio バージョン 4.2.1
##エラー
まず実際に起きたエラーについて
Android Studioからエミュレータを起動しようとすると、
一瞬だけエミュレータが立ち上がった後、すぐに落ちてしまう。
その後下記二つのウィンドウが表示された。
とりあえずエディターやOSの再起動、エミュレータの削除→作成も試してみたが、
何回試しても同じエラーが表示された。
##原因
色々調べてみた結果、自分の場合はどうやらエディターのバージョンに対して、
現在使用しているOSのバージョンが古いのが原因のよう。
(確かに最近Android Studioをアップデートしたような気がする)
それまでは問題なくビルドできていたので、おそらくこれが原因で間違いなさそう。
##対処
問題はOSのバージョンが古いことなので、
さっさとOSを今の最新(Big Sur)に上げてしまうのが手っ取り早いのだが…
自分は諸事情によりOSの更新ができないため、
OSではなくエディターのバージョンをダウングレードすることにした。
###以下手順
###過去のバージョンのエミュレーターをダウンロードする
(今回はAndroid Emulator3.4.5)
https://dl.google.com/android/repository/emulator-darwin_x64-7140946.zip
###インストールしたzipファイルを解凍する
↑解凍後のemulatorフォルダ
###解凍したemulatorフォルダを、library/android/sdk下のemulatorと置き換える
■必ず置き換える前にバックアップを作成すること
ここからの処理は、ターミナルで行う。
コマンドが長くなるため、3.実行前にandroid/sdkにcdすると良さげ。
####1.emulatorのバックアップ作成
新しいemulatorに置き換える前に、
元々あったemulatorフォルダのバックアップを作成しておく。
mv library/android/sdk/emulator library/android/sdk/emulator-backup
####2.解凍したemulatorをandroid/sdk下に移動させる
mv downloads/emulator library/android/sdk
(downloadsの部分は解凍したemulatorフォルダの場所、
例:保存場所がデスクトップなら desktop/emulator 等)
####3.package.xmlのバックアップ作成
emulatorフォルダ同様、
バックアップを作成しておく。
mv library/android/sdk/emulator-backup/package.xml library/android/sdk/emulator-backup/package-backup.xml
####4.package.xmlを解凍後のemulatorに移動(名前を変えてコピー)
cp library/android/sdk/emulator-backup/package-backup.xml library/android/sdk/emulator/package.xml
####5.package.xmlを編集
vi library/android/sdk/emulator/package.xml
↓
141行目のリビジョンタグを、以下のように書き換える
<revision><major>30</major><minor>4</minor><micro>5</micro></revision>
・3、4の処理について
ダウングレード後、Android Studioに最新版のエディターがインストールされていると
認識させる為に、package.xmlを利用する必要がある。
そのために、解凍後のemulatorフォルダ下に、元々あったpackage.xmlを移動させた。
###エミュレータを初期化する
ここまでの作業が終わったら、次にAndroid Studioを起動し、
ターミナルで以下のコマンドを実行し、エミュレータを初期化する。
emulator -avd avd_name -gpu mode
ここで無事コマンドが実行できた場合は問題ないが、
emulatorコマンドに対してcommand not foundが出た場合の対処法も、一応記載しておく。(自分の場合は出た)
#####/etc/pathsファイルを編集する
emulatorコマンドを使用するために、ターミナルから/etc/pathsファイルを開き、編集する。
読み取り専用ファイルなので、sudoコマンドを使用する。
sudo vi /etc/paths
無事にファイルを開けたら、最下行に以下の文を追加する。
/Users/username/Library/Android/sdk/emulator
(usernameの部分には、Users下の自分の名前が入る)
入力ができたら、 :wqで保存して閉じる。
これでemulatorコマンドが使用できるようになったはずなので、
初期化コマンドを入力、初期化する。
無事にエミュレータの初期化が完了できたら、エミュレータが実行できるようになっているはず。(自分はできた)
#####実行時に「開発元を検証できないため開けません」という表示が出た場合は、↓のサイトが参考になるかも
(以下引用及び参考サイト一覧)
https://stackoverflow.com/questions/49120854/how-to-downgrade-android-emulator
https://ichi.pro/macos-de-android-emyure-ta-o-daun-gure-do-suru-hoho-121363380382667
https://qiita.com/maikya_gu/items/a0299b983ef295e23e15