用Android玩冲顶大会(实现你的财务自由)

点击上方蓝字关注公众号

码个蛋第269次推文

奖金任你领

作者:何时夕

博客:https://www.jianshu.com/u/45661204c0d6

文章目录

  • 前言

  • 用app去冲顶

    • 让app跑起来

    • 举个例子

    • 冲顶经验

  • app用到的技术解析

    • 需要实现的功能分析

    • 确定了需求之后要使用的技术

    • 代码详解

  • 总结

最近答题类app比较火,玩了几把之后想到为什么不用技术来查找答案呢?因此搞了一款辅助app,能够帮助大家直接搜索答案.经过两天的开发和三天的测试,终于让我的冲顶率达到了80%左右,先上几个不错的战绩装个逼.

1

用app去冲顶

 

1.让app跑起来

  1. 安装app。点击下载app(https://link.jianshu.com/?t=https%3A%2F%2Fpan.baidu.com%2Fs%2F1qZ74K8k)

  2. 进入手机的文件管理器,在本app的cache目录下面新建 tessdata目录 和 ShotImage目录。例如我的小米Mix2的目录是:Android/data/com.example.whensunet.chongdingdahui/cache

  3. 将chi_sim.traineddata文件放入上面新建的tessdata文件夹中,这个文件是ocr识别的语言库,没有的话就只能查找题干,不能查找选项。点击下载语言库(https://link.jianshu.com/?t=https%3A%2F%2Fpan.baidu.com%2Fs%2F1jJju02i)

  4. 在 设置—>无障碍/辅助功能—>WhenSunsetBaiWanYinXiongFuZhu中点击开启,开启app的服务。

  5. 下载夸克浏览器,这个浏览器比较轻便,能够减少查找答案的时间

  6. 打开app,同意所有权限要求,点击屏幕上的按钮,选择搜索引擎

  7. 此时只要点击本app冲顶大会的app的任意按钮,就会跳转到夸克浏览器按钮的内容或者题干+按钮内容进行搜索 ,点击屏幕最底端屏幕最底端上升500像素内的按钮会直接搜索题干。

  8. 如果无效请 进入设置中找到 app的权限界面,然后开启所有权限。

  9. 本app目前适配了mi5、mix2、谷歌nexus5和小米Max,适用于5.0以上的android系统,其他手机可能不能搜索按钮内容,但是题干一般情况下所有手机都能搜索。

2.举个例子

以冲顶大会app来举个例子

  1. 点击2区域中任意选项按钮,将会搜索题目+选项内容

  2. 注意需要让弹幕处于静止状态,要不然可能会搜索到错误答案。

  3. 如果要单独搜索题干,那么需要在3区域点击右下角的按钮,将3区域的输入框唤出并将其限制在3区域中,最后点击输入框,这样就能搜索题干了。

3.冲顶经验

经过3天的测试,我的冲顶率已经达到了80%左右,所以分享几个使用辅助的经验。

  1. 12道题目中一般会有10题是只需要搜索题干的

  2. 一般来说可以准备两只手机,一只运行速度快的手机进行答案的搜索,再搜索到答案之后先帮另一只手机选择答案,然后点击返回键回到本手机的冲顶大会选择答案。

  3. 比较难的场次会有1-2道需要查询选项的题目,此时需要两到三个人,每个人查一个选项,这样能够确保总结出最后的正确答案。

  4. 一般来说ios系统的直播速度比android系统慢2-3秒,可以利用好这个时间差,延长找答案的时间。建议第二只手机使用iphone或者ipad。

  5. 建议如果两个人搜索答案的话,可以一个人使用谷歌搜索,一个人使用百度搜索

2

app用到的技术解析

本节是对本app使用到的技术进行解析,没有兴趣的同学可以直接跳过.

1.需要实现的功能分析

  1. 监听冲顶大会app在前台的时候,我们点击按钮的事件

  2. 获取到被点击按钮的文字内容。

  3. 如果不能获取被点击按钮的文字内容,需要使用ocr技术,对图片进行文字解析

  4. 为了在3的情况下获取到图片,我们需要在运行后台service的时候对屏幕进行截图

  5. 获取到查找内容之后拼接搜索引擎的url,调起浏览器

2.确定了需求之后要使用的技术

  1. 使用android内置的无障碍服务可以实现监听冲顶大会app的各种事件。

  2. 我测试的时候发现,冲顶大会做了某些处理,使得不能通过无障碍来获取选项按钮的文字内容,只能获取该view的区域。此时我就想到额使用ocr技术,来识别该区域的文字。具体的库是tess-two,这是一个c++的库,需要开发者自己编译出so文件。然后调用java层的api,来实现ocr识别。

  3. 在运行在后台的情况下,对屏幕进行截图。这里5.0起的android系统提供了MediaProjection这个api,能够获取当前屏幕的帧。至于5.0以下需要root才能在后台进行屏幕截图,所以就放弃了。

  4. 可以通过Intent和浏览器包名,调起指定浏览器。这里我用了比较简洁快速的夸克浏览器。

3.代码详解

因为某些原因,打算过一段时间之后再放出源码,所以这里就讲解一下,app整个运行流程.当然我放出的apk是debug版,大家如果会反编译的话,还是能看见源码的

  • 首先是在MainActivity中初始化一些东西

    • 初始化tess-two的库

    • 向用户请求无障碍和屏幕截图的权限

    • 运行无障碍service

  • 1结束之后,此时无障碍service已经运行起来了,当我们点击冲顶大会的一个按钮的时候

    • 进入了onAccessibilityEvent()方法。

    • 进入了按钮点击的事件

    • 获取题干信息,这里我们需要注意到的问题是,冲顶大会的题干是不可点击的,所以在getQuestionRecursion方法中我会获取到,当前界面的Root View树的结构,然后递归寻找每个view中符合题干特征的文字.(这里需要大家对 view的绘制原理和view树的结构有一定的了解)

    • 方法传入的getRootInActiveWindow()是获取到当前屏幕上面window的view树结构

    • 可以看见方法内部就是对view树进行递归查找

  • 判断点击区域是否在只查询题干的区域,有了题干信息我们还需要判断,查的是题干还是选项。所以我规定了只要点击了屏幕上某个区域的按钮,那么就是要对题干进行查询。(细心的同学会发现,这个区域就是我前面提到的 屏幕底部 到 底部向上500像素的区域。)getIsSearchQuestion方法内部如图

    • 内部的结构很简单,仅仅是比较当前点击的view的区域,是否在我规定的区域内部

  • 如果3中返回的字符串不为空,就表示我们需要直接查询题干,此时直接调起夸克浏览器,否则就要识别点击的view区域的图像,来对选项进行查询,这里我们就只讲ocr识别的部分。useOcrToSearch方法内部如图

    • 这里的代码也很简单,构造MediaProjection

    • 通过MediaProjection获取一个VirtualDisplay并将ImageReaderSurface放入。

    • 此时ImageReader中每时每刻都会暂存一张当前屏幕的图片。

    • 接下来就是处理截图,然后进行ocr识别了,这里使用了AsyncTask在其他线程执行操作。

    • 前面我们都知道了怎么获取view的区域—————一个Rect,使用这个我们就可以将点击的按钮的区域变成一个bitmap

    • 有了view区域的图片,就可以直接调用tess-two的java api来进行ocr了。

    • 最后我们终于获取到了选项的内容,此时就可以调起浏览器进行搜索了。速度挺快的,我的mi5识别起来在500毫秒内,网好的情况下从点击到显示查找界面不会超过1.5秒

3

总结

大家可能会问,为什么这个app不是百万英雄的辅助,其实有两个原因:、

  • 百万英雄玩的人太多,每场能分的钱等级分化太严重。冲顶大会总的奖金少,但是奖金比较平均。

  • 其实上面一个原因是屁话,哈哈。最开始本app是针对百万英雄的辅助,但是头条毕竟是大厂,技术还是很好的。可能是为了防止作弊吧,西瓜视频的无障碍功能被禁止了 ,所以只能先用冲顶大会试试水。但是目前我已经找到了百万英雄的漏洞,或许下一次博客就是百万英雄的辅助介绍了,大家如果想知道的话,要多多关注我哈。

最后,用了本app的同学,如果冲顶成功了,别忘了发红包哈,嘿嘿!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值