解决命令行启动Android模拟器时的报错“Broken AVD system path”(MAC)

在使用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

  1. #1

    飞一凡(回复于: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变量。

     

  2. #2

    飞一凡(回复于:2019-03-05 04:03:30)

    问题解决

    从上述内容看,是因为我只使用sdkmanager这个命令安装了system-images,因而在SDK目录下,只存在上述四个目录的system-images目录,并没有platform-tools、emulator和platforms目录。
    $ cd /Users/sec/Downloads/this_is_sdk_dir/tools/bin/


    使用sdkmanager命令安装platform-tools、emulator和platforms:
    ./sdkmanager "platform-tools" "emulator" "platforms;android-28"

    输出略;

    此时,使用命令可以正常启动模拟器:
    $ cd /Users/sec/Downloads/this_is_sdk_dir/emulator/

    $ ./emulator @a_test_avd


    请自行脑补模拟器启动画面…

    细心的小朋友可能会说,你最初运行的emulator命令是在目录/Users/sec/Downloads/this_is_sdk_dir/tools中,与此处的不一致;

    没错,但即使运行原先的命令,也没问题,只是它比较旧,会打印相关提示信息:
    $ cd /Users/sec/Downloads/this_is_sdk_dir/tools

    $ ./emulator @a_test_avd

    Your emulator is out of date, please update by launching Android Studio:
     - Start Android Studio
     - Select menu "Tools > Android > SDK Manager"
     - Click "SDK Tools" tab
     - Check "Android Emulator" checkbox
     - Click "OK"

    也就是说,只要SDK目录中包含了正确的目录和内容,且只需要设置环境变量ANDROID_HOME,通过命令行就可以将模拟器运行起来。



我的回答