Mac 和 "PANIC: Missing emulator engine program for 'arm' CPU."

Mac and "PANIC: Missing emulator engine program for 'arm' CPU."

我正在尝试 运行 我在 Galaxy Nexus 上为 API 16 创建的 AVD:

emulator @Galaxy_Nexus_Jelly_Bean_API_16

给出了错误

PANIC: Missing emulator engine program for 'arm' CPU.

尝试通过按下 Android Studio 中 AVD 管理器中的播放按钮来启动它,在工具栏中短暂弹跳一些东西,但它很快消失,没有任何显示,也没有明显的错误消息。

我浏览了其他有类似问题的帖子。大多数人在 Windows 上指出 Avast 是导致问题的原因。我正在运行宁Mac。我没有安装 Avast。

AVD 具有以下配置:

Name: Galaxy_Nexus_Jelly_Bean_API_16
CPU/ABI: Google APIs ARM (armeabi-v7a)
Path: /Users/prisoner/.android/avd/Galaxy_Nexus_API_16.avd
Target: google_apis [Google APIs] (API level 16)
Skin: galaxy_nexus
SD Card: 100 MB
hw.dPad: no
hw.lcd.height: 1280
runtime.network.speed: full
hw.accelerometer: yes
hw.device.name: Galaxy Nexus
vm.heapSize: 80
skin.dynamic: yes
hw.device.manufacturer: Google
hw.lcd.width: 720
hw.gps: yes
hw.initialOrientation: Portrait
image.androidVersion.api: 16
hw.audioInput: yes
image.sysdir.1: add-ons/addon-google_apis-google-16/images/armeabi-v7a/
hw.cpu.model: cortex-a8
tag.id: google_apis
showDeviceFrame: yes
hw.camera.back: virtualscene
hw.mainKeys: no
AvdId: Galaxy_Nexus_Jelly_Bean_API_16
hw.camera.front: emulated
hw.lcd.density: 320
avd.ini.displayname: Galaxy Nexus Jelly Bean API 16
hw.arc: false
hw.gpu.mode: auto
hw.device.hash2: MD5:5c288d27461585ecc73a535555e7cf61
hw.ramSize: 1024
hw.trackBall: no
PlayStore.enabled: false
fastboot.forceColdBoot: no
hw.battery: yes
hw.cpu.ncore: 4
hw.sdCard: no
tag.display: Google APIs
runtime.network.latency: none
hw.keyboard: yes
hw.sensors.proximity: yes
disk.dataPartition.size: 800M
hw.sensors.orientation: yes
avd.ini.encoding: UTF-8
hw.gpu.enabled: yes

Android工作室环境:

Android Studio 3.1.4
Build #AI-173.4907809, built on July 23, 2018
JRE: 1.8.0_152-release-1024-b01 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.12.6

我已经安装了 SDK 管理器中可用的此版本 SDK 的所有内容:

我安装了最新版本的模拟器。我试过卸载并重新安装它。

