恐慌:破损的AVD系统路径。检查你的ANDROID_SDK_ROOT值。

211
在终端中输入cordova run android后,我得到了这个错误:
Waiting for emulator to start...
PANIC: Broken AVD system path. Check your ANDROID_SDK_ROOT value [/Users/username/Library/Android/sdk]!

导出后会发生以下情况:

export ANDROID_SDK_ROOT='/Users/username/Library/Android/sdk'

导出之前我得到了:

Waiting for emulator to start...
PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT

有什么想法我做错了吗?我确定这是sdk root,为什么会出现avd系统路径错误?


你能否通过AVD Manager(位于<AndroidSDK>\AVD Manager.exe)启动模拟器? - e666
4
我在使用Visual Studio创建跨平台应用程序时也遇到了同样的问题。我的错误信息是1>PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT 1>Emulator Nexus_5X_API_23 cannot be started. - RBT
我刚刚打开了Android SDK管理器,并安装了所有可用的内容(工具、各种API级别、额外组件)。真的!这解决了我的问题。尽管如此,在那之后我还遇到了其他问题,这些问题与Intel的HAXM技术有关,该技术是运行Android模拟器所必需的。这些问题必须采用不同的解决方法。 - RBT
1
可能是无法在Android Studio中运行模拟器的重复问题。 - coelhudo
4
我可以通过Android Studio启动AVD。当我尝试从命令行启动时,出现了这个错误:“PANIC:Broken AVD system path. Check your ANDROID_SDK_ROOT value [/usr/local/share/android-sdk]!”当我检查该路径时,运行指令echo $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
44个回答

226

当您将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文件树是否正确,并执行以下操作:

  1. 检查SDK目录中是否至少包含这4个目录:emulatorplatformsplatform-toolssystem-images。这非常重要!这些目录必须存在。如果其中一些不存在,则只需创建空目录即可。

  2. 进入<user_home>/.android/avd/<avd_name>并打开config.ini。找到image.sysdir.1属性。它指向SDK目录内包含实际系统映像的目录。确保该目录存在并包含build.propsystem.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 --listsdkmanager --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

有两种方法可以解决它:

  1. 如果您不关心 AVD 包含的数据,请从 AVD 目录中删除所有 qcow2 文件(例如从 <user_home>/.android/avd/<avd_name>)。在这种情况下,您将获得 Android 的干净版本,就像进行硬重置后一样。

  2. 如果模拟器中的数据对您很重要,则需要打开所有的 qcow2 文件并使用任何 HEX 编辑器(我更喜欢HxD)逐个查找基本 img 文件的路径,并将其更改为正确的路径。选择 Overwrite 模式以保留文件大小。然后选择该路径并获取其十六进制长度(例如 2F)。2F 代表 ASCII 斜杆 /。将其放入位置 13

Edit Android qcow2 files using HxD HEX editor

PS:不确定,但可能有一些像 qemu-img 这样的工具可以设置不同的基础映像。对我来说,手动编辑二进制文件更容易。


现在您可能能够成功启动 Android 虚拟设备了,希望如此 :)


另一个原因可能是在config.ini中缺少“hw.cpu.arch”。 - daserge
@daserge,我的所有“.ini”文件都有一种奇怪的格式(每个参数后面都缺少换行符),这正常/没问题吗? - J3STER
3
谢谢,我的情况是缺少platform-tools文件夹,所以我使用命令 tools/bin/sdkmanager "platform-tools" 来安装它。由于这个愚蠢的错误信息(“PANIC:Cannot find AVD system path. Please define ANDROID_SDK_ROOT”)没有清楚地说明问题是什么,所以找到问题真是太痛苦了...... - baptx
这太完美了。在我的情况下,问题是我没有安装API 27(奥利奥),而是安装了API 28(派),但仍然有一个奥利奥配置文件被我的Visual Studio for Mac Xamarin项目默认选择。关于配置文件的建议直接指向了问题的原因。 - Jessica Pennell
以下是重新定位支持文件(system.img、vendor.img 等)的命令:qemu_img rebase -u -f qcow2 -b 支持文件路径 qcow2文件路径 - EEPAN
显示剩余6条评论

