关于直播自动点赞功能的实现
场景:我们在划水看直播,之后想给自己喜欢的主播点赞(刷赞),而且手臂仍然点赞好冷哦,可不可以用哪些方法来取代我们自动点赞呢。
接出来我们来分享两种方法,第一种就是使用adbshell命令来模拟点击,第二种就是使用手动化测试的方式来模拟点击,假如还有更好的方式或则思路请在文章顶部留言哦。
工具介绍
介绍方式之前我们先来介绍一个工具,作为安卓开发的应当都接触过也或多或少的使用过了。工具名子称作AndroidDeviceMonitor。这个工具坐落你的SDK目录下的tools文件夹中,名子为monitor.bat(Windows系统)。双击打开后界面如下所示:
为了测试我们手机打开天猫直播任意的直播页面,类似如下所示,之后手机联接笔记本记得开启USB调试模式。一切打算就绪以后,我们首先点击“11”所示的手机按键,之后稍等片刻可以看见中间区域出现了手机直播的截图,如“22”所示。出现截图后联通键盘到右下角点赞区域,点击点赞按键,可以在左边看见相关信息了,这儿我们要注意的就是一个resource-id以及一个bounds,resource-id就是这个控件的id了,bounds就是这个组件的区域。记住这两个数据,下边我们会用到。
方式1、adbshell
使用命令的形式很简单易懂了,就是使用inputtap命令来直接模拟点击风波,x、y就是要点击位置的座标了。
adb shell input tap x y
那x,y的座标如何获取的呢,还记得前面介绍的工具吗,对的,就是那种bounds数据。
这儿我们取[620,1200]来测试好了,打开AndroidStudio的Terminal输入:
adbshellinputtap6201200,之后回车,手机上的页面也要保持在直播页面哦,这样不出意外都会看见点赞按键手动点击了下。
好了基本的思路就是使用adbshell来操作了,那可能有疑惑了,我如此点赞一次还须要输入那么多代码之后再回车嘛,这不更麻烦了??不不不,重点是在旁边啦,上面只是介绍如此个代码,之后我们须要循环使用如此个代码就好了,对吧,这么如何使用呢,这儿又有两种方式:
1.1、bat批处理
之所以想到bat文件是由于这个原本就是在命令行窗口下执行的,所以使用批处理来循环执行这段命令真是在合适不过了,可是我又不会批处理的代码,所以网上找了段循环代码之后稍为更改了下,如下所示:
@echo off
:1
adb shell input tap 620 1200
call "auto.bat"
goto 1
将上文的代码拷贝到记事本中,之后保存为auto.bat文件,双击该文件可以看见点赞按键在手动一个个点击了。
并且疗效不太好,点击速率太慢,由于执行一次adb命令时间有点久。所以解决办法呢就是-----你多双击几次这个bat文件,之后开好几个这样的窗口就好了啊,哈哈哈哈哈!其实你也可以再写一个批处理来伪装多线程形式,这儿就不写代码了,由于我也不怎样懂批处理的代码。
1.2、安卓获取权限执行adbshell命令
这是第二种借助adbshell的方法,就是安卓机获取root权限,之后在手机中手动执行代码,伪代码如下:
String cmd = "input tap 620 1200";
Process process = Runtime.getRuntime().exec("su");
OutputStream os = process.getOutputStream();
os.write((cmd + " \n").getBytes());
os.flush();
思路就是获取root权限,之后执行代码,我是通过漂浮窗的形式诠释出一个按键,之后打开天猫直播页面,之后点击漂浮窗的按键,开始循环执行shell命令,具体代码在GameHelper,这儿就不在解读。
方式2、自动化测试
这些方案就是借助手动化测试来进行模拟点击操作,首先使用AndroidStudio新建安卓项目,之后在app模块的build.gradle中添加测试框架的依赖(版本看情况选择,我目前是2。2.1.2):
androidTestImplementation‘com.android.support.test.uiautomator:uiautomator-v18:2.1.2’,
依赖添加完毕后打开项目的androidTest文件,如下所示app/java/com.cooloongwu.helper(androidTest),之后在该包下新建TaoBaoTest.java文件:
TaoBaoTest.java文件具体代码如下:
package com.cooloongwu.helper;
import android.app.Instrumentation;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.uiautomator.By;
import android.support.test.uiautomator.UiDevice;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Created by CooLoongWu on 2018-10-16 20:57.
*/
@RunWith(AndroidJUnit4.class)
public class TaoBaoTest {
public Instrumentation instrumentation;
public UiDevice uiDevice;
@Before
public void setUp() {
instrumentation = InstrumentationRegistry.getInstrumentation();
uiDevice = UiDevice.getInstance(instrumentation);
}
//点赞按钮ID:com.taobao.taobao:id/taolive_favor_icon_config
//点赞按钮范围[618,1179][696,1257]
@Test
public void test() throws InterruptedException {
//点击喜欢按钮
while (true) {
//换用click方法,感觉比findObject方法效率高很多,而且findObject()执行有时会遇到一些奇怪的错误
uiDevice.click(620, 1200);
Thread.sleep(100);
uiDevice.click(622, 1202);
// uiDevice.findObject(By.res(
// "com.taobao.taobao:id/taolive_favor_icon_config"))
// .click();
}
}
}
编辑完后在test()方式上右键,之后点击Run‘test’,确保手机页面在天猫直播的页面,运行后你就可以看见点赞按键在手动点击了。
里面是最基本的手动化测试代码,注解可能须要稍为理解下,之后其他代码都是很显著了看名子都能晓得意思的。关于安卓的手动化测试这儿只是展示了一丢丢的内容,并且比较的有趣,通过这个反例入门手动化,前面要继续努力学习啦。
两种形式效率对比
根据上述代码进行对比,使用手动化测试的方法显著要比adbshell的形式效率高,点击速率快,但是不会导致直播卡顿,开了多个黑窗口来执行adbshell后总会导致直播有一定的延后及卡顿感,暂不清楚如何回事。