我在VM(Debian稳定版)中使用Docker。我想在Docker容器中为x86_64运行Android模拟器。

这是Docker镜像的构建方式:

FROM debian:stable

RUN apt-get update && apt-get install --yes curl unzip openjdk-8-jdk libqt5widgets5

RUN useradd foo --shell /bin/bash --create-home --user-group
USER foo

WORKDIR /home/foo
RUN curl --output sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
RUN unzip sdk-tools-linux.zip && rm sdk-tools-linux.zip
RUN yes | tools/bin/sdkmanager 'system-images;android-24;default;x86_64' 'emulator' 'build-tools;26.0.1' 'platform-tools' 'platforms;android-24'
RUN echo no | tools/bin/avdmanager create avd --package 'system-images;android-24;default;x86_64' --name android-x86_64

在容器内像这样启动仿真器时:
emulator/emulator -avd android-x86_64 -no-window -no-audio -no-boot-anim -no-accel -gpu off

我收到以下错误:
emulator: WARNING: encryption is off
emulator: WARNING: x86_64 emulation may not work without hardware acceleration!
path /home/foo/.android/avd/android-x86_64.avd/system.img.qcow2
qemu-system-x86_64: -device virtio-blk-pci,drive=system,iothread=disk-iothread,modern-pio-notify: ioeventfd is required for iothread

它似乎与硬件加速有关(是吗?)。不管这种环境的目的(VM内的Docker内部的仿真器),是否有可能在这样的上下文中运行仿真器?我该如何解决我的问题?

谢谢,

最佳答案

我们正在使用(或尝试使用)完全相同的方案进行自动化测试。

问题:x86和x86_64仿真器需要硬件加速。硬件加速(VT-X或AMD-V)通常在虚拟环境中不可用(请参阅:https://askubuntu.com/questions/328748/how-to-enable-nested-virtualization-in-ubuntu)

这意味着您最好的选择是使用ARM仿真器,这确实很慢。在VM内的Docker内部运行此命令的速度甚至会更慢。

您可以这样创建模拟器:

# NOTE: Must use ARM, since x86 requires hardware acceleration, which is not available inside
# a docker container running inside a virtual machine
echo no | ${ANDROID_HOME}/tools/bin/avdmanager create avd \
 --abi "armeabi-v7a" \
 --device 'Nexus 4' \
 --force \
 --name arm_emulator \
 --package "system-images;android-25;google_apis;armeabi-v7a" \
 --sdcard 64M

然后,您可以像这样启动仿真器:
${ANDROID_HOME}/emulator/emulator \
 -avd arm_emulator \
 -gpu swiftshader_indirect \
 -memory 512 \
 -no-audio \
 -no-boot-anim \
 -no-window &

在我的本地计算机上的Docker内部运行此代码,模拟器需要大约4-5分钟的时间来完成引导。当Docker环境在VirtualBox中运行时,它会变得更慢。

即使可以正常工作,通过ADB安装应用程序之类的某些命令也会因为花费太长时间而失败。

如果可能的话,最好是与虚拟机(例如,在同一主机上)并行启动仿真器,然后通过网络连接到仿真器,这是一个更好的选择。

关于android - 无法在Docker容器中启动Android仿真器x86_64(在VM中),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46071235/

10-10 19:47