143

在Mac上: 我使用brew安装了android-sdk和Android Studio,但是由于有2个安装版本,导致出现了问题。当我使用命令brew cask uninstall android-sdk卸载了我的brew安装的sdk,并将以下变量添加到我的环境中时,它就可以运行了。

export ANDROID_HOME=/Users/<Username>/Library/Android/sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME

20
之前我按照Nativescript教程使用Brew安装了Android SDK。但是在安装了Android Studio之后,模拟器无法启动。您的修复方法解决了我的问题。谢谢! - Cocoanut
2
这对我也起作用了。我在安装 NativeScript 期间也安装了 android-sdk。现在模拟器可以直接从 Android Studio 启动,但不能通过 NativeScript(tns run android)启动。 - Mudlabs
3
解决了我的问题,但没有删除Brew的android-sdk版本。 - mrisek
如果你想要tns run android继续工作,你可以按照我的答案。 - John
1
命令行工具已被弃用。最好的做法是正确安装Android Studio并避免使用brew cask。https://facebook.github.io/react-native/docs/getting-started.html#1-install-android-studio - Harry Moreno
ANDROID_HOMEANDROID_SDK_ROOT设置好对我很有帮助。如果您不想更改环境变量,可以在批处理文件(Windows)中使用setlocalendlocal - divillysausages

33

这将解决您在macOS中的问题:

pico ~/.bash_profile

export ANDROID_HOME=/Users/$USER/Library/Android/sdk
export ANDROID_SDK_HOME=/Users/$USER/Library/Android/sdk
export ANDROID_AVD_HOME=/Users/$USER/.android/avd
export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_AVD_HOME

source ~/.bash_profile

16

这意味着您的工具路径不正确。在Mac上使用brew时,它看起来是这样的。请注意版本。

export ANDROID_SDK_ROOT='/usr/local/Cellar/android-sdk/24.4.1_1'

在您的情况下,看起来您应该运行以下命令:

export ANDROID_SDK_ROOT='/Users/username/Library/Android/sdk'

3
错误仍然存在。我进行了双重检查,ANDROID_SDK_ROOT已在.bash_profile中设置。 即使运行echo $ANDROID_SDK_ROOT也会显示正确的路径:/usr/local/Cellar/android-sdk/24.4.1_1我正在使用HomeBrew安装的macOS。 - Shivam Maheshwari
@TechnoTim 不加单引号不起作用吗? - Mehdi Charife

15

我在Windows10上遇到了同样的问题,
我通过以下步骤解决了我的问题。
打开Android Studio
- 工具
- SDK管理器
- 复制Android SDK位置
Android SDK位置
设置系统环境变量
ANDROID_HOME 和 ANDROID_SDK_ROOT
系统环境变量


15

使用Homebrew的Android SDK作为默认SDK时消除错误

像@EFreak一样,我使用homebrew(Mac上的软件包管理器)安装了android-sdk。因为我在按照nativescript教程操作时遇到了错误,所以我需要执行以下步骤来修复它。如果你像我一样想要使用brew版本而不是android-sdk版本,请使用此答案(这将允许你使用nativescripts tns run android api),如果你想要使用android studio默认的android-sdk,请参考@EFreak的答案。

配置Android Studio使用Homebrew的Android SDK

基本上,你只需要在Android Studio中更改你的Android SDK位置。首先,在Android Studio中打开一个项目。然后点击此按钮打开SDK Manager。

android sdk manager button location

接下来,当 Android SDK 管理器的默认首选项出现时,你需要点击 {{edit}} 按钮旁边的 Android SDK 位置。

enter image description here

查找Homebrew的Android SDK位置

接下来,您需要在SDK组件设置屏幕上实际更新sdk位置,我的brew android-sdk位于这里:/usr/local/share/android-sdk。您可以通过运行brew cask info android-sdk来查找安装位置,然后在输出的底部附近应该会显示:

