群控实现的从技方式我了解的大体有两种(你的系统也可以兼备)
- 方案一:基于ADB+集线器+AutoJS+QtScrcpy,依赖ADB和AutoJs的术角索安思路能力,实现基本ADB指令的度探下发,可指定设备
- 方案二:基于AutoJS+WebSocket+QtScrcpy,卓群依赖无障碍+网络互联能力,控实实现脚本指令的基本下发
注意点:
1.整体缺乏对中文的支持,一切命名尽量英文为宜,从技否则可能无法执行(或者你配置了中文支持)
2.开启USB调试(不同机型可能还会要求SIM卡等,术角索安思路才能打开完整的度探USB调试功能,请注意)
3.开启无障碍服务(开启悬浮框权限、卓群后台弹出权限、控实安装未知应用权限等)
方案一:基于ADB+AutoJS+QtScrcpy
1.查看设备的基本接入
adb deivices
2.指定设备执行操作
adb -s [deviceId] ....
3.ADB基础指令
基础指令大全,协助你执行单个基础操作
基本用法命令语法为命令指定目标设备启动/停止查看 adb 版本以 root 权限运行 adbd指定 adb server 的从技网络端口设备连接管理查询已连接设备/模拟器USB 连接无线连接(Android11 及以上)无线连接(需要借助 USB 线)无线连接(无需借助 USB 线)应用管理查看应用列表所有应用系统应用第三方应用包名包含某字符串的应用安装 APK卸载应用清除应用数据与缓存查看前台 Activity查看正在运行的 Services查看应用详细信息查看应用安装路径与应用交互启动应用/ 调起 Activity调起 Service停止 Service发送广播强制停止应用收紧内存文件管理复制设备里的文件到电脑复制电脑里的文件到设备模拟按键/输入电源键菜单键HOME 键返回键音量控制媒体控制点亮/熄灭屏幕滑动解锁输入文本查看日志Android 日志按级别过滤日志按 tag 和级别过滤日志日志格式清空日志内核日志查看设备信息型号电池状况屏幕分辨率屏幕密度显示屏参数android_idIMEIAndroid 系统版本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.AdbCommandRejectedExceptionadb 的非官方实现
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
- 以上指令的格式是: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
- 可供学习的参考项目