关于直播自动点赞功能的实现

场景:我们在划水看直播,然后想给自己喜欢的主播点赞(刷赞),但是手指一直点赞好累哦,可不可以用什么方式来代替我们手动点赞呢。

接下来我们来分享两种方式,第一种就是使用adb shell命令来模拟点击,第二种就是使用自动化测试的方法来模拟点击,如果还有更好的方法或者思路请在文章底部留言哦。

工具介绍

介绍方法之前我们先来介绍一个工具,作为安卓开发的应该都接触过也或多或少的使用过了。工具名字叫做Android Device Monitor。这个工具位于你的SDK目录下的tools文件夹中,名字为monitor.bat(Windows系统)。双击打开后界面如下所示:
在这里插入图片描述

为了测试我们手机打开淘宝直播任意的直播页面,类似如下所示,然后手机连接电脑记得开启USB调试模式。一切准备就绪之后,我们首先点击“11”所示的手机按钮,然后稍等片刻可以看到中间区域出现了手机直播的截图,如“22”所示。出现截图后移动鼠标到右下角点赞区域,点击点赞按钮,可以在右侧看到相关信息了,这里我们要注意的就是一个resource-id以及一个bounds,resource-id就是这个控件的id了,bounds就是这个组件的区域。记住这两个数据,下面我们会用到。
在这里插入图片描述

方法1、 adb shell

使用命令的方式很简单易懂了,就是使用input tap命令来直接模拟点击事件,x、y就是要点击位置的坐标了。

adb shell input tap x y

那x,y的坐标怎么获取的呢,还记得上面介绍的工具吗,对的,就是那个bounds数据。
这里我们取[620,1200]来测试好了,打开Android Studio的Terminal输入:
adb shell input tap 620 1200,然后回车,手机上的页面也要保持在直播页面哦,这样不出意外就会看到点赞按钮自动点击了下。

好了基本的思路就是使用adb shell来操作了,那可能有疑问了,我这么点赞一次还需要输入这么多代码然后再回车嘛,这不更麻烦了??不不不,重点是在后面啦,前面只是介绍这么个代码,然后我们需要循环使用这么个代码就好了,对吧,那么怎么使用呢,这里又有两种方法:

1.1、bat批处理

之所以想到bat文件是因为这个本来就是在命令行窗口下执行的,所以使用批处理来循环执行这段命令真是在合适不过了,但是我又不会批处理的代码,所以网上找了段循环代码然后稍微修改了下,如下所示:

@echo off
:1
adb shell input tap 620 1200
call "auto.bat"
goto 1

将上文的代码拷贝到记事本中,然后保存为auto.bat文件,双击该文件可以看到点赞按钮在自动一个个点击了。

但是效果不太好,点击速度太慢,因为执行一次adb命令时间有点久。所以解决办法呢就是-----你多双击几次这个bat文件,然后开好几个这样的窗口就好了啊,哈哈哈哈哈!当然你也可以再写一个批处理来伪装多线程方式,这里就不写代码了,因为我也不怎么懂批处理的代码。

1.2、安卓获取权限执行adb shell命令

这是第二种利用adb shell的方式,就是安卓机获取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、自动化测试

这种方案就是利用自动化测试来进行模拟点击操作,首先使用Android Studio新建安卓项目,然后在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’,确保手机页面在淘宝直播的页面,运行后你就可以看到点赞按钮在自动点击了。

上面是最基本的自动化测试代码,注解可能需要稍微理解下,然后其他代码都是很明显了看名字都能知道意思的。关于安卓的自动化测试这里只是展示了一丢丢的内容,但是比较的有趣,通过这个例子入门自动化,后面要继续努力学习啦。

两种方式效率对比

按照上述代码进行对比,使用自动化测试的方式明显要比adb shell的方式效率高,点击速度快,而且不会造成直播卡顿,开了多个黑窗口来执行adb shell后总会造成直播有一定的延迟及卡顿感,暂不清楚怎么回事。

发布了40 篇原创文章 · 获赞 47 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/u010976213/article/details/83105160