当您将AVD或SDK移至另一个目录,或将旧的SDK替换为新的SDK,或以某种方式使该SDK损坏时,可能会有几个不同的问题。
下面,我将描述我所知道的所有可能的问题,并为您提供解决这些问题的几种方法。
当然,我假设您已创建任何AVD,并且它位于C:\Users\<user_name>\.android\avd
(Windows)或~/.android/avd
(Linux / MacOS)中。
如果您移动.android
到另一个地方,则将ANDROID_SDK_HOME
环境变量设置为包含您的父目录的路径,.android
并确保AVD Manager成功找到了您的虚拟设备。
同时检查路径 <user_home>/.android/avd/<avd_name>.ini
SDK结构不完整/损坏
PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT
PANIC: Broken AVD system path. Check your ANDROID_SDK_ROOT value
如果模拟器找不到SDK,或者SDK损坏,则会发生这2个错误。
因此,首先我建议完全删除该ANDROID_SDK_ROOT
变量。仅当仿真器位于SDK目录之外时才需要。但总的来说,您的仿真器位于SDK目录中。并且在这种情况下,它必须自动检测SDK的位置。如果不是,则您的SDK可能具有错误的文件树。请执行以下操作:
检查SDK目录中至少有这4个目录:emulator
,platforms
,platform-tools
,system-images
。这非常重要!这些目录必须存在。如果其中一些不存在,则只需创建空目录即可。
转到<user_home>/.android/avd/<avd_name>
并打开config.ini
。查找image.sysdir.1
属性。它指向SDK目录内部的目录,该目录包含实际的系统映像。确保该目录存在并且包含诸如build.prop
,system.img
等文件。如果不存在,则必须打开SDK Manager并下载AVD所需的系统映像(请参见下文)。
如果一切都设置正确,则ANDROID_SDK_ROOT
必须消除这些错误。如果不是,那么现在您可以尝试设置ANDROID_SDK_ROOT
变量。
未安装必需的软件包和HAXM
您可能面临的下一个问题是仿真器开始启动,但是挂断或立即退出。这可能意味着您没有安装所有必需的软件包。
另一个可能的错误是:
无法自动检测到ADB二进制文件。在扩展设置页面中添加了自定义ADB路径之前,某些仿真器功能将不起作用。
因此,要成功启动任何AVD,您必须确保至少安装了以下软件包:
emulator (Android Emulator)
platform-tools (Android SDK Platform-Tools)
tools (Android SDK Tools)
正如我前面提到的,您必须安装AVD正在使用的系统映像,例如 system-images;android-25;google_apis;x86
请注意,SDK上的最新版本没有独立版本SDK Manager.exe
。取而代之的是,您必须使用Android Studio,或者tools\bin\sdkmanager.bat
(Linux / MacOS可能具有sh
文件)。
要列出所有可用的软件包,请使用sdkmanager --list
或sdkmanager --list --verbose
要安装软件包,请使用 sdkmanager <package1> <package2> ...
另外,我建议您在系统上手动安装HAXM。
Qcow2文件引用不正确/不存在的基本图像
当您尝试将AVD或SDK从一台计算机或目录移动到另一台计算机或目录时,会发生最后一个问题。在这种情况下,您可能会收到以下错误消息:
QEMU系统-i386.exe:-drive如果=无,重叠-校验为无,高速缓存=不安全的,索引= 0,ID =系统,文件= C:\Users\<old_user_name>\.android\avd\<avd_name>
。
avd \ system.img.qcow2,只读:无法打开后备文件:无法打开' <old_sdk_dir>\system-images\android-22\google_apis\x86\system.img
':无效参数
有两种解决方法:
如果您不在乎AVD包含的数据,只需qcow2
从AVD目录中删除所有文件(例如,从中<user_home>/.android/avd/<avd_name>
)。在这种情况下,您将获得干净版本的Android,例如在硬重置之后。
如果仿真器上的数据对您很重要,请qcow2
使用任何HEX编辑器(我更喜欢HxD)一一打开所有文件,找到基本img
文件的路径,然后在Overwrite
模式下将其更改为正确的文件(以保留文件大小)。然后选择路径并以十六进制形式获取其长度(例如2F
)。2F
代表ASCII斜线/
。放在位置13
:
PS:不确定,但是可能有一些实用程序,例如qemu-img,允许设置不同的基本映像。好吧,对我来说,手动编辑二进制文件更容易。
现在,您或许可以成功启动Android虚拟设备。但愿如此 :)