我需要在docker image中包含现有的android模拟器,其中包含的更改(qcow2 files)。
测序:
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 Image
2)运行Docker命令:
sudo docker run -d -p 5900:5900 -p 5555:5555 --privileged -v /dev/kvm:/dev/kvm --name xposed xposed
3)运行Android Emulator命令:
usr/local/android-sdk/emulator/emulator -avd xposed -noaudio -no-window -gpu off -verbose -qemu -usbdevice tablet -vnc :0
我真的不知道该怎么办。这是真实的,有一次有运气,我明白了,它运行良好,但是我失去了这种状态,现在什么也没有发生:(
顺便说一句,在正常行为中,我会遇到一个错误,例如:
avdsystem.img.qcow2,read-only: Could not open backing file: Could not open .....
但是现在没有错误,它只是覆盖我的文件:(
我在将仿真器从主机复制到docker容器时也遇到了相同的问题:docker内部的仿真器总是会(在最好的情况下)清洁我的变化。这就是我解决问题的方式:
- 我在Docker容器内启动了仿真器,然后在模拟器运行时安装了所需的所有内容(Xposed,Custom Apks等)。
- 按照我想要的方式设置模拟器后,我关闭了如果关闭并将
/root/.android/avd/<emulator name>
目录从Docker容器复制到主机计算机(使用docker cp
命令)。这样,我获得了模拟器的备份副本,并使用Docker使用的所有自定义设置。 - 我构建了一个新的Docker映像,其中包含运行模拟器所需的所有SDK内容和工具,然后将先前保存的
/root/.android/avd/<emulator name>
目录添加到图像中。现在,当我从新图像启动Docker容器时,我有一个工作模拟器,其中所有需要的设置。
奖励提示:如果要使用模拟器的快照功能,则必须将容器中的更改提交为新映像(请参阅docker commit
命令),然后使用该新图像,只需复制avd
目录即可在这种情况下工作,您的快照将永远被忽略。