一、问题的提出
做过销售、营销的同学都知道,手机联系人少于一千都不好意思打招呼。大量的联系人占用了手机内存,导致手机运行越来越慢。而这些联系人中有很多已经删除了我们,或者已经拉黑了我们——如何快速把这些已经删除或拉黑我们的联系人找出来并删除,是优化手机速度很重要的手段。
传统的做法是手动逐个检查联系人,效率极低。本文介绍一种自动化方案,通过脚本实现自动挑选w信黑名单的功能。以下代码在红米9A、8A上测试通过。
二、API简介
自动化平台提供了一套完整的自动化操作API,主要包括以下核心函数:
-
launchApp(packageName):启动指定包名的应用
-
smartFindView(condition, options):智能查找界面元素,支持文本、类名等多种条件
-
findView(condition, options):查找单个视图元素
-
switchPage(fromText, toText, options):页面切换与状态检测
-
click(view, options):点击指定视图
-
scroll(direction, options):滚动视图
-
gestureClick(x, y, options):模拟手势点击指定坐标
-
back2Page(targetText, options):返回至目标页面
这些API构成了自动化脚本的基础能力。与常见的UI自动化框架不同,冰狐API针对Android应用的特点进行了深度优化,特别是在w信这类复杂应用中的元素识别和状态判断方面表现出色。
三、核心设计思路
整个脚本的核心逻辑可以分为以下几个阶段:
3.1 启动与登录检测
脚本首先通过launchApp('com.tencent.mm')启动w信。启动后通过smartFindView('txt:发现', {failed: exitPopup, maxStep: 30})检测是否成功进入w信主界面。这里用到了冰狐API的failed回调机制——如果查找失败,自动执行exitPopup函数处理可能出现的弹窗。
exitPopup函数是一个通用的弹窗处理函数,通过findView('txt:稍后|txt:以后再说|txt:允许|txt:确定|txt:存储空间不足', {maxStep: 1})匹配常见的弹窗文本,自动点击确认或忽略,保证脚本不被弹窗打断。
3.2 获取当前用户信息
进入w信后,脚本调用findUsername()获取当前登录用户的w信号。具体做法是通过switchPage('txt:我', 'txt^:w信号', {click: true, failed: exitPopup})切换到“我”的页面,然后从页面文本中解析出w信号。这一步的目的是记录操作者身份,便于后续日志追踪。
3.3 进入通讯录并选择联系人
这是脚本最核心的部分。脚本通过两次switchPage调用进入通讯录的群聊选择界面:
-
从“发现”页切换到“通讯录”页
-
点击“更多功能按钮”进入“发起群聊”
-
在“发起群聊”界面选择“选择一个群”
进入选择界面后,脚本通过jumpByAlpha()实现按字母快速跳转。jumpByAlpha函数利用冰狐API的smartFindView('cn:android.view.View', {flag: 'find_all'})查找右侧的字母索引条,计算出目标字母的屏幕坐标后通过gestureClick模拟点击,实现快速定位到指定字母开头的联系人列表。
3.4 遍历联系人并批量选择
脚本维护一个allNameList数组记录已选中的联系人。在遍历过程中:
-
通过
smartFindView('cn:android.widget.ListView')获取当前列表视图 -
遍历
ListView中的每个RelativeLayout项 -
在每个项中查找
TextView获取联系人名称 -
如果联系人名称尚未被选中,则点击其对应的复选框
脚本通过preFirstText变量记录上一轮第一个联系人的名称,如果两轮相同则说明列表已滚动到底部,结束本轮选择。maxSelCount变量控制单次最多选择37个联系人,避免一次性选择过多导致w信卡顿。
3.5 验证联系人有效性
选择完成后,脚本调用findFriends()函数来验证哪些联系人仍然有效。这个函数的实现思路是:
-
创建一个临时群聊
-
通过
smartFindView获取群成员列表 -
遍历成员列表,将已在群中的联系人记录下来
-
最后删除该临时群聊并退出
不在群成员列表中的联系人,即为已删除或拉黑我们的联系人。脚本将这些联系人存入removedList数组并返回。
四、关键技术细节
4.1 页面状态管理
冰狐API的switchPage函数是页面状态管理的核心。它接受两个参数——当前页面的特征文本和目标页面的特征文本,只有在目标页面出现后才返回成功。这种“双向确认”的机制大大提高了脚本的稳定性,避免了因网络延迟或页面加载缓慢导致的误判。
4.2 元素查找策略
脚本中大量使用了smartFindView函数,这是冰狐API的特色功能。与传统UI自动化框架只能通过ID或XPath定位元素不同,smartFindView支持:
-
文本匹配:
txt:发现、txt^:w信号(前缀匹配) -
类名匹配:
cn:android.widget.ListView -
组合查找:在指定根节点下查找子元素
这种灵活的查找方式使得脚本能够适应w信不同版本的界面变化。
4.3 弹窗与异常处理
exitPopup函数展示了冰狐API的异常处理能力。通过findView的正则匹配功能,可以一次性匹配多种弹窗文本,实现统一的异常恢复逻辑。这种设计使得脚本在长时间运行时具备良好的鲁棒性。
4.4 滚动与列表加载
在遍历联系人列表时,脚本使用了scroll('up', {root: ret.views[0], type: 2, afterWait: 1000})进行滚动。其中type: 2表示平滑滚动,afterWait: 1000表示滚动后等待1秒,确保列表数据加载完成后再进行下一次查找。
五、实际应用与注意事项
5.1 适用场景
这套自动化方案适用于:
-
销售、营销人员清理无效联系人
-
需要定期维护w信好友列表的用户
-
对手机存储空间有较高要求的用户
5.2 运行环境
脚本基于冰狐Android智能辅助平台运行,需要:
-
Android设备(已root或使用辅助功能模式)
-
安装冰狐平台客户端
-
w信应用已登录
5.3 注意事项
-
版本兼容性:w信版本更新可能导致界面元素变化,需要根据实际情况调整查找条件
-
操作频率:避免过于频繁地运行脚本
-
数据备份:建议在运行前备份重要联系人
-
权限设置:确保冰狐平台拥有必要的辅助功能权限
六、总结
本文介绍了一套基于冰狐API的w信自动挑选黑名单的完整实现方案。通过launchApp、smartFindView、switchPage、gestureClick等核心API的组合使用,实现了从启动w信、进入通讯录、批量选择联系人到验证联系人有效性的全流程自动化。
该方案的核心价值在于将原本需要数小时的人工操作压缩到几分钟内完成,大幅提升了工作效率。

372

被折叠的 条评论
为什么被折叠?