You can control android sdk packages via the sdkmanager command.
You may want to add to your profile:

  'export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"'

exported ANDROID_SDK_ROOT变量的值(这里是/usr/local/share/android-sdk)是Homebrew的Android SDK位置。

然后您需要单击Android SDK位置按钮(图中标记为1),并粘贴Homebrew的Android SDK位置。

enter image description here

然后通过安装所需的程序包完成向导。在此步骤中,我需要删除并重新创建设备模拟器,但之后似乎运行得很好。

将Android SDK环境变量设置为指向Homebrew的Android SDK

如果您选择使用Homebrew,请确保您的配置文件设置脚本中的ANDROID_HOMEANDROID_SDK_ROOT环境变量指向Homebrew的android sdk位置,否则上面的操作将无法正常工作。如果您是先安装Homebrew再安装Android Studio,请像@Jamie Armour这个答案中提到的那样从Homebrew位置更改这些值。您可以通过运行echo $ANDROID_HOMEecho $ANDROID_SDK_ROOT来检查android sdk的环境变量是否正确设置,并验证它们是否都显示为Homebrew的android sdk位置。

如果您需要更改ANDROID_HOME和ANDROID_SDK_ROOT值,可以在Mac的配置文件设置中进行更改,该配置文件通常位于~/.bash_profile~/.bashrc~/.profile等位置,并定义如下:

export ANDROID_HOME="/usr/local/share/android-sdk"
export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"

你需要更改导出值为Homebrew的android SDK位置的正确值,然后保存文件。为了验证正确的值已经被写入,你应该首先关闭并打开终端,这样会重新运行文件并重置环境变量,或者你可以通过运行source <profile file name>来源化文件,其中<profile file name>是你编辑和保存的配置文件。然后你可以重新运行echo $ANDROID_HOMEecho $ANDROID_SDK_ROOT来验证它们是否具有Homebrew android sdk位置。

我认为您不需要安装brew即可运行tns run android。在运行nativescript设置脚本之前,这对我有效。该脚本破坏了很多东西-_-。 - Felipe Centeno
1
@FelipeCenteno,是的,你不需要使用brew来完成这个操作。如果你已经使用brew安装了所有的Android SDK,那么这就是你完成此操作的方式。如果你只是使用默认的Android Studio SDK,你可以使用EFreaks的答案。 - John

14

模拟器更新后,我遇到了同样的问题。添加变量ANDROID_AVD_HOME后,问题得到解决。enter image description here

重要提示:路径中不能使用非ASCII字符。最后重新安装虚拟设备或在配置文件settings.ini中手动覆盖设备路径,其中包含旧的非ASCII字符路径。

C:\Users\<user_name>\.android\avd\<avd_name>

1
是的,非ASCII字符很重要。删除这些字符后一切正常。如何更改Windows 7上的用户名/用户文件夹,请参考https://superuser.com/questions/1355431/how-to-change-username-user-folder-on-windows-7。 - Alex Z

13
  • Platfoms目录在/usr/local/share/android-sdk中不存在。

  • 我创建了一个名为platforms的空目录,解决了这个问题。


12

在我的情况下,问题出在ANDROID_HOME和ANDROID_SDK_ROOT不同,所以一旦我将ANDROID_HOME设置为与ANDROID_SDK_ROOT相同,它就开始工作了。


1
是的,谢谢,这对我有用。正如@Blagojce所说,我在变量ANDROID_HOME和ANDROID_SDK_ROOT中都添加了C:\ Users \%username%\ AppData \ Local \ Android \ sdk \。 - Abdelhadi Abdo

9

我在Windows 10上运行Android Studio,在环境变量中设置了ANDROID_HOME和ANDROID_SDK_ROOT,但仍然出现错误。

结果是,我忘记下载设备了。

enter image description here

enter image description here

下载“缺失的系统映像”后,一切都正常了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接