概要
Androidアプリの開発欲が再燃したので放置していたAndroidStudioを起動し、最新にアップデートをしたが
仮想端末が起動しないため、その原因の確認と対応をした。
紆余曲折あったがADVマネージャーのログが見つかったので確認。
結果としては「C:\Users」の配下にあるユーザ名のフォルダが日本語であったため、仮想端末の起動に必要なファイルが読み込めなかった。
そのため、仮想端末が起動できなかった。
該当フォルダ名とユーザ名をアルファベット表記にすることで起動できることが確認できた。
備忘録として以下に今回の内容を記載します。
環境
今回使用した環境は以下になります。
- メインマシン
- Intel Core i7-6700k
- Windows10 Home
- AndroidStudio 3.5(後に3.6にアップグレード)
- サブマシン
- Intel Core i7-2600k
- Windows10 Pro
- AndroidStudio 3.5(後に3.6にアップグレード)
事象
AndroidStudioを起動し、バージョン3.5へアップグレード。
ADVマネージャーを起動。以前作成した仮想端末を起動ボタンをクリックするがイベントログに以下のエラーが表示し起動しない。
エミュレーター: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT
エミュレーター: プロセスは終了コード1で終了しました
2行目は定型文だが、1行目はググったところ、「ANDROID_SDK_ROOT」のパスが設定されていないので発生するエラー部分なので、自分で環境変数を設定した。
設定場所はAndroidStudio上に設定されているAndroid SDKロケーションのパスを設定。
(ロケーションのパス自体が設定されていない場合はSDKマネージャーからAndroid SDKをインストールして下さい)
設定後に再度ADVマネージャーから仮想端末を起動させると以下のエラー文に変わった。
エミュレーター: panic: broken avd system path. check your android_sdk_root value [(SDKロケーションのフォルダパス)]!
エミュレーター: プロセスは終了コード1で終了しました
上記のエラー文で再度ググると、ADVのシステムが壊れている、もしくは見つからないので起動に失敗している。
調べた限りのOS側の環境変数を設定するかSDKをAndroidStudioからインストールすれば直るとある。
色々手を尽くしたが上記のエラーが解消されずに仮想端末が起動できなかった。
ここまでの事象を環境の項目で記載したメインマシンで確認。
サブマシンにAndroidStudioを新規でインストール。
JDKすらインストールせずにそのまま仮想端末を起動すると無事に起動できたので、
メインとサブの環境の差異から原因を推測。
調査
今回のエラーの調査の内容を以下に箇条書きで書き出します。
- システム環境変数に「ANDROID_SDK_ROOT」を追加。パスはAndroid SDKロケーション
- システム環境変数に「ANDROID_HOME」を追加。
- JAVA_HOMEと関連のシステム環境変数を削除
- JDKを削除して、AndoroidStudioのデフォルトプロジェクト構造のjdkロケーションをAndoroidStudioの内蔵のものに変更。
- CPUがIntel VTへ対応しているか確認(メインサブ共に対応していました)
- Hyper-Vが関係しているかの確認。(HAXMがインストールされているならば有効でも無効でも問題ありませんでした)
- AndoroidStudioとSDKを削除して再インストール。
内容は長いのと関係のない部分が多かったので
以下に要点を記載します。内容は解決までの逆順です。
ログファイル
紆余曲折ありましたが、以下のユーザの一時フォルダに
adbコマンドのログファイルが置かれるのが分かったので内容を確認
C:\Users\(ユーザ名)\AppData\Local\Temp\adb.log
AndroidStudio上のイベントログに表示されていないエラー内容があり
--- adb starting (pid 40640) ---
adb I 02-26 15:38:02 40640 40364 main.cpp:60] Android Debug Bridge version 1.0.41
adb I 02-26 15:38:02 40640 40364 main.cpp:60] Version 29.0.6-6198805
adb I 02-26 15:38:02 40640 40364 main.cpp:60] Installed as D:\Android\sdk\platform-tools\adb.exe
adb I 02-26 15:38:02 40640 40364 main.cpp:60]
adb I 02-26 15:38:02 40640 40364 auth.cpp:437] adb_auth_init...
adb I 02-26 15:38:02 40640 40364 auth.cpp:262] User key 'C:\Users\(ユーザー名)\.android\adbkey' does not exist...
adb I 02-26 15:38:02 40640 40364 auth.cpp:97] generate_key(C:\Users\(ユーザー名)\.android\adbkey)...
adb server killed by remote request
上記のログの中で上から7行目が「adbkey」が存在しないと出ているため
実際にフォルダを確認し該当ファイルが存在するか確認。
ファイルは存在していたので何らかの原因で読み込めないと理解。
フォルダの日本語名について
サブマシンにて仮想端末が起動できたことでメインマシンとの差分を確認し、
SDKが読み込めていないのが原因と予測し、サブマシンと同じ位置に移動しようとするが
メインマシンで同じフォルダにインストールしようと該当フォルダを選択するとエラーでインストールができなかった。
Your SDK location cantains non-ASCII characters.
ググるとパスに日本語が入っていると上記のエラーが発生する。
今回はメインマシンのユーザ名が日本語のためインストールができない模様。
これと同様に仮想端末を起動するときに「adbkey」が読み込めなかったのはファイルまでのパスに日本語が入っているため
読み込めずに仮想端末が起動しなかった模様。
対応
フォルダ名のユーザ名が日本語なので仮想端末が起動しないことが分かったので
- アルファベット表記のアカウントを新しく作成しそちらに移る。
- アカウントのユーザ名、フォルダ名、レジストリを全て変更する。
1.をするために新しくアカウントを作成しましたが、ユーザの再設定、アカウント毎のアプリケーションの再インストールがかなり大変そうなので
2.を採用。
以下、参考サイトになります。
- Adoministratorアカウントをコマンドから使用できるように設定を変更し、
- 「netplwiz」をユーザーアカウントの変更画面を呼び出し、ユーザ名をアルファベット表記に変更。
- 更にレジストリの
「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList」を参照し、変更前のユーザ名をアルファベット表記に変更。 - Adoministratorアカウントにログインし、ユーザフォルダのフォルダ名をアルファベット表記に変更。
- 再起動後、レジストリの変更前のユーザ名で記載されている個所を全てアルファベット表記に変更。
最後のレジストリ修正が100か所を超えてたいのでとても大変でした。
作業時間は1時間~2時間くらいかかりました。
ですが、再設定、再インストール作業をせずにフォルダ名が変更できたことが確認でき、各アプリケーションも問題なく動作しました。
しかし、今回はレジストリ修正前にブラウザを立ち上げてしまったので一部のブックマークとログが消えてしまったのでバックアップの取得はしておくべきと反省する。
後書き
一通り書き終わってみると、原因はユーザが日本語名であった一点につきましたが色々と調べてかなり遠回りしました。
パスに日本語が入っているとエラーが出るというのは割と初歩的なミスであるが発見できるまで随分時間がかかってしまった。
時間がかかった理由は、SDKをCまたはDドライブの直下に置いていたのと、イベントログに詳しいログが出力されなかったのがある。
とりあえず、adbのログファイルが見つけられたので、そこは今後の開発作業に活かしたい。
また、同じような内容で困っている人がいるなら今回の体験が解決の糸口になることを祈ります。