>阅读原文:https://www.jianshu.com/p/5a44b6eaba20
快到年底了,又到了拼手速抢红包的时候了;其实很早之前就做过抢红包软件了,包括QQ和微信;但是大家都懂的,自己一个月前写的代码现在看起来都像是一坨shit一样;所以自己开始重新写一个抢红包的软件(其实是因为实在是太简单了),只做微信,因为QQ发红包的确用的太少了,而且QQ红包花样也太多了,什么唱歌、画画、成语接龙...
## 目标
1. 快,天下武功无坚不摧、唯快不破,肯定要比人的手速快
2. 准,只要你手机解锁了,在任意一个界面都可以快速抢到红包
3. 狠,其实狠不狠没什么关系了,最重要的是全自动,自己不用任何操作,不然怎么解放双手
4. 稳,肯定要能一直抢红包,来一个抢一个,来两个抢两个,抢红包一时爽,一直抢一直爽;
## 手机配置要求
1. Android系统 7.0及以上,辅助功能7.0以上支持模拟点击,模拟点击不是必须的,但是对于实现**快**很重要
2. 手机不能太垃圾了,手机慢有外挂也发挥不出来呀
## 实现原理
实现方法就是利用Android辅助功能,开启辅助功能相当于开启了一个服务,在手机界面改变的时候,就能监听到该页面的一些信息并且能拿到界面的一些控件,然后可以对控件进行模拟点击,从而实现我们想要的功能。
除此以外,不仅能够对获取到的控件进行模拟点击,在Android7.0及以上的版本,我们可以模拟任意位置的点击包括触摸、滑动等等,就是说我们可以实现任何**人能够进行的操作**,这个是很有用的,可以做出很多有意思的东西,如果再配上截图、录屏和图像识别,就更有意思了。
模拟点击,就是说我们的手机界面自己动,整个流程像是一只手在帮你操作一样的;其实我见过更牛逼的方法,连解锁都不需要直接就领了红包,界面没有任何变化的;感觉上是通过通信,发数据给微信服务器实现的,当然这种是需要root权限的,并且得去解析微信的通信协议,我自然没时间去搞(其实有时间也不一定能搞出来)。
## 具体实现
### 辅助功能
首先是辅助功能,新建一个**Service**继承**AccessibilityService**
```java
public class LuckMoneyService extends AccessibilityService
```
然后去**AndroidManifest**文件里面去注册一下这个Service
```xml
<service
android:name=".service.LuckMoneyService"
android:label="小圆脸的红包助手"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessible_service_wx_config" />
</service>
```
在`meta-data`节点下有个`resource`值,这是个xml文件,里面配置了该辅助的一些信息,在res目录下新建一个文件夹,名字叫xml,然后新建一个xml文件,名字和`resource`配置的一样就行了
```xml
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeWindowStateChanged|typeWindowContentChanged|typeNotificationStateChanged"
android:accessibilityFeedbackType="feedbackAllMask"
android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews|flagReportViewIds"
android:canRetrieveWindowContent="true"
android:canRequestFilterKeyEvents="true"
android:description="@string/wx_luck_money"
android:canRequestEnhancedWebAccessibility="true"
android:notificationTimeout="20"
android:packageNames="com.tencent.mm"
android:canPerformGestures="true" />
```
里面配置了一些参数,比如`notificationTimeout`是指定多少毫秒监听一次界面变化的,`packageNames`是指定监听哪个应用的,删掉这个配置就是监听全局,**建议一定要删除掉**,我这里只是展示用,`description`是对于该辅助的描述,其他配置不管也罢。
然后在LuckMoneyService里面重写一下onAccessibilityEvent方法
```java
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
//界面发生了变化
}
```
每当界面改变的时候就会回调这个方法,通过`event`我们就可以获取到界面的信息包括界面上的控件
#### 简单的用法
```java
//获取当前界面包名
String packageName = event.getPackageName().toString();
//获取当前类名
String className = event.getClassName().toString();
//获取当前界面父布局的控件
AccessibilityNodeInfo accessibilityNodeInfo = getRootInActiveWindow();
//在父布局里面根据子控件**显示的文字**找到该子控件
List<AccessibilityNodeInfo> nodeInfoList = accessibilityNodeInfo.findAccessibilityNodeInfosByText(text);
//在父布局里面根据子控件的**id**找到该子控件
List<AccessibilityNodeInfo> nodeInfoList = accessibilityNodeInfo.findAccessibilityNodeInfosByViewId(id);
//点击该控件
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
```
上面的操作都比较基础,根据控件显示的文字查找控件,找出来的肯定是TextView和Button了,根据ID查找控件,ID就是指的写布局文件的时候设置的控件的ID
#### 模拟触摸
模拟触摸就是可以模拟人的触摸动作,也比较简单
```java
protected void gestureOnScreen(Path path, long startTime, long duration,
AccessibilityService.GestureResultCallback callback) {
GestureDescription.Builder builde = new GestureDescription.Builder();
builde.addStroke(new GestureDescription.StrokeDescription(path, startTime, duration));
GestureDescription gestureDescription = builde.build();
dispatchGesture(gestureDescription, callback, null);
}
```
可以看到需要传入`path`就是一个路径嘛,模拟滑动的路径,用canvas画过画的都知道这东西还是比较简单的,不清楚也没关系,继续看,`startTime`就是多久后开始模拟事件,`duration`就是该滑动的时间,其他回调什么的为空就可以了;
辅助功能能做的东西大概就上面这些了,接下来看看
### 微信应用外的红包处理
首先实现在微信界面外怎么抢红包,在微信界面外有红包出现必然会在通知栏会显示微信红包(如果没开通知消息,那你自己开一下不就完事了吗),只需要在回调方法里面判断一下是不是通知消息,如果是通知消息,获取里面的信息,判断是不是微信红包通知消息,是就点击该消息,会自动跳转到聊天界面;
因为我们是监听界面变化来实现功能的,所以在一个界面触发了界面变化的时候,接下来的处理就应该交给下一个界面的方法了,所以微信界面外的操作就是这些了
```java
/**
* 红包标识字段
*/
public static final String HONG_BAO_TXT = "[微信红包]";
//通知栏消息,判断是不是红包消息
if (event.getParcelableData() != null && event.getParcelableData() instanceof Notification) {
Notification notification = (Notification) event.getParcelableData();
//获取通知消息详情
String content = notification.tickerText.toString();
//解析消息
String[] msg = content.split(":");
String text = msg[1].trim();
if (text.contains(HONG_BAO_TXT)) {
PendingIntent pendingIntent = notification.contentIntent;
try {
//点击消息,进入聊天界面
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Android微信抢红包辅助.zipAndroid微信抢红包辅助.zipAndroid微信抢红包辅助.zip 、Android微信抢红包辅助.zipAndroid微信抢红包辅助.zipAndroid微信抢红包辅助.zip Android微信抢红包辅助.zipAndroid微信抢红包辅助.zipAndroid微信抢红包辅助.zip Android微信抢红包辅助.zipAndroid微信抢红包辅助.zipAndroid微信抢红包辅助.zip 、Android微信抢红包辅助.zipAndroid微信抢红包辅助.zipAndroid微信抢红包辅助.zip Android微信抢红包辅助.zipAndroid微信抢红包辅助.zipAndroid微信抢红包辅助.zip Android微信抢红包辅助.zipAndroid微信抢红包辅助.zipAndroid微信抢红包辅助.zip 、Android微信抢红包辅助.zipAndroid微信抢红包辅助.zipAndroid微信抢红包辅助.zip Android微信抢红包辅助.zipAndroid微信抢红包辅助.zipAndroid微信抢红包辅助.zip An
资源推荐
资源详情
资源评论
收起资源包目录
Android微信抢红包辅助.zip (45个子文件)
code_20105
gradle.properties 1KB
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 232B
app
src
androidTest
java
com
yorhp
luckmoney
ExampleInstrumentedTest.java 754B
test
java
com
yorhp
luckmoney
ExampleUnitTest.java 380B
main
java
com
yorhp
luckmoney
service
LuckMoneyService.java 11KB
BaseAccessbilityService.java 9KB
MainActivity.java 5KB
util
threadpool
AppExecutors.java 2KB
MyThreadFactory.java 1KB
ScreenUtil.java 2KB
AccessbilityUtil.java 2KB
SharedPreferencesUtil.java 3KB
res
mipmap-xxhdpi
ic_launcher_round.png 10KB
ic_launcher.png 6KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 3KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 15KB
ic_launcher.png 9KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 4KB
xml
accessible_service_wx_config.xml 683B
values
colors.xml 10KB
strings.xml 130B
styles.xml 383B
layout
activity_main.xml 7KB
drawable
ic_launcher_background.xml 5KB
ic_cat.png 4KB
ic_bird.png 8KB
AndroidManifest.xml 2KB
proguard-rules.pro 751B
build.gradle 1KB
.gitignore 7B
app-debug.apk 2.07MB
gradlew.bat 2KB
build.gradle 558B
settings.gradle 44B
gradlew 5KB
.gitignore 2KB
README.md 18KB
共 45 条
- 1
资源评论
土豆片片
- 粉丝: 1517
- 资源: 5643
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- Docker在Ubuntu16.04上安装和部署Apache Storm
- test_kong.zip
- springboot权限验证学习-下
- SeetaFace6人脸质量评估C++代码实现Demo
- OCAuxiliaryTools
- 制药公司QC顶岗实习专题报告
- Rust 全面指南:从基础到高级,一网打尽 Rust 的编程知识
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功