QQ泡沫乐园 · 免费提供游戏辅助,破解软件,活动资讯,喜欢记得收藏哦!
综合软件_线报活动_游戏辅助_最新电影_最优质的的辅助分享平台

开发一个能自动刷短视频的软件,你知道吗?

网络 2022-06-18 11:10

这两年,短视频出现了井喷式的发展。我们熟悉的常见的有抖音、快手、微视、小火山视频。看短视频已经成为年轻人的一种习惯。 ,每天空闲的时候,我都会拿出手机刷一下,打发无聊的时间。其实抖音和快手都推出了极速版,可以让你边玩边看视频赚钱,但纯粹是为了娱乐,你没有多少钱天。

但是作为测试人员,有没有什么办法可以让视频自动闪烁呢?有一个办法,今天我们来开发一个软件,可以自动刷新短视频。如果我们学会了它,我们可以在其他可以赚钱的应用程序中使用它。

我们首先能想到的就是开发一个自动化脚本,使用android adb命令来模拟滑动,命令是adb shell输入swipe,然后设置一个循环等待固定时间滑动一次,使用windows批处理或使用python开发脚本即可。但缺点是很有序,需要一直开着电脑,不能随时随地刷,没意义。

可能想到的另一种方法是开发一个android app应用,然后在应用中使用Android Runtime方法调用adb swipe命令,比如Runtime.getRuntime().exec("input swipe"),等你试试不会成功,因为在应用中调用adb命令需要root权限,而我们自己用的普通手机是无法使用的。

第三种方法是android的AccessibilityService。辅助服务的初衷是为无法与界面交互的残障用户提供一些用户操作的辅助,如点击、返回、长按、获取屏幕信息等。后来开发者找到了另一种方式,开发了一些插件,制作了一些监控第三方应用的插件。

我们不会解释如何使用无障碍服务AccessibilityService,也不会在打开应用程序时引导用户打开无障碍服务。这些都可以在网上找到,只需要移植即可。下面说说辅助服务中如何实现滑动、双击点赞、跳过广告等设计。首先是关于滑动的实现,主要是使用AccessibilityService在android7.0上新增的dispatchGesture和GestureDescription类。两个类的介绍如下,网上也有。首先是dispatchGesture方法的解释:

boolean dispatchGesture (GestureDescription gesture, AccessibilityService.GestureResultCallback callback, Handler handler)

这个方法有三个参数: 参数 GestureDescription:翻译的是手势的描述。如果要模拟,首先要描述你的腰部模拟的手势;参数GestureResultCallback:翻译为手势的回调,执行后调用手势模拟的结果。 ;参数处理程序:在大多数情况下,如果我们不需要它,我们可以将其传递为空。一般我们关注一下GestureDescription的参数就够了。我们重点关注这个参数:构建手势描述的关键代码:

GestureDescription.StrokeDescription(Path path, long startTime, long duration);例如:GestureDescription.Builder builder = GestureDescription.Builder();GestureDescription gestureDescription = builder.addStroke(GestureDescription.StrokeDescription(path, 100, 400)).build();

参数介绍如下: 参数path:描边路径,即滑动路径,可以通过path.moveTo和path.lineTo来实现;参数startTime:时间(毫秒),从手势开始到笔画开始的时间,非负数;参数duration:笔划通过路径的持续时间(毫秒),非负数;

介绍了以上基础知识,我们来看看滑动代码需要如何开发,见下图:

private void mockSwipe(){     final Path path = new Path();     path.moveTo(X, Y); //滑动的起始位置,例如屏幕的中心点X、Y     path.lineTo(X, 0); //需要滑动的位置,如从中心点滑到屏幕的顶部     GestureDescription.Builder builder = new GestureDescription.Builder();     GestureDescription gestureDescription = builder.addStroke(new GestureDescription.StrokeDescription(path, 100, 400)     ).build(); //移动到中心点,100ms后开始滑动,滑动的时间持续400ms,可以调整     dispatchGesture(gestureDescription, new GestureResultCallback() {         @Override          //如果滑动成功,会回调如下函数,可以在下面记录是否滑动成功,滑动成功或失败都要关闭该路径笔画        public void onCompleted(GestureDescription gestureDescription) {            super.onCompleted(gestureDescription);            Log.d(TAG, "swipe  success.");            path.close();        }        @Override        public void onCancelled(GestureDescription gestureDescription) {            super.onCancelled(gestureDescription);            Log.d(TAG, " swipe  fail.");            path.close();         }     }, null); //handler为空即可 }

实现了滑动。 双击点赞是如何实现的?也许你已经想到了。是的,它是通过构建路径来实现的。您只需要设置相同的起点和终点。但不是将lineTo和moveTo的坐标设置相同,双击的实现如下:

private void mockDoubleClick(){     final Path path = new Path();     path.moveTo((int)(X/2), (int)(Y/2));  //X和Y是需要双击的按钮坐标     GestureDescription.Builder builder = new GestureDescription.Builder();     GestureDescription gestureDescription = builder.addStroke(     new GestureDescription.StrokeDescription(path, 0100)).build();     dispatchGesture(gestureDescription, new GestureResultCallback() {         @Override        public void onCompleted(GestureDescription gestureDescription) {            super.onCompleted(gestureDescription);            Path path2 = new Path();            path2.moveTo((int)(X/2), (int)(Y/2));            //以下代码是完成第二个手势操作            GestureDescription.Builder builder2 = new GestureDescription.Builder();            GestureDescription gestureDescription2 = builder2.addStroke(            new GestureDescription.StrokeDescription(path2, 0100)).build();            AccessibilityServiceTest.this.dispatchGesture(gestureDescription2, null, null);            Log.d(TAG, "double click finish.");            path.close();            path2.close();            }            @Override            public void onCancelled(GestureDescription gestureDescription) {                super.onCancelled(gestureDescription);                Log.d(TAG, "scroll cancell.");            }        }, null);    }

至于查找控件,使用辅助服务的AccessibilityService的AccessibilityNodeInfo和findAccessibilityNodeInfosByText。具体操作如下:

rootInfo =AccessibilityServiceTest.this.getRootInActiveWindow(); List listInfo = rootInfo.findAccessibilityNodeInfosByText("查找文本");

注意:没有提及应用程序的其他开发方面。比如添加辅助服务和指令,请看原文中的AndroidManifest.xml和simulatekey.xml(辅助服务设置)文件。