将现有Android模拟器(AVD)移至Docker容器

时间:2017-09-25 19:38:39

标签: android docker android-emulator avd 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)在泊坞窗文件中:

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/....),但没有运气。

有关系统和泊坞窗的一些信息:

1)Android版本23(6.0)x86 google_apis image

2)运行docker命令:

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

3)运行android模拟器命令:

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 .....

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

1 个答案:

答案 0 :(得分:1)

将仿真器从主机复制到docker容器时遇到了同样的问题:docker中的仿真器总是在工厂重置后启动(在最好的情况下)清理,忽略所有更改。这就是我解决问题的方法:

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

额外提示:如果要使用模拟器的快照功能,则必须将容器中的更改提交到新映像(请参阅docker commit命令),然后使用该新映像,只需复制<{1}}目录在这种情况下不起作用,您的快照将始终被忽略。