当目标平台为26级(Android 8.0.0)或更高版本时,我的android仿真器无法启动。当仿真器进程始终以大约2秒钟的速度持续运行时,仿真器仅显示黑屏。 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/
但是我不知道为什么其他人没有这个问题,也没有办法解决。
答案 0 :(得分:1)
我发现这是主机上的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在主机上进行总体测试。
完成此操作后,手机显示屏不再是黑色。
答案 1 :(得分:0)
答案 2 :(得分:0)
该问题很可能与GPU驱动程序有关。 尝试安装正确的GPU驱动程序。
对于某些GPU很难找到。如果找不到,请按照以下说明强制使用软件图形。
转到虚拟设备设置,然后在仿真性能部分下将Software
作为图形。这可能会大大降低性能。但是它将正常工作。
答案 3 :(得分:0)
在AVD设置的“模拟性能图形” 选项中选择“软件” ,而不是“自动”或“硬件”
答案 4 :(得分:0)
简单的解决方案。 删除android文件夹。 重新安装android sdk。 删除用户文件夹内的avd设置。 创建新的AVD。