我需要在 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/