- 移动开发
- GUI自动化
【免费下载链接】WeChatLuckyMoney
:money_with_wings: WeChat's lucky money helper (微信抢红包插件) by Zhongyi Tong. An Android app that helps you snatch red packets in WeChat groups.
本文基于开源仓库 WeChatLuckyMoney 的官方文档 README_EN.md 及其配套源码撰写,系统讲解这款 Android 微信抢红包助手的核心特性、无障碍服务实现原理、红包智能识别算法、防封号可选项与自动更新机制,并给出可直接落地的配置参考与源码级证据。读完本文,你将理解一个无障碍(AccessibilityService)抢红包插件从"监视 → 识别 → 拆开 → 返回"的完整闭环是如何设计与实现的。
WeChatLuckyMoney 是一个帮助用户在微信中抢红包的 Android 应用:它自动检测红包、自动点击拆开,速度远超人工操作。项目由 Zhongyi Tong 开发,以 MIT 许可证开源,核心实现位于app/src/main/java/xyz/monkeytong/hongbao/目录下,其中 HongbaoService.java 是无障碍服务主逻辑,HongbaoSignature.java 负责红包节点签名识别,配置项集中在 general_preferences.xml 与 comment_preferences.xml。
一、项目定位与核心特性
官方英文 README(README_EN.md)将其描述为一款"帮助你在微信抢红包时战无不胜"的 Android 应用,核心卖点可归纳为四个方面:
- 监视选项任意组合:提供
notification(系统通知)/chat list(聊天列表)/chat page(聊天页面)三档监视级别,用户可按需选择——既要谨慎不被察觉,也要高效志在必得。 - 更智能的识别算法:使用多种特征标识一个红包,聊天时不再重复点击红包;并带有防封号(anti-anti-plugin)策略保护,避免落入"专属红包""抢到翻倍"等陷阱。
- 自动更新检查:紧跟微信版本更新,应用内即可一键检查并更新。
- 轻量、安全、可信:官方 README 宣称安装包仅 1MB 左右、无需 ROOT、下载即用,且代码开源、社区活跃。
这些特性在源码中均有对应实现。应用图标、启动页、雪景背景等资源位于 app/src/main/res/mipmap-xxhdpi/,界面布局见 activity_main.xml。
二、三步快速上手
官方文档给出的使用方法极其简洁:
- 打开应用,开启插件(无障碍服务)。
- 回到微信,做你想做的事。
- 坐等红包进账。
落地到具体操作:主界面(MainActivity.java)中央有一个插件开关区域,点击后通过Settings.ACTION_ACCESSIBILITY_SETTINGS跳转系统无障碍设置页(见openAccessibility()方法);用户在系统设置中找到"微信红包"服务并开启即可。应用会实时监听无障碍服务状态变化(AccessibilityStateChangeListener),并根据 HongbaoService.java 是否被启用,动态把主界面的按钮文案切换为"开启插件 / 关闭插件"(updateServiceStatus()方法)。
从源码结构看,服务注册信息定义在 accessible_service_config.xml,其中android:packageNames="com.tencent.mm"明确将监听范围限定在微信进程,android:accessibilityEventTypes="typeWindowStateChanged|typeWindowContentChanged|typeNotificationStateChanged"声明了需要接收的三类事件:窗口状态变化、窗口内容变化、通知状态变化——这正是三档监视选项的事件基础。
三、源码架构:无障碍服务如何工作
3.1 服务入口与事件分发
核心类 HongbaoService.java 继承自AccessibilityService,所有逻辑围绕onAccessibilityEvent(AccessibilityEvent event)展开,采用两个互斥锁mMutex与mChatMutex防止多线程/多事件并发下的误操作:
@Override public void onAccessibilityEvent(AccessibilityEvent event) { if (sharedPreferences == null) return; setCurrentActivityName(event); // 检测通知消息 if (!mMutex) { if (sharedPreferences.getBoolean("pref_watch_notification", false) && watchNotifications(event)) return; if (sharedPreferences.getBoolean("pref_watch_list", false) && watchList(event)) return; mListMutex = false; } // 检测聊天页面 if (!mChatMutex) { mChatMutex = true; if (sharedPreferences.getBoolean("pref_watch_chat", false)) watchChat(event); mChatMutex = false; } }setCurrentActivityName()通过解析窗口变化事件的ComponentName来判断当前处于微信的哪个界面(LauncherUI / ChattingUI / LuckyMoneyDetailUI 等),后续识别逻辑会据此限定操作范围,避免在订阅号等其他场景误判。
3.2 三档监视选项的源码实现
三档监视分别对应三个独立方法:
- 监视系统通知(watchNotifications):匹配
TYPE_NOTIFICATION_STATE_CHANGED事件,当通知文本包含[微信红包]提示串时,取出Notification的contentIntent并直接send(),从而进入红包所在的聊天页。 - 监视聊天列表(watchList):匹配
TYPE_WINDOW_CONTENT_CHANGED事件,用findAccessibilityNodeInfosByText("[微信红包]")在列表节点中查找红包提示。代码注释特别指出:增加currentActivityName.contains(LauncherUI)条件,是为了避免订阅号中出现标题为"[微信红包]拜年红包"(并非真红包)的信息时误判。 - 监视聊天页面(watchChat):获取
getRootInActiveWindow()根节点,交由checkNodeInfo()做红包节点识别与拆开操作。
三档选项在 general_preferences.xml 中分别对应pref_watch_notification(默认开启)与pref_watch_list(默认关闭),聊天页监视pref_watch_chat默认开启。
四、红包识别算法:多种特征标识与防重复机制
这是本项目最核心的智能部分。官方文档强调"多种特征标识、聊天时不再重复点击红包",其实现集中在 HongbaoSignature.java 的generateSignature()方法中,识别一个"新红包"需要依次通过多重校验:
- 容器节点校验:红包节点("领取红包"/"查看红包"文本节点)的父节点必须是
android.widget.LinearLayout,以此排除普通文本消息。 - 内容校验:红包内容文本不能为空,也不能是"查看红包"这类占位文本。
- 屏蔽词过滤:将红包内容与用户配置的
pref_watch_exclude_words屏蔽词逐一比对,命中则跳过(对应"屏蔽红包文字"功能,可避开"专属红包""抢到翻倍"等陷阱)。 - 屏幕边界校验:消息容器节点必须位于屏幕内(
bounds.top >= 0),防止滚动过程中重复触发拆开。 - 签名去重:从消息节点中提取发送者(ImageView 的 contentDescription,去除"头像"后缀)与时间戳(TextView 文本),拼接成
sender|content|time形式的签名;只有与缓存签名不同的红包才会被点击——这正是"不再重复点击红包"的核心机制。
实际点击流程在checkNodeInfo()中分两步:先点击"领取红包"/"查看红包"节点(mReceiveNode.getParent().performAction(ACTION_CLICK))进入拆红包界面;随后通过findOpenButton()递归遍历查找android.widget.Button类型的"拆红包"按钮,命中后执行openPacket()。
其中值得注意的技术点是Android 7.0(SDK > 23)的适配:openPacket()针对高版本系统改用dispatchGesture()手势模拟点击,并根据屏幕密度densityDpi硬编码了 720p(355,780)、1080p(533,1115)、1440p(720,1575)三种分辨率下的点击坐标。这正是 CHANGELOG 中"适配部分 Android 7.0 机型(进行中)"的源码体现。
拆完收尾:当检测到"红包详情"/"手慢了"/"已超过24小时"等文本(中英文均支持,见类中WECHAT_DETAILS_CH/WECHAT_BETTER_LUCK_EN等常量)且当前位于LuckyMoneyDetailUI或红包接收界面时,执行performGlobalAction(GLOBAL_ACTION_BACK)返回聊天页,并重置互斥锁与拆包计数,完成一次完整的抢红包闭环。
五、防封号选项与实验功能:配置参数全解析
官方文档强调"防封号(anti-anti-plugin)策略保护",这些策略在 general_preferences.xml 中对应"防封号选项"分组,具体参数如下:
| 配置 key | 功能 | 默认值 | 源码依据 |
|---|---|---|---|
pref_watch_notification | 监视系统通知 | true | HongbaoService.javawatchNotifications() |
pref_watch_list | 监视聊天列表 | false | watchList() |
pref_watch_chat | 自动拆开红包 | true | watchChat() |
pref_open_delay | 延时拆开红包(秒) | 0 | watchChat()中Handler.postDelayed(..., delayFlag),值为pref_open_delay × 1000毫秒 |
pref_watch_self | 拆开自己发的红包 | true | checkNodeInfo()中决定是否同时匹配"查看红包"节点 |
pref_watch_exclude_words | 屏蔽红包文字(空格间隔) | 空 | HongbaoSignature.generateSignature()的排除词过滤 |
pref_watch_on_lock | 息屏抢红包(实验功能) | false | PowerUtil唤醒锁 + 键盘锁 |
其中pref_open_delay由自定义控件 SeekBarPreference.java 提供(基于DialogPreference+SeekBar,通过自定义属性pref_kind区分"延时拆红包"与"延时发送回复"),延迟值直接写入 SharedPreferences,服务端在拆包前读取并延迟执行——"延时抢红包"可以有效降低插件行为特征,是典型的防封号手段。
息屏抢红包由 PowerUtil.java 实现:开启后获取 30 分钟(wakeLock.acquire(1800000))的SCREEN_DIM_WAKE_LOCK | ACQUIRE_CAUSES_WAKEUP唤醒锁,并调用keyguardLock.disableKeyguard()禁用系统锁屏;服务销毁或关闭该选项时自动释放。相关权限(WAKE_LOCK、DISABLE_KEYGUARD)声明在 AndroidManifest.xml 中。官方文案明确提示该功能"会极大增加电量消耗,请谨慎使用"。
自动回复(实验功能):虽然 v4.0 更新日志标注"移除自动回复功能",但从源码结构看,comment_preferences.xml 与 CommentSettingsFragment.java 仍保留该模块(仅 Android 5.0 以下禁用开关),配置项包括pref_comment_switch(开启自动回复)、pref_comment_at(@发红包的人)、pref_comment_words(自定义回复语,空格分隔,随机选取)。实现上generateCommentString()会随机从回复语中挑选一条(可选@发送者),拆完红包后由sendComment()通过ACTION_SET_TEXT自动填充到聊天输入框——官方代码注释与界面提示均说明该功能"仅能自动填充感谢语,无法直接发送",尚处于实验中。
六、自动更新机制:紧跟微信版本的保障
官方文档宣称"紧跟微信更新、应用内即可一键更新",对应工具类 UpdateTask.java,实现要点如下:
- 通过 HTTP 请求 GitHub Releases 最新版本接口(
api.github.com/repos/geeeeeeeeek/WeChatLuckyMoney/releases/latest)获取tag_name(版本号)与prerelease(是否为预发布)字段。 - 与本地
PackageInfo.versionName比较;若非预发布且本地版本不低于最新版,提示"已经是最新版本";否则弹出提示并拉起浏览器跳转到 APK 下载地址。 - MainActivity.java 的
onResume()中做了流量友好处理:仅在 WiFi 环境(ConnectivityUtil.java 判断TYPE_WIFI)或首次打开应用时静默检查更新;用户在设置页点击"检查新版本"(GeneralSettingsFragment.java)时则强制检查并提示结果。
主界面与设置界面还内置了内置 WebView 打开链接的入口(WebViewActivity.java),对包含apk的下载链接走 DownloadUtil.java 的 DownloadManager 后台下载,其余链接在 WebView 内直接加载。
七、多语言支持
v4.0 起新增中英文双语支持,资源文件位于 app/src/main/res/values/strings.xml(中文)与 app/src/main/res/values-en/strings.xml(英文)。从英文文案可看到三档监视选项对应Watch notifications、Watch chat list、Open red packets automatically,且红包识别同样适配英文界面(如Details、Better luck next time!等常量),微信英文版用户同样可用。
八、版本演进与更新历史
完整更新历史见 CHANGELOG.md,从版本演进可以清晰看到项目的能力发展脉络:
- v1.x(2015):红包重复判断与节点 hash 算法(v1.0);服务运行时防止息屏(v1.1);支持微信英文版、优化重复红包判定逻辑——"戳名称与缓存不一致的红包,以及名称一致但间隔大于 5 秒的红包"(v1.2)。
- v2.x(2016):三档监视选项与重复红包判定优化(v2.0);屏蔽指定红包文字、息屏抢红包、不拆自己红包、内置红包攻略、WebView 打开链接(v2.1);延时拆红包、浏览器打开入口、接入腾讯 Bugly、自动回复实验项(v2.2);不打开拜年红包、修复 Crash(v2.3)。
- v3.x(2016):重新设计 UI,提升"社区"和"设置"视觉优先级;适配微信 6.3.22。
- v4.0(2017):新增中英双语支持;适配部分 Android 7.0 机型(进行中,部分机型仍不可用);优化 UI 与性能;移除自动回复功能(源码中仍有保留,见上文)。
从 strings.xml 可见当前版本号为v5.0。
九、许可证与使用须知
- 项目来源:官方文档说明项目深受小米去年秋季发布会演示的 MIUI 7 抢红包测试代码(XiaoMi/LuckyMoneyTool)启发。
- 许可证:项目以 MIT 许可证开源,详见 LICENSE.md,版权归 Zhongyi Tong 所有。
- 免责声明:插件可能会在一定程度上改变微信的交互方式;使用本项目代码及其生成物时,使用者需自行承担各种可能后果,包括但不限于"禁用红包功能""微信封号"。
十、结语:从 README 到源码的完整映射
官方英文文档用最简练的方式概括了 WeChatLuckyMoney 的定位与用法,而源码则揭示了其内部机制:三档监视选项对应三类无障碍事件与三个监视方法;"智能识别"对应多重特征校验与sender|content|time签名去重;"防封号策略"对应延时拆包、屏蔽词过滤、息屏唤醒等可配置项;"自动更新"对应 GitHub Releases 版本检查。对于想要理解 Android 无障碍服务(AccessibilityService)如何驱动第三方 App 交互的开发者来说,HongbaoService.java 与 HongbaoSignature.java 是两份值得精读的实战范本——从事件分发、节点遍历、文本匹配到手势模拟,构成了一个完整且克制(大量互斥锁与条件限定)的自动化闭环。
- 移动开发
- GUI自动化
【免费下载链接】WeChatLuckyMoney
:money_with_wings: WeChat's lucky money helper (微信抢红包插件) by Zhongyi Tong. An Android app that helps you snatch red packets in WeChat groups.
相关推荐
Sunshine 游戏串流服务器完整指南:让 PC 游戏库免费跑满全家屏幕
Sunshine 游戏串流服务器完整指南:让 PC 游戏库免费跑满全家屏幕 Sunshine 是一款完全免费、开源的游戏串流服务器,官方定位只有一句话:self
音视频后端抢红包不再手慢!WeChatLuckyMoney无障碍服务调试全指南
抢红包不再手慢!WeChatLuckyMoney无障碍服务调试全指南 你是否遇到过微信红包总是抢不到的尴尬?作为一款帮助用户自动抢微信红包的Android应用,
移动开发GUI自动化iOS微信插件如何实现防封号与自动抢红包?
想要让微信在iOS设备上变得更加强大智能吗?WeChatPlugin iOS这款开源插件为你提供了账号保护处理、一键远程控制、实时后台推送、智能消息接收、消息保
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考