ANDROID_HOME 环境变量似乎设置正确(它与 SDK 管理器中的 Android SDK location 匹配。emulator 程序似乎也是此 home 环境下的程序:

Mulan:~ prisoner$ echo $ANDROID_HOME
/Users/prisoner/Library/Android/sdk
Mulan:~ prisoner$ which emulator
/Users/prisoner/Library/Android/sdk/tools/emulator

据我所知,模拟器和特定于体系结构的模拟器也在 ANDROID_HOME:

我不知道还能在哪里查看错误消息或那里的模拟器,但无法被系统找到,或者如何解决该问题。

更新 1:明确指定路径。

尝试明确指定路径也不起作用:

Mulan:~ prisoner$ /Users/prisoner/Library/Android/sdk/tools/emulator @Galaxy_Nexus_Jelly_Bean_API_16
PANIC: Missing emulator engine program for 'arm' CPU.
Mulan:~ prisoner$ /Users/prisoner/Library/Android/sdk/emulator/emulator @Galaxy_Nexus_Jelly_Bean_API_16
emulator: ERROR: This AVD's configuration is missing a kernel file! Please ensure the file "kernel-qemu" is in the same location as your system image.
emulator: ERROR: ANDROID_SDK_ROOT is undefined

果然,ANDROID_SDK_ROOT没有定义。将其定义为与 ANDROID_HOME 相同的东西会执行以下操作:

Mulan:~ prisoner$ export ANDROID_SDK_ROOT="$ANDROID_HOME"
Mulan:~ prisoner$ /Users/prisoner/Library/Android/sdk/emulator/emulator @Galaxy_Nexus_Jelly_Bean_API_16
emulator: ERROR: This AVD's configuration is missing a kernel file! Please ensure the file "kernel-qemu" is in the same location as your system image.
emulator: ERROR: ANDROID_SDK_ROOT is defined (/Users/prisoner/Library/Android/sdk) but cannot find kernel file in /Users/prisoner/Library/Android/sdk/system-images/ sub directories

查看 system-images 目录下,我们看到每个 API 平台都有一个目录:

Mulan:~ prisoner$ ls ~/Library/Android/sdk/system-images/
android-16  android-19  android-23  android-26
android-17  android-21  android-24  android-27
android-18  android-22  android-25  android-28

android-16 目录下,我们有

./default
./default/armeabi-v7a
./default/armeabi-v7a/build.prop
./default/armeabi-v7a/kernel-qemu
./default/armeabi-v7a/NOTICE.txt
./default/armeabi-v7a/package.xml
./default/armeabi-v7a/ramdisk.img
./default/armeabi-v7a/source.properties
./default/armeabi-v7a/system.img
./default/armeabi-v7a/userdata.img
./default/mips
./default/mips/build.prop
./default/mips/kernel-qemu
./default/mips/NOTICE.txt
./default/mips/package.xml
./default/mips/ramdisk.img
./default/mips/source.properties
./default/mips/system.img
./default/mips/userdata.img
./default/x86
./default/x86/build.prop
./default/x86/kernel-qemu
./default/x86/kernel-ranchu
./default/x86/NOTICE.txt
./default/x86/package.xml
./default/x86/ramdisk.img
./default/x86/source.properties
./default/x86/system.img
./default/x86/userdata.img
./google_apis
./google_apis/x86
./google_apis/x86/advancedFeatures.ini
./google_apis/x86/build.prop
./google_apis/x86/kernel-qemu
./google_apis/x86/kernel-ranchu
./google_apis/x86/NOTICE.txt
./google_apis/x86/package.xml
./google_apis/x86/ramdisk.img
./google_apis/x86/source.properties
./google_apis/x86/system.img
./google_apis/x86/userdata.img

可能是模拟器工具路径问题。尝试指定模拟器路径的完整路径

试试这里的答案。

刚刚在我的Mac上尝试验证,要解决这个问题,您需要手动指定-kernel路径。即

$ ~/Library/Android/sdk/emulator/emulator  @Galaxy_Nexus_Jelly_Bean_API_16 -kernel ~/Library/Android/sdk/system-images/android-16/default/armeabi-v7a/kernel-qemu

一些参考给你:

  1. Emulator error: This AVD's configuration is missing a kernel file

  2. https://developer.android.com/studio/run/emulator-commandline

---编辑---

为避免每次都输入-kernel参数,您也可以将~/Library/Android/sdk/system-images/android-16/default/armeabi-v7a/kernel-qemu文件复制到~/Library/Android/sdk/add-ons/addon-google_apis-google-16/images/armeabi-v7a

[部分回答 - IDE]

上的相关问题

我也遇到过这个问题。我的 Android Studio 甚至无法启动模拟器,并出现类似 "Emulator: Process finished with exit code 1" 的错误。修复是 install/update SDK 管理器下的相关系统映像 -> SDK 平台(选项卡) -> 单击 "Show Package Details",然后单击 "Apply"。

然而,这似乎并没有使 CLI 命令 emulator -avd <avd name> 运行,而是我看到了 PANIC 错误,但是 apparently it's related to the migration of the emulator 从 SDK 路径 /tools 到 /emulator