android - 将现有的 Android 模拟器 (AVD) 移动到 Docker 容器

标签 android docker android-emulator android-virtual-device qemu

我需要在 docker 镜像中包含现有的 android 模拟器及其中包含的更改(qcow2 文件)。

测序:

1) 通过Android Studio创建模拟器

2) 使用-writable-system 选项运行它

emulator -avd xposed -writable-system

3) 进行必要的更改(Xposed 安装、一些xposed 模块、SD 卡上的数据记录等)。所有这些更改写入 qcow2 文件(system.img.qcow2、sdcard.img.qcow2 等)

4) 停止模拟器

5) 存档

cd /home/user/.android/avd && tar -cvzf xposed.tar.gz .

6) 在docker文件中:

ADD xposed.tar.gz /root/.android/avd

7) 在xposed.ini 中更改模拟器实例的绝对路径

path=/root/.android/avd/xposed.avd

当尝试在 docker 中运行模拟器时 - 重新创建有更改的 qcow2 文件而不是使用现有文件。 :(

我得到相同的 android-sdk 工具和模拟器版本,相同的 JDK 等等。

还尝试将 harware-qemu.ini 中的路径更改为新路径 (/root/.android/avd/xposed/....) 但没有成功。

关于系统和docker的一些信息:

1) Android 版本 23 (6.0) x86 google_apis 图片

2)运行docker命令:

sudo docker run -d -p 5900:5900 -p 5555:5555 --privileged -v /dev/kvm:/dev/kvm --name xposed xposed

3) 运行安卓模拟器命令:

usr/local/android-sdk/emulator/emulator -avd xposed -noaudio -no-window -gpu off -verbose -qemu -usbdevice tablet -vnc :0

我真的不知道该怎么办。这是真的,有一次运气好,我得到了它并且工作得很好,但我失去了这种状态,现在什么也没有发生:(

顺便说一句,在正常行为中我会得到一个错误,比如:

avd\system.img.qcow2,read-only: Could not open backing file: Could not open .....

但现在没有错误,它只是覆盖了我的文件:(

最佳答案

我在将模拟器从主机复制到 docker 容器时遇到了同样的问题:docker 中的模拟器总是会像恢复出厂设置一样干净地启动(在最好的情况下),忽略我的所有更改。这就是我解决问题的方法:

  • 我在 docker 容器中启动了模拟器,并在模拟器在 docker 中运行时安装了我需要的一切(Xposed、自定义 apk 等)。
  • 按照我想要的方式设置模拟器后,我关闭 if 并将 /root/.android/avd/<emulator name> 目录从 docker 容器复制到主机(使用 docker cp 命令)。通过这种方式,我获得了模拟器的备份副本,其中包含可与 docker 一起使用的所有自定义设置。
  • 我构建了一个新的 docker 镜像,其中包含运行模拟器所需的所有 sdk 内容和工具,并将之前保存的 /root/.android/avd/<emulator name> 目录添加到镜像中。现在,当我从新图像启动一个 docker 容器时,我有一个工作模拟器,其中包含我需要的所有设置。

额外提示:如果你想使用模拟器的快照功能,你必须将容器中的更改提交到一个新镜像(参见 docker commit 命令),然后使用该新镜像,简单地复制 avd 目录不会在这种情况下工作,您的快照将始终被忽略。

关于android - 将现有的 Android 模拟器 (AVD) 移动到 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46412936/

相关文章:

java - Android 方式添加新的 xml 布局

android - 线性布局不包裹内容

javascript - React native android 应用程序已停止

linux - 由于系统中打开的文件太多,Kubernetes 无法启动

android - 如何通过命令行查找设备的 Android 操作系统版本?

android - 在外部应用程序中打开 pdf

java - 无法访问暴露端口上的 docker 容器化 Java Web 应用程序

docker - Ansible 中如果变量为空,如何省略?

Android Studio : The Mesa software renderer is deprecated. 使用Swiftshader进行软件渲染

android-studio - Android Studio DDMS 无法在模拟器手机中打开/data 文件夹