春节临近,为避免错失土豪们的红包,动手写了一个自动抢微信红包的小程序,试了一下效果还不错。本程序适用于安卓4.1版本以上手机,不需要ROOT权限。现将程序的设计要点记录如下,供有兴趣的同行参考。
一、基本原理
目前网上已经有很多款自动抢红包软件,其基本原理都是一致的,都是实现一个Accessibility Service(即“辅助服务”),捕捉手机的通知栏变动事件、窗口切换事件、窗口内容变动事件,在收到微信红包通知消息时自动转到微信页面,搜索到红包节点,模拟点击操作。抢到红包后,再搜索“拆红包”节点,打开红包,取出红包金额。
由于一个完整的发现红包、抢红包、拆红包流程需要10秒左右,而各种事件是以毫秒级的速度在不断触发,因此此类程序的核心问题是维护好一个全局的抢红包状态转换图,处理好各个事件处理任务的并发控制和相互协调,避免因状态走错而导致程序运行不稳定的情况。
二、主要流程
自动抢红包动作由两种场景触发:(1)发现一个微信红包消息通知;(2)在当前微信聊天页面发现一个新红包。两种场景的处理流程大体一致,现将新通知消息触发的抢红包流程说明如下。
三、状态转换
鉴于整个抢红包流程耗时较长,本程序维护了一个全局的状态变量(供有七种状态),以控制任务流程,同时维护了一个全局的等待队列,以存放在此期间到达的新红包。对于由新通知消息触发的抢红包流程&