Android 模拟器 (AVD) 在 MacOS 中无法启动

Android Emulator (AVD) fails to boot in MacOS

当目标平台为 Level 26 (Android 8.0.0) 或更高版本时,我的 android 模拟器无法启动。模拟器只显示黑屏,而模拟器进程持续 运行 大约。 100% CPU。请注意,25 级及更低级别可以正常工作。

这是我目前的发现:

我从命令行启动了模拟器,这样我就可以检查 logcat:

./emulator -avd Test2 -logcat '*:e'

以下是 logcat 的摘录:

[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.18.91+ (android-build@wphr1.hot.corp.google.com) (gcc version 4.9 20140827 (prerelease) (GCC) ) #1 SMP PREEMPT Tue Jan 9 20:30:51 UTC 2018
[    0.000000] Command line: qemu=1 androidboot.hardware=ranchu clocksource=pit androidboot.console=ttyS0 android.qemud=1 console=0 console=0 android.checkjni=1 qemu.gles=1 androidboot.logcat=*:e androidboot.selinux=permissive ndns=2 ndns=2
[    0.000000] Disabled fast string operations
... 
(skipping a few hundred lines)
...
[    1.443608] init: init first stage started!
[    1.443608] init: Using Android DT directory /proc/device-tree/firmware/android/
[    1.443608] init: First stage mount skipped (missing/incompatible fstab in device tree)
[    1.453842] init: Skipped setting INIT_AVB_VERSION (not in recovery mode)
[    1.453842] init: Loading SELinux policy
[    1.453842] selinux: SELinux:  Could not open /sepolicy:  No such file or directory
[    1.453842] 
[    1.463161] init: Failed to load monolithic SELinux policy: No such file or directory
[    1.463161] init: panic: rebooting to bootloader
[    1.463161] init: Reboot start, reason: reboot, rebootTarget: bootloader
[    1.472277] init: android::WriteStringToFile open failed: No such file or directory
[    1.472277] init: Shutdown timeout: 6
[    1.472277] init: terminating init services
[    1.472277] init: waitpid failed: No child processes
[    1.482231] init: Terminating running services took 0.013438 seconds with remaining services:0
[    1.482231] init: waitpid failed: No child processes
[    1.482231] init: vold not running, skipping vold shutdown
[    1.607664] init: powerctl_shutdown_time_ms:128:0
[    1.607664] init: Reboot ending, jumping to kernel
[    1.607664] reboot: Restarting system with command 'bootloader'
[    1.607664] reboot: machine restart
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.18.91+ (android-build@wphr1.hot.corp.google.com) (gcc version 4.9 20140827 (prerelease) (GCC) ) #1 SMP PREEMPT Tue Jan 9 20:30:51 UTC 2018
[    0.000000] Command line: qemu=1 androidboot.hardware=ranchu clocksource=pit androidboot.console=ttyS0 android.qemud=1 console=0 console=0 android.checkjni=1 qemu.gles=1 androidboot.logcat=*:e androidboot.selinux=permissive ndns=2 ndns=2
[    0.000000] Disabled fast string operations
...

每 5 秒无限重复一次。所以我怀疑我的问题与 SELinux 有关。这是有道理的,因为 Android 8 在该领域引入了许多变化:https://source.android.com/security/selinux/

但我不知道为什么其他人没有这个问题,也不知道该怎么办。

您是否尝试从 AVD 向导 擦除 模拟器 的数据?

我遇到了同样的问题,在启动前通过擦除模拟器解决了这个问题。

问题很可能与 GPU 驱动程序有关。 尝试安装正确的 GPU 驱动程序。

有些 GPU 很难找到。如果找不到,请按如下所述强制使用软件图形。

转到虚拟设备设置,然后 Software 作为仿真性能部分下的图形。这可能会显着降低性能。但是它可以正常工作。

Select "Software""Emulated Performance Graphics" 选项中,在 AVD 设置中而不是"Automatic" 或 "Hardware"

简单的解决方案。 删除 android 文件夹。 重新安装 android sdk。 删除用户文件夹中的 avd 设置。 创建新的 AVD。

我发现这是主机上的 SELinux 问题。这是解决它的一种方法:

sudo setsebool -P selinuxuser_execheap 1

还有更具体的方法。但是,您需要捕获异常以获取确切的命令:

通过执行以下命令暂时允许此访问:

ausearch -c 'qemu-system-x86' --raw | audit2allow -M my-qemusystemx86
semodule -X 300 -i my-qemusystemx86.pp

当然,您可以通过在您的主机上临时设置 SELinux 来进行常规测试。

在我这样做之后,phone 显示不再是黑色。