效果1:
效果2:
此次开发的工具都用纯原生代码进行Android的应用开发的,其实原理都是用了无障碍功能(AccessibilityService)进行处理。上个版本的工具太麻烦了,还需要进行相应的参数接口破解,获取到相应的值再对H5进行处理,总之叽里呱啦的一连串麻烦,也容易被封号,此次的工具只是作为一个辅助性的,完全不需要对目标应用进行啥破解之类,直接说就是仿真人操作,进行一系列仿真操作。
以下是主要开发流程:
1.使用AccessibilityService最开始的配置
上面是使用配置文件的方式的,不过我比较喜欢用代码的方式进行配置,反正两个都可以一起使用啦,只不过是在代码的时候重新获取一下之前配置文件的东西在进行配置而已,反正看你喜欢。代码配置的话在 onServiceConnected 这个方面里面进行处理就行了
//可用代码配置当前Service的信息
AccessibilityServiceInfo info = getServiceInfo();
//监听过滤的包名
//info.packageNames = new String[]{PackageName.SYSTEMUI.getPackageName()};
//监听响应事件
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
//通知的时间
info.notificationTimeout = 100;
//设置标志位,读取webView内容
info.flags = AccessibilityServiceInfo.DEFAULT
| AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS
| AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS
| AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY
| AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
setServiceInfo(info);
目前我这里是不做包名的过滤的,如果不配置包名的话,就是全部的应用都会进来的,我这里就是要全部的应用都进来,然后在里层自己做一个目标包的拦截过滤。我这个方法
DataListHelper.isExistPackageName(packageName)
就是过滤我支持的目标的,反正自己意会
2.任何动作的操作都是靠心跳来进行,心跳带动随机时间进行页面的滑动处理,比如说1秒一个心跳, 事先准备一个事件的随机时间,当心跳跳动次数达到随机时间就进行一个事件动作。 随机时间那个,反正就是根据给定一个范围值,至于这个范围值,自己根据相应的动作去估算吧。动作处理时间反正不要每次都相等,一定要随机时间,这个很重要
心跳那个,我用了RxJava的,每秒都执行一个回调
/**
* 执行心跳
*
* @param handler
* @return
*/
public static Disposable executeHeartBeat(final Handler handler) {
return Flowable.interval(1, TimeUnit.SECONDS).doOnNext(new Consumer() {
@Override
public void accept(Long aLong) throws Exception {
handler.sendEmptyMessage(1);
}
}).subscribe();
3.自动切换目标应用这个,也是利用了定时器,半小时自动切换目标,不过有些安全限制的问题,我在小米上面测试的,一定要手动打开过目标应用一次才行,因为打开第三方应用的时候需要权限。反正我现在做的是在本应用里面打开第三方这种方式的
打开目标应用:
/**
* 打开应用
*
* @param context 活动对应上下文对象
* @param packagename 需要打开的应用包名
*/
public static void openApp(Context context, String packagename) {
PackageInfo packageinfo = null;
try {
packageinfo = context.getPackageManager().getPackageInfo(packagename, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageinfo == null) {
return;
}
// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageinfo.packageName);
// 通过getPackageManager()的queryIntentActivities方法遍历
List resolveinfoList = context.getPackageManager()
.queryIntentActivities(resolveIntent, 0);
ResolveInfo resolveinfo = resolveinfoList.iterator().next();
if (resolveinfo != null) {
String packageName = resolveinfo.activityInfo.packageName;
String className = resolveinfo.activityInfo.name;
// LAUNCHER Intent
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
目前已经写好了三个目标应用(快手极速版、刷宝短视频、抖音极速版)的辅助工具
快手极速版:只支持视频的自动切换和点赞,不做自动签到及其他
刷宝短视频:只支持视频的自动切换和点赞,不做自动签到及其他
抖音极速版:只支持视频的自动切换和点赞,不做自动签到及其他
以上都是只处理视频的自动滑动,直接说就是半自动半手动吧