当您将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损坏,将会出现这两个错误。
因此,首先建议您完全删除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-files refer to incorrect/nonexistent base-images
最后一个问题是当您试图将 AVD 或 SDK 从一台计算机或目录移动到另一台时发生的。在这种情况下,您可能会遇到以下错误:
qemu-system-i386.exe: -drive if=none,overlap-check=none,cache=unsafe,index=0,id=system,file=C:\Users\<old_user_name>\.android\avd\<avd_name>
.
avd\system.img.qcow2,read-only: Could not open backing file: Could not open '<old_sdk_dir>\system-images\android-22\google_apis\x86\system.img
': Invalid argument
有两种方法可以解决它:
如果您不关心 AVD 包含的数据,请从 AVD 目录中删除所有 qcow2
文件(例如从 <user_home>/.android/avd/<avd_name>
)。在这种情况下,您将获得 Android 的干净版本,就像进行硬重置后一样。
如果模拟器中的数据对您很重要,则需要打开所有的 qcow2
文件并使用任何 HEX 编辑器(我更喜欢HxD)逐个查找基本 img
文件的路径,并将其更改为正确的路径。选择 Overwrite
模式以保留文件大小。然后选择该路径并获取其十六进制长度(例如 2F
)。2F
代表 ASCII 斜杆 /
。将其放入位置 13
:
![Edit Android qcow2 files using HxD HEX editor](https://istack.dev59.com/s0c77.webp)
PS:不确定,但可能有一些像 qemu-img 这样的工具可以设置不同的基础映像。对我来说,手动编辑二进制文件更容易。
现在您可能能够成功启动 Android 虚拟设备了,希望如此 :)
1>PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT 1>Emulator Nexus_5X_API_23 cannot be started.
- RBTecho $ANDROID_SDK_ROOT
,显示结果为“/usr/local/share/android-sdk”。因此,尽管路径正确,仿真器仍会崩溃。 - Mike S.export ANDROID_HOME=/usr/local/Cellar/android-sdk/24.4.1 export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/bin
转到Android Studio首选项 => 构建、执行、部署 => 构建工具 => Gradle => Android Studio => 应选择启用嵌入式Maven存储库。
转到Android Studio首选项 => 外观和行为 => 系统设置 => Android SDK => 转到SDK工具并选择Android模拟器。
- Gampesh