最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android自动化:采用Web方式实现某音未读消息检查与采集
时间:2026-06-03 11:45:01 编辑:袖梨 来源:一聚教程网
本篇文章详细展示如何通过Web项目编写Android自动化逻辑,并将其运行于AssistsX平台,最终实现某音App未读消息的检测与列表采集。以下将逐步呈现完整的实现流程。
最终实现的功能很明确:
- 自动打开某音App
- 检查底部消息Tab是否有未读数
- 进入消息列表,逐页收集未读会话
- 解析昵称、未读数量、最后一条消息和消息时间
- 在日志浮窗中实时显示执行结果
Web方式需要什么
此项目并非开发原生Android App,而是构建一个Web插件,交由AssistsX在Android端加载并运行。先明确所需条件,后续再逐步完成项目创建、插件加载与自动化逻辑编写。
需要哪些平台
需要两个端:
- 电脑端:用于开发Web项目,启动Vite dev server
- Android手机端:安装AssistsX,并开启无障碍服务
整体链路是:Vue页面和assistsx-js逻辑运行在AssistsX的WebView中,再由AssistsX调用Android无障碍能力去操作某音App。
需要集成哪些库
核心库是assistsx-js,它负责连接Web端代码与Android自动化能力,常用功能包括:
- 查找节点:
findById、findByTags - 操作节点:点击、滚动
- 步骤编排:
Step.run、step.next - 浮窗和日志:用于显示执行过程
Web项目用什么框架
此项目采用Vue 3、Vite、TypeScript、Vue Router与assistsx-js。本质上它仍是一个前端项目,不过运行环境并非普通浏览器,而是AssistsX内置的WebView。
创建Web项目
从零构建assistsx-js项目,可直接使用脚手架创建:
npx create-assistsx-vue@latest my-app
cd my-app
npm run dev
该命令会生成一个Vue 3 + Vite + TypeScript项目,并预装assistsx-js、路由、日志浮窗、测试面板及基础Step代码。后续只需将默认步骤替换为自定义的自动化逻辑即可。
若需在当前目录初始化,也可这样操作:
mkdir my-app && cd my-app
npx create-assistsx-vue@latest --here
npm run dev
本文涉及的某音未读消息功能,正是在类似的项目结构上继续实现的。
若已拉取本文源码,则进入项目后安装依赖:
npm install
然后启动开发服务:
npm run dev
项目已将Vite配置为局域网可访问,当手机与电脑处于同一Wi-Fi时,手机可直接访问;电脑IP>:5173。
配置插件信息
AssistsX加载插件时会读取public/config.json,其中包含插件名称、入口文件、图标等信息:
{
"name": "Message Automation",
"packageName": "com.dy.automation.example",
"index": "index.html",
"icon": "icon.png"
}
此处的index对应Web项目的入口页面,packageName是插件自身的包名标识,而非目标App的包名。
安装平台并加载插件
手机端需先安装AssistsX:
- 安装后打开无障碍服务
- 手机与电脑保持在同一个局域网
在AssistsX中使用局域网加载插件的步骤如下:
- 电脑先执行
npm run dev,确保手机与电脑处于同一Wi-Fi - 打开AssistsX,点击首页“+”
- 选择“扫描局域网”,等待扫描结果
- 找到本项目的dev地址(
;电脑IP>:5173),点击“安装” - 返回首页,即可看到插件,点击启动
分析某音页面节点
编写Android自动化最关键的步骤并非直接编码,而是先分析页面节点。例如,要点击底部的“消息”,或判断某一行是否为未读消息,必须先了解这些控件在无障碍节点中的表现形式。此处借助的是AssistsX的节点分析服务。
常规做法如下:
- 手机端打开某音,停留在待分析的页面(如首页或消息列表页)
- 在AssistsX中开启节点分析
- 电脑浏览器访问AssistsX提供的局域网分析地址
- 在节点树中查找目标控件
分析时重点查看以下字段:
className:控件类型,例如android.widget.Button、android.widget.TextViewtext:界面显示的文字,例如底部消息Tab上的未读数字des:无障碍描述,某音消息行常将昵称、未读数、最后一条消息拼接于此id:资源ID,某些页面可直接用于定位
掌握这些信息后,代码中可使用findByTags、findById、filterDes查找节点。这种方式比硬编码坐标更稳定,页面尺寸或手机分辨率变化时也不易失效。

