• 从技术角度探索安卓群控实现的基本思路


    群控实现的方式我了解的大体有两种(你的系统也可以兼备)

    • 方案一:基于ADB+集线器+AutoJS+QtScrcpy,依赖ADB和AutoJs的能力,实现基本ADB指令的下发,可指定设备
    • 方案二:基于AutoJS+WebSocket+QtScrcpy,依赖无障碍+网络互联能力,实现脚本指令的下发

    注意点:
    1.整体缺乏对中文的支持,一切命名尽量英文为宜,否则可能无法执行(或者你配置了中文支持)
    2.开启USB调试(不同机型可能还会要求SIM卡等,才能打开完整的USB调试功能,请注意)
    3.开启无障碍服务(开启悬浮框权限、后台弹出权限、安装未知应用权限等)

    方案一:基于ADB+AutoJS+QtScrcpy

    1.查看设备的接入

    adb deivices
    
    • 1

    2.指定设备执行操作

    adb -s [deviceId] ....
    
    • 1

    3.ADB基础指令

    基础指令大全,协助你执行单个基础操作

    基本用法
    命令语法
    为命令指定目标设备
    启动/停止
    查看 adb 版本
    以 root 权限运行 adbd
    指定 adb server 的网络端口
    设备连接管理
    查询已连接设备/模拟器
    USB 连接
    无线连接(Android11 及以上)
    无线连接(需要借助 USB 线)
    无线连接(无需借助 USB 线)
    应用管理
    查看应用列表
    所有应用
    系统应用
    第三方应用
    包名包含某字符串的应用
    安装 APK
    卸载应用
    清除应用数据与缓存
    查看前台 Activity
    查看正在运行的 Services
    查看应用详细信息
    查看应用安装路径
    与应用交互
    启动应用/ 调起 Activity
    调起 Service
    停止 Service
    发送广播
    强制停止应用
    收紧内存
    文件管理
    复制设备里的文件到电脑
    复制电脑里的文件到设备
    模拟按键/输入
    电源键
    菜单键
    HOME 键
    返回键
    音量控制
    媒体控制
    点亮/熄灭屏幕
    滑动解锁
    输入文本
    查看日志
    Android 日志
    按级别过滤日志
    按 tag 和级别过滤日志
    日志格式
    清空日志
    内核日志
    查看设备信息
    型号
    电池状况
    屏幕分辨率
    屏幕密度
    显示屏参数
    android_id
    IMEI
    Android 系统版本
    IP 地址
    Mac 地址
    CPU 信息
    内存信息
    更多硬件与系统属性
    修改设置
    分辨率
    屏幕密度
    显示区域
    关闭 USB 调试模式
    允许/禁止访问非 SDK API
    状态栏和导航栏的显示隐藏
    实用功能
    屏幕截图
    录制屏幕
    重新挂载 system 分区为可写
    查看连接过的 WiFi 密码
    设置系统日期和时间
    重启手机
    检测设备是否已 root
    使用 Monkey 进行压力测试
    开启/关闭 WiFi
    刷机相关命令
    重启到 Recovery 模式
    从 Recovery 重启到 Android
    重启到 Fastboot 模式
    通过 sideload 更新系统
    安全相关命令
    启用/禁用 SELinux
    启用/禁用 dm_verity
    更多 adb shell 命令
    查看进程
    查看实时资源占用情况
    查看进程 UID
    其它
    常见问题
    启动 adb server 失败
    com.android.ddmlib.AdbCommandRejectedException
    adb 的非官方实现
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101

    4.与AutoJS结合

    • AutoJs从4.1开始,就关闭免费版本的使用,开始了45元一次性买入的AutoJsPro,如果有长期使用需求的建议购买(付费版本更为可靠有效)
    • AutoXJs作为AutoJs4.X后换人维护的持续开源版,也可以尝试,目前使用与AutoJs表象一致,可尝试

    可使用 adb 进行手机 Autojs 的安装或批量安装:
    adb -s [deviceId] install apk在电脑上的路径

    • 使用intent的方式,向手机发送需要执行的JS脚本文件,JS脚本语法见
    adb -s [deviceId] shell am start -n org.autojs.autoxjs.v6/org.autojs.autojs.external.open.RunIntentActivity -d file:///storage/emulated/0/Autojs/Test/Test1.js -t text/javascript
    
    • 1
    • 以上指令的格式是:adb -s [deviceId] shell am start -n [packageName]/[className] -d [filePathOnPhone] -t text/javascript
    • 其中包名和类名,我这边是使用autoxjs的版本,所以在源代码中找到类名,包名的获取有点周折,我是获取了autoxjs的启动activity的日志,才找到了包名,与源码中对应的包名并不一样,如果不一致就会出现提示你 Activity not exist的问题
    • 对于 AutoJSPro / AutoJs 的版本可以参考包名/类名:org.autojs.autojs/.external.open.RunIntentActivity,因为版本不同,不确定后期会有所变化
    • 针对手机上的JS脚本文件,可以在 Autoxjs 的APP中书写,也可以在电脑上书写后push过去
    • 表面的原理看着像是依赖adb网络调试的端口进行操控的,未实际研究(setprop service.adb.tcp.port 5555)
    • 本人的测试是可以将使用adb指令执行JS文件脚本:打开APP执行自动操作

    5.关于投屏与控制

    以上就是实现批量控制的思路,对于其他需要页面上实时回传手机画面的:

    • 有使用adb截屏回传的(USB):无额外侵入,但是效率低,如果只是监控级别看一下屏幕是可以尝试的
    • 有集成开源的安卓投屏软件QtScrcpy(WIFI/USB):主打低延迟,能够托管鼠标和键盘,同步手机画面,现在开源、功能挺强、使用人群较多,可以尝试,

    方案二:WebSocket+AutoJS+QtScrcpy

    • WebSocket 的方案起源于 VsCode 可以使用 AutoJS 的插件,通过WiFi互联对手机进行 debug
    • 依赖这样的思路,借用 VsCode AutoJS 的连接的实现原理,就可以复刻这样的思路,将本地脚本在手机上进行 debug
    • 同样可以根据websocket的端口指定具体的手机
    • 此外,如果需要同方案一样进行页面投屏与控制,也可以引入QtScrcpy
    • 可供学习的参考项目
  • 相关阅读:
    【教3妹学编程】消息队列的使用场景有哪些?
    C#_Win32_PInvoke源码生成器
    面试问题整理总结
    前端用 js-file-download组件下载后端返回的pdf,word,excel文件
    【有趣分享】火柴人VS数学
    【堆】Leetcode 347. 前 K 个高频元素【中等】
    Linux系统目录结构
    443-C++基础语法(121-130)
    【斯坦福计网CS144项目】Lab4: TCPConnection
    python习题001-----分支结构
  • 原文地址:https://blog.csdn.net/c_zyer/article/details/126967741