Docker内通过Appium连接并操作Android手机

Docker内通过Appium连接并操作Android手机。

该过程需要的综合知识较多,适用于有一定Android和Appium开发经验的人员。

环境

  1. 主机环境: Mac Mini 2018 Catalina 10.15.7
  2. 虚拟机软件:VMware Fusion Pro 12
  3. 虚拟机:Ubuntu 20.04

其中主机上已完整配置Android SDK、android-platform-tool等工具。

目标

运行在Ubuntu 20.04中的Docker容器可以连接并通过Appium操作Android手机。

步骤

1. 准备Appium Docker镜像

方式1:自己从头配置,需要配置NodeJS、Appium、Java SDK、android sdk等。

方式2. 直接使用预配置好的Docker镜像,参考appium docker android

我使用的是方式2,跟参考链接中的步骤不太一样,主要是关于docker-machine方面的,一是因为这个包太老了,二是需要额外安装配置VirtualBox,太麻烦,而且最后还失败了。所以我最终选择使用VMware,并通过它连接USB设备。

使用以下命令构建Appium Docker镜像

git clone https://github.com/appium/appium-docker-android.git
cd appium-docker-android
docker build -t "appium/appium:local" -f Appium/Dockerfile Appium

过程中因为需要配置android相关的东西,所以需要科学上网。

2. 复制/映射android相关文件到虚拟机

由于Android手机此前已在Mac上连接过并已生成相关key,所以我直接把用户主目录下的.android文件夹复制/映射到虚拟机里/root/.android

3. 连接Android手机

将手机通过USB连接到主机,此时VMware会提示是连接到Mac还是Linux,我们选Linux。

如果手机已经连接到了Mac,那么在虚拟里的设置->可移除设备->USB和蓝牙,把Android设备勾选上,这样一来Android设备就分配给虚拟机了。

4. 启动Appium容器

docker run -it --privileged  -p 4723:4723 -v /root/.android/:/root/.android/ -v /dev/bus/usb:/dev/bus/usb --name appium appium/appium

有三个参数需要注意下,一是--privileged特权方式启动,另外两个是映射的android目录和所有usb设备。另外-it是要加上的,不然容器会自动退出。

5. 查看连接信息

执行以下命令

docker exec -it container-appium adb devices

如果Android手机出现在列表中,则表示成功了!

实例截图

接下来就可以使用你喜欢的Appium脚本去操作手机了!

后记

  1. 可以同时启动多个Appium容器,虽然实际意义不大。

  2. 如果有多个主机抢占一台手机,已连接的主机需要先停掉adb server才能被其它主机连接,相关命令adb kill-server

  3. 同时操作多台手机,需要开多个appium进程,每个用不同的端口。而开多个Appium容器,每个容器连接一个手机的方案貌似行不通。

  4. 如果主机上具备Android及Appium开发环境,那么通过Docker中的appium去操作手机纯属多此一举。但是对于群晖DSM这种系统,主机上不好配置Android环境,这样一来能通过Docker去实现,意义就很重大了。另外这种方式有个优点:快速复制,只要主机支持Docker和USB即可。

Leave a Comment

豫ICP备19001387号-1