实现功能入口
插件主页仅放置两个入口:
- 检查未读消息
- 获取未读消息列表
按钮点击后会打开一个日志浮窗,并通过query传递要执行的动作:
void float.open(`/examples/log-panel?action=${action}`, {
showBottomOperationArea: true,
})
日志浮窗负责两项任务:一方面显示执行日志,另一方面启动自动化流程。
启动流程的代码大致如下:
await Step.run(appLaunch.launch, {
data: {
appName: "DY",
packageName: "com.ss.android.ugc.aweme",
finishMethod: douyinMain.checkMainPage,
...flowData,
},
});
此处从appLaunch.launch开始,负责拉起某音。启动成功后,进入douyinMain.checkMainPage,继续判断当前是否处于某音首页。
实现自动化流程
代码主要位于src/steps/目录下。所有逻辑未集中在一个函数中,而是拆分为多个步骤,通过step.next()依次向下执行。
大致流程如下:
启动某音
↓
确认回到某音首页
↓
检查底部消息Tab未读数
↓
如需收集列表,点击消息Tab
↓
消息列表滚动到顶部
↓
逐页收集未读消息
检查未读消息较为直接:找到底部导航中的“消息,按钮”,再查看其附近是否存在纯数字的TextView。有数字则代表有未读。
收集未读消息列表相对复杂。进入消息列表后,先查找屏幕中的RecyclerView,再遍历其中的消息行。消息行本身通常为android.widget.Button,未读角标位于右侧,具体内容包含在该行的des中。
例如,节点描述可能如下:
早上好咸鱼翻面,未读1条消息,hgff8分钟前
互动消息,未读1条消息,咸鱼翻面 近期访问过你的主页05/13
需从中解析出四个字段:
nickname:昵称unreadCount:未读数量lastMessage:最后一条消息内容time:消息时间,最终转换为时间戳
若des中不包含“未读X条消息”,则说明该行非未读消息,直接跳过。
列表滚动时存在一个常见问题:上下页之间可能重复扫描到同一条消息。因此收集时会将已获取的数据存入类变量,若nickname、unreadCount、lastMessage、time四个字段均相同,则视为重复数据并跳过。
日志中最终展现的效果类似于:
【未读消息】
昵称:早上好咸鱼翻面
未读:1条
内容:hgff
时间:2026-05-30 08:12:00
运行功能
运行前需满足以下条件:
- Android手机上安装AssistsX,并开启无障碍服务
- 手机已安装某音App
- 电脑与手机处于同一局域网
- 本机具备Node.js环境
启动项目:
npm install
npm run dev
插件安装完成后,在AssistsX首页打开即可。进入插件后,点击“检查未读消息”或“获取未读消息列表”开始运行。
运行过程中,日志浮窗将持续显示当前执行进度。若流程出现偏差,或需手动停止,可点击浮窗中的“停止”按钮,内部调用:
Step.stop()
若仅想快速查看效果,也可直接在AssistsX的插件商店中搜索并安装本文实现的功能,无需本地启动Web项目。
源码
完整源码存放于相关仓库中。
合规说明
以上步骤完整呈现了从项目创建到自动化流程运行的整个过程,旨在为读者提供一种基于Web技术实现Android自动化的实践参考。实际使用时请遵守相关平台规则与法律法规,避免用于违规采集、骚扰或其他不合规场景。
相关文章
- RoboTrustBench:四类场景评估机器人操作视频世界模型可信度 06-03
- 失控进化地形全览 失控进化各地形攻略 06-03
- 失控进化地基怎么制作 失控进化地基详解 06-03
- Sympatheia:基于连续情感调节的自适应语音助手 06-03
- 卡厄思梦境布莱亚技能详解 06-03
- 卡厄思梦境泽塔技能说明 06-03