• sonic云真机通过linux系统接入苹果手机


    背景

    前期基于sonic部署搭建了在线云真机系统,基于成本考虑,想通过linux系统承载ios手机,也就是ios手机需要挂载在linux上,并通信,那需要用到usbmuxd,这是USB协议上实现多路TCP连接,将USB通信抽象为TCP通信媒介。

    实操

    系统:ubuntu20.04LTS、iPhone11
    思路:确保宿主机中usbmuxd运行,并通过容器映射后获取信息,然后通过苹果电脑安装在iPhone上的wda操作(iPhone装完wda后就可以脱机了)

    1、安装所需环境:确保宿主机安装好usbmuxd,并确认usbmuxd运行
    先安装

    apt install usbmuxd
    
    • 1

    如果安装后ps -ef | grep usbmuxd无法获取到运行情况,可以usbmuxd运行或直接重启sudo reboot,一般重启后就能发现服务已启动,见下

    ####@####-CR160:~/sonic-agent$ ps -ef | grep usbmuxd
    usbmux      4444       1  0 10:38 ?        00:00:00 /usr/sbin/usbmuxd --user usbmux --systemd
    iottest    15086    1896  0 10:52 pts/0    00:00:00 grep --color=auto usbmuxd
    
    
    • 1
    • 2
    • 3
    • 4

    2、接入苹果手机:通过数据线接入苹果手机(linux–usb集线器–数据线–苹果手机),
    过程可能手机会弹出是否信任窗口,点击信任即可
    在这里插入图片描述
    在这里插入图片描述

    3、确认是否接入成功:以上操作后,可以发现拔插苹果手机,linux系统已经有显示挂载后的图标,见下则挂载进去了
    在这里插入图片描述

    sonic系统接入真机

    思路:确保agent节点ios配置开启,WDA_BUNDLE_ID对应手机wda
    系统相关:
    sonic:1.5.0-release,docker部署

    JAVA_HOME: /root/jdk-15.0.2+7
    java version: 15.0.2
    ANDROID_HOME: /root
    ADB path: /root/platform-tools/adb
    ADB version: Android Debug Bridge version 1.0.41
    Version 33.0.3-8952118
    Installed as /root/platform-tools/adb
    chromeDriver path: /usr/bin/chromedriver
    chromeDriver version: ChromeDriver 105.0.5195.52 (412c95e518836d8a7d97250d62b29c2ae6a26a85-refs/branch-heads/5195@{#853})
    Node path: /usr/bin/node
    Node version: v12.22.12
    npm path: /usr/bin/npm
    npm version: 6.14.16
    adbkit path: /usr/bin/adbkit
    adbkit version: 2.11.1
    Appium path: /usr/bin/appium
    Appium version: 1.22.0
    System: linux
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    启动节点后观察节点上手机情况:

    sudo docker logs -f sonic-agent_sonic-agent_1
    
    • 1

    检测agent日志中ios启动情况:

    2022-09-18 02:41:32.522 - INFO 1 --- [main] o.cloud.sonic.agent.bridge.ios.SibTool   : iOS devices listening...
    2022-09-18 02:41:32.522 - INFO 1 --- [main] o.cloud.sonic.agent.bridge.ios.SibTool   : Enable iOS Module
    2022-09-18 02:41:32.787 - INFO 1 --- [pool-3-thread-1] o.cloud.sonic.agent.bridge.ios.SibTool   : iOS Devices: 00008030-####### ONLINE!
    巴拉巴拉......
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    在这里插入图片描述
    此时进入容器,可以发现

    root@####-CR160:~# cd plugins/
    root@####-CR160:~/plugins# ls
    sonic-android-apk.apk  sonic-android-scrcpy.jar  sonic-go-mitmproxy  sonic-go-mitmproxy-ca-cert.cer  sonic-go-mitmproxy-ca-cert.pem  sonic-go-mitmproxy-ca.pem  sonic-ios-bridge  yadb
    root@iottest-CR160:~/plugins# ./sonic-ios-bridge devices
    00008030-#### online
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果usbmuxd配置有问题,则会显示

    Error:failed connecting to [usbMux], you can use 巴拉巴巴等......
    
    • 1

    可以在确保宿主机运行usbmuxd情况下,重启agent即可,如果重启存在问题,可以参考以下解决:

    可能会冲突的问题:
    1、如果一直运行着的容器中是已经映射了usbmuxd,会引发以下挂载冲突的映射问题

    ####@####-CR160:~/sonic-agent$ sudo docker-compose restart
    Restarting sonic-agent_sonic-agent_1 ... error
    
    ERROR: for sonic-agent_sonic-agent_1  Cannot restart container c479ad7995c0dea6189daa249322e4929be89a82cefd46caf787e97c37f9187f: failed to create shim: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/var/run/usbmuxd" to rootfs at "/var/run/usbmuxd": mount /var/run/usbmuxd:/var/run/usbmuxd (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
    
    • 1
    • 2
    • 3
    • 4

    可以先vim docker-compose.yml,先把usbmuxd映射相关的注释后,启动sonic-agent_sonic-agent_1,确认容器启动正常后,查看日志无误,再次加上usbmuxd映射后启动

    sudo docker-compose up -d
    
    • 1

    2、苹果连接上了,但是投屏只转圈,然后日志显示WDA_BUNDLE_ID not in your devices,这个标识wda的标识配置有误,核对后修改agent中的WDA_BUNDLE_ID后重启即可

    3、有个奇怪的现象,就是usbmuxd这个当一台苹果手机都没连接时,容器中默认无法读取到拔插后的苹果设备。
    当确保ps -ef | grep usbmuxd进程存在时,可以发现,只有一台苹果接入时,拔插后,设备变成不在线,必须要至少保证拔插后存在一台设备是连接中的状态(即至少2台苹果接入)才能使得拔插后,usbmuxd不会挂掉!!!

    4、如果其他都操作都正常,还是获取不到设备信息,则kill -9 进程号再reboot一下看看效果。

  • 相关阅读:
    向量数据库,展望AGI时代
    Windows YOLOv5-Libtorch部署
    聚焦“硬核”技术,开放原子开源大赛苏州站圆满落幕
    数学建模学习(92):Jaya 算法对定位问题进行寻优
    分布式与集群,二者区别是什么?
    Vue3.0学习笔记
    Amazon Lightsail——兼具亚马逊云科技的强大功能与 VPS 的简易性
    Java编程学习-MySQL(函数)
    武汉理工大学 Python程序设计第七章测验
    Spring Security loadUserByUsername传递多个参数
  • 原文地址:https://blog.csdn.net/LiXueFu727224204/article/details/126914938