在使用Android SDK Tools安装并运行模拟器时,有如下报错:
PANIC: Broken AVD system path. Check your ANDROID_SDK_ROOT value
具体过程如下文:
1、下载并解压Android SDK command Tools,将tools目录放到一个目录中,此处命名this_is_sdk_dir;
$ cd /Users/sec/Downloads/this_is_sdk_dir
$ pwd
/Users/sec/Downloads/this_is_sdk_dir
2、设置环境变量ANDROID_HOME:
$ cat ~/.bash_profile | grep ANDROID_HOME
ANDROID_HOME=/Users/sec/Downloads/this_is_sdk_dir
3、使用tools/bin/目录下的sdkmanager列出了sdk软件包:
$ cd tools/bin/
$ ./sdkmanager --list
...略...
system-images;android-28;google_apis;x86_64 | 8 | Google APIs Intel x86 Atom_64 System Image
...略...
4、安装系统镜像:
$ ./sdkmanager "system-images;android-28;google_apis;x86_64"
输出内容省略...
5、创建avd,名称为a_test_avd,使用已经安装的镜像:
$ ./avdmanager create avd -n a_test_avd -k "system-images;android-28;google_apis;x86_64"
Parsing /Users/sec/Downloads/this_is_sdk_dir/emulator/package.xml
Parsing /Users/sec/Downloads/this_is_sdk_dir/patcher/v4/package.xml
Parsing /Users/sec/Downloads/this_is_sdk_dir/system-images/android-28/google_apis/x86_64/package.xml
Parsing /Users/sec/Downloads/this_is_sdk_dir/tools/package.xml
Auto-selecting single ABI x86_64
Do you wish to create a custom hardware profile? [no] no
6.启动avd:
$ cd /Users/sec/Downloads/this_is_sdk_dir/emulator/
$ ./emulator @a_test_avd
PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT
飞一凡(回复于:2019-03-05 04:03:15)
问题原因
于是开始根据上述错误输出搜索,绝大多数的解决方案,都是围绕在设置ANDROID_SDK_ROOT这个环境变量上,场景多是因为移动过安卓虚拟设备的目录。直到找到下面内容:
不完整/损坏的SDK结构
PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT
PANIC: Broken AVD system path. Check your ANDROID_SDK_ROOT value
如果emulator找不到SDK,或者SDK已损坏,则会发生这两个错误。所以,建议先删除ANDROID_SDK_ROOT变量,只有当emulator位于SDK目录之外时才需要它。但一般来说,emulator是在SDK目录中的。
在这种情况下,你必须自动检测SDK的位置。如果没有,你的SDK可能存在错误的filetree(文件树)。请执行如下操作:
检查SDK目录是否至少包含4个目录:
•emulator
•platforms
•platform-tools
•system-images
这是非常重要的。这些目录必须存在。如果其中一些不存在,需要创建空目录。
进入到<user_home>/.android/avd/<avd_name>,并打开config.ini,找到image.sysdir.1属性,它指向包含系统镜像的SDK的目录。确保此目录存在并包含build.prop,system.img等文件。如果没有,你必须打开SDKmanager并下载AVD所需的系统镜像。
如果一切设置正确,那么关于ANDROID_SDK_ROOT的这些错误应该消失;如果没有消失,再尝试设置
ANDROID_SDK_ROOT变量。