windows docker 容器中的 ADB 设备为空

ADB devices is empty in windows docker container

这是 adb devices 在 docker 容器中的输出(windows 服务器映像 - 主机也是 win 10)

PS C:\> adb devices
List of devices attached

PS C:\>

我需要为 Xamarin 项目创建 CI,除了我需要通过 adb 在 phone 上安装应用程序的部分外,其他都已完成....直到现在我发现没有从 win docker contaienr 中使用 adb 的解决方案(对于 linux,可以选择 --privileged -v /dev/bus/usb:/dev/bus/usb,但切换到 Linux 不是一个选项(由于公司决定))

在 android 5 或 6 之前,您需要 adb 的驱动程序。大多数品牌都在其网站上提供免费下载。

如果您还没有这样做,您应该在 phone.[=10] 的开发者选项中通过 USB 启用 Adb-Debugging =]

ADB 可以通过 WiFi 连接到设备,从网络方面来说 Docker 应该不会造成任何问题,只要 Docker 主机的网络可以将流量发送到Android 设备的网络(如果它们是同一个网络,那么答案肯定是)。

首先确保 Docker 主机可以通过 WiFi 网络访问您的设备。像从 Docker 主机 pinging 你的 Android 设备的 IP 这样的测试是可行的。之后,使用 Docker 主机(不是容器中的主机)上的 ADB 通过 WiFi 启动 ADB。

adb tcpip 5555

完成后,在容器中打开终端并使用容器内的 ADB 连接到 Android 设备。

adb connect <ip-address-of-android-device>

adb devices

通常,当从“un-trusted”机器建立新连接时,设备会要求用户确认连接并“信任”该机器。 adbkey 在机器上的 %userProfile%/.android 下创建,设备在第一次连接后每次建立信任时都使用该机器建立信任,这样用户就不需要每次都确认连接时间。将 adbkey 复制或批量绑定到 <container_userProfile_directory>/.android,这样设备就不会每次都请求用户确认连接。

对于 adb,您必须使用 EXPOSE 5037(默认)在 Dockerfile 中打开 TCP 端口。