无法在Android Studio中运行模拟器。

101

我刚刚安装了Android Studio并试图运行它。当我尝试运行我的应用程序时,出现了以下错误消息。

emulator: ERROR: This AVD's configuration is missing a kernel file!!
emulator: ERROR: ANDROID_SDK_ROOT is undefined

有人知道如何解决这个问题吗????


1
请查看这个答案 https://dev59.com/p2kw5IYBdhLWcg3ws8pj - Psypher
@Ted Pottel,下面的任何答案是否回答了您的问题?如果是,请单击其旁边的复选标记。 - Elijah
12个回答

29

有可能您确实没有系统映像。请仔细检查$ANDROID_HOME/system-images/android-<YOUR DESIRED API>/armeabi-v7a 是否存在且不为空。如果确实缺少 - 请使用SDK管理器进行安装/重新安装。


2
我有两个问题:1:我找不到$ANDROID_HOME/system-images/android-<YOUR DESIRED API>/armeabi-v7a,2:如何使用SDK管理器重新安装虚拟设备。 - Musa Haidari
然而,阅读了您的答案后,我可以通过一些变通方法解决问题,即创建一个新的虚拟设备,这样问题就不会再出现了。 - Musa Haidari
4
请确保在SDK管理器中勾选“显示包详细信息”,这样您就可以查看已安装的系统镜像,如果没有安装,请进行安装。 - Martyn Davis

22

进入“工具”、“Android”、“AVD管理器”

点击最右侧“操作”栏下的箭头(在错误消息旁边)

选择“编辑”

保留默认选项(对我来说是MNC x86 Android M)

点击“下一步”

点击“完成”

保存您的AVD,现在最后一列中的错误已经消失。模拟器现在可以正常运行。


18

刚刚解决了这个问题。希望能帮助其他人。(针对Android Studio v2版本的问题)。 这个问题是针对arm模拟器的。在这个示例中,我使用的是armeabi-v7a API 16。

修复步骤共分三步:

第一步: 打开SDK管理器,确保已经安装了ARM EABI v7a系统映像。

第二步: 将sdk的路径添加到系统变量中,这是显而易见的情况。

右键单击桌面上的"This PC"图标,然后打开

属性->高级系统设置->环境变量... 然后将sdk路径作为新的系统变量添加到系统变量部分,变量名为ANDROID_SDK_ROOT

第三步: 重启Android Studio以使更改生效。在纠正了未定义的ANDROID_SDK_ROOT问题之后,虚拟机仍然无法找到内核文件,尽管它可以看到sdk管理器将其安装到

path-to-sdk\sdk\system-images\android-16\default\armeabi-v7a\kernel-qemu

原因是sdk管理器安装内核文件的位置与虚拟机正在查找的位置混淆了。

如果打开您的config.ini文件(Android Studio->AVD管理器->"显示在磁盘上")以查看您的模拟器配置,您将看到以下行:

image.sysdir.1=add-ons\addon-google_apis-google-16\images\armeabi-v7a\

(即\path-to-sdk\add-ons\addon-....)

我没有更改config.ini文件中的此值,而是复制了

path-to-sdk\sdk\system-images\android-16\default\armeabi-v7a\kernel-qemu

(从sdk管理器安装的文件夹中复制的内核文件)

\path-to-sdk\add-ons\addon-google_apis-google-16\images\armeabi-v7a\

这就是缺失的内核文件。你可以运行模拟器。(需要关闭Android Studio并重新打开) 由于其速度比x86慢10倍,所以请给模拟器一些时间。(我的启动大约需要5分钟)


哦,你模拟器的“config.ini”在哪里呢? - Jay
Android Studio -> AVD 管理器 -> "在磁盘上显示"。编辑答案。 - Asi Mugrabi
这是实际上对我有用的答案,在我的情况下,这是我编辑过的行:image.sysdir.1=system-images\android-16\default\armeabi-v7a - yvesmancera
这对我在Nexus 4模拟器上起了作用。必须将image.sysdir.1更新为system-images\android-15\google_apis\armeabi-v7a\ - twig

10

我通过运行"C:\Program Files\Android\android-sdk\AVD Manager.exe"并修复我的损坏设备来解决了问题。


5

你好,我遇到了和你一样的问题。在谷歌搜索结果中第三个链接带我来到这段代码,它引发了错误:

if (kernelFile == NULL) {
        kernelFile = avdInfo_getKernelPath(avd);
        if (kernelFile == NULL) {
            derror( "This AVD's configuration is missing a kernel file!!" );
            const char* sdkRootDir = getenv("ANDROID_SDK_ROOT");
            if (sdkRootDir) {
                derror( "ANDROID_SDK_ROOT is defined (%s) but cannot find kernel file in "
                        "%s" PATH_SEP "system-images" PATH_SEP
                        " sub directories", sdkRootDir, sdkRootDir);
            } else {
                derror( "ANDROID_SDK_ROOT is undefined");
            }
            exit(2);

有人写道:

"/* 如果内核映像名称以“-armv7”结尾,则自动更改CPU类型。这是一种简易的配置管理方法,但应该可以让我们通过使用dex preopt通过构建ARMv7系统映像"

所以我回去下载了我所需API级别的x86英特尔Atom版本,并成功启动了模拟器而没有报错。希望对你也有帮助.....


5
简短回答:尝试使用传统的<AndroidSDK>\AVD Manager.exe创建相同的映像。
在Android Studio中工作时,运行所有集成工具,我习惯不使用旧版管理器(AVD/SDK)。
在我的情况下,当我使用新的(集成的)AVD Manager创建旧系统映像设备(API 11及以下版本)时,我遇到了这个问题。
当我尝试使用传统的AVD Manager工具(位于<AndroidSDK>\AVD Manager.exe)创建这些旧设备映像时,我成功了。

2
感谢您的建议 - 独立工具似乎知道如何为旧平台设置事项。在OS X / macOS上:〜/ Library / Android / sdk / tools / android avd - neuralmer

2
我遇到了相同的错误。对我来说,解决方案是更改ANDROID_HOME路径。首先,我查看了Android Studio中的工具->android->sdk管理器。在那个窗口中,我们可以看到Android Studio查找SDK的路径:image

然后我打开了Windows CMD shell,执行了以下操作:

echo %ANDROID_HOME%

但是路径与第一步的ANDROID STUDIO CONFIGURATION中的路径不同。

解决方法是更改用户环境中的ANDROID_HOME为第一步的路径:image

最后关闭cmd shell,打开另一个cmd shell执行:

echo %ANDROID_HOME%

路径已更新,我可以完美地运行我的模拟器。

2
  • 打开Android Studio。
  • 进入设置 > 系统设置 > Android SDK
  • 获取“Android SDK位置”。
  • 将环境变量ANDROID_SDK_ROOT设置为此值。

这对我有用,我使用的是Windows 10和Android Studio 2.3.3。


1

通常,错误会发生在您为开发的应用程序选择了不适合的AVD模拟器时。例如,如果您正在开发针对可穿戴设备的应用程序,但尝试使用手机模拟器来运行它,则会出现此类错误。


1
在我的情况下(Windows 10),原因是我敢将Android SDK解压缩到非默认文件夹中。当我将其移动到默认文件夹c:/Users/[username]/AppData/Local/Android/Sdk并更改Android Studio和系统变量中的路径时,它开始工作了。

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