文章目录
说到趣头条,这是一家让人惊讶的公司。2016年上线,2018年成功在美国纳斯达克上市,从上线到上市,仅仅用了2年时间,目前趣头条的市值有32亿美元。
趣头条并非以用户体验获取成功,其实我觉得体验非常差,其里边的各种广告和诱导分享让人烦不胜烦。
既然能短短时间内上市,肯定有其独到之处了。趣头条主打三四五线城市,其文章大多为社会、养生、八卦、搞笑娱乐之类。大量的四五线城市中趣头条的用户群体,他们时间充足,喜欢趣头条里边的文章,而且看文章能挣钱,邀请新用户还有钱,所以也乐于使用。据说趣头条日活有两千万,不得了!
由于安卓手机有adb调试功能,使用adb能模拟用户操作手机,所以就想:能不能用adb来操控手机,让趣头条为我自动看文章挣金币,于是写了此文。
实际运行效果和收入
关于收入,我只能告诉你我已经成功挣到钱并提现到微信了,哈哈。
欢迎你也来玩一下试试,而且不止趣头条,腾讯,百度,今日头条都有类似的应用可以薅。都有文末有代码的下载方式。
实现方案分析
开发语言与环境
尝试找过其类似脚本,有一些自动化测试的软件,但是百度了一下,都要安装配置一大坨东西,各种配置,所以我想不如自己直接利用adb实现。
环境 | 说明 |
---|---|
开发语言 | c++ |
运行操作系统 | windows x64 |
编译器 | mingw64 g++8.2 |
如何获取当前的应用的包名和页面
adb shell dumpsys activity top
从上图可以看出,我们拿到了当前运行的应用的包名和它的Activity名称。
dumpsys命令很强大,如果需要查看详细使用,可以关注我的公众号,里边有dumpsys的详细说明文章。
如何模拟用户滑动界面
adb shell input swipe startX startY endX endY 500
从startX,startY坐标滑动到endX,endY坐标 最后一个参数为总体时间(ms)
如何模拟点击界面
adb shell input tap x y
点击绝对坐标x,y
如何如何获取要点击的按钮的坐标值
可以打开手机的设置界面,在开发者选项中打开"指针位置"选项。打开后,点击或屏幕就可以显示出坐标了,滑动时也会显示轨迹。
趣头条分析
经过分析后发现下图的规律:
具体如何操控趣头条挣金币
每小时领取一次小时奖励(60个金币)
- 第一步:点击领取按钮,会弹出一个对话框
- 第一步:点击后按返回键,关闭对话框
看小视频挣金币
- 第一步:点击小视频按钮
- 第二步:等待一端时间
- 第三步:回到第一步 (点击后趣头条会自己刷新下一个视频)
看文章挣金币
- 第一步:点击左下角的
头条
按钮 - 第二步: 在头部滑动,选择一类文章
- 第三步:点击一个文章,进入文章详情界面
- 第四步:慢慢向下,向上滑动,看文章一段时间
- 第五步:按返回键退出文章界面
用到的趣头条的界面Activity名称
基本金币都在下面几个界面里,其他界面可以看成是广告界面,在程序里用返回键将其关闭以消除干扰。
- 主界面 “com.jifen.qkbase.main.MainActivity”
这个界面还以fragment的形式包含了小视频界面,长视频界面。 - 文章详情面 “.content.newsdetail.news.NewsDetailActivity”
- 视频文章界面 “.content.newsdetail.video.VideoNewsDetailQkPlayerActivity”
具体设计
初步的设计想法:
while ( true ) {
//检查adb是否连接,应用是否已经启动
//领每小时一次的时段奖金
//看几个视频
for(xxxx)
{
//点击视频菜单
//点击一个视频
//等视频播放一段时间
//各种检查
//检查adb连接状态,检查当前的应用是否是趣头条,界面是不是广告界面。。。
//换下一个视频
}
//看几个文章
for(xxxx)
{
//点击到文章页
//选择一类文章
//选择一个文章
//开始查看文章
//看完后退出文章界面
//各种检查
//检查adb连接状态,检查当前的应用是否是趣头条,界面是不是广告界面。。。
}
}
这种方式,内部单独对adb连接状态,应用启动状态,当前的应用的界面做检查,各种特殊情况要一一处理,非常麻烦,很难搞清楚。
改进设计
这么一个自动化工具,依赖于当前的adb的连接状态,当前运行的应用,当前的activity界面,当前的模式(看小视频还是看文章),这让我想起了设计模式里的“状态模式”。于是我们可以将模式的切换,以及对当前状态的检查单独抽离出来,放到大的循环去统一处理, 每个界面只需要按照当前的mode执行相应的刷积分操作即可。
下面是伪代码实现:
初始化 mode = 看短视频
while (true) {
//获取adb连接状态,当前的应用包名和activity名称
if (包名不是趣头条) {
onAppDie(){
//启动趣头条
}
continue;
}
//更新自动化模式(看小视频还是看文章)
schedule(){
//按需修改mode
}
if (当前是主界面) {
onMainPage() {
if(当前是看小视频模式) {
return;
}
//是看文章模式,点击一个文章
}
continue;
}
if (当前是文章详情界面) {
onNewsArticlePage(){
if(当前是看小视频模式) {
按返回键,退出到主界面
return;
}
//滑动界面看文章
按返回键,退出到主界面
}
continue;
}
//其他界面当做事误点击了广告界面
onOtherPage(){
按返回键,退出到主界面
}
}
实际运行效果
遗留的问题
- 没有办法知道挣了金币没有,有时候有些文章已经看过了或者本身就没金币;
- 点击的坐标是适配我的手机的(硬编码在代码里了),没适配其他手机。
结束语
通过adb基本可以实现刷金币的功能。如果你家里有几个旧手机,可以拿来刷两刷,看看能不能挣钱。文章里的是伪代码,具体代码欢迎关注下方的公众号,然后回复"薅趣头条"获取完整的代码。