当前位置:网站首页>统计直播间的榜一信息,从这里起步
统计直播间的榜一信息,从这里起步
2022-07-17 18:24:00 【S-arige】
背景
全民短视频,mcn机构的遍地开花,mcn的的生存、发展就要想各种各样的办法。在一个数据导向的社会,大家都希望通过数据获取更多、更准确的数据,于是有朋友希望统计下进入抖音直播间的人数和人物的基础信息。 想到之前写的一个自动翻页的小工具,想来这个事情还不是手拿把掐的小事嘛?于是就一口答应了。 于是就遇到了一系列的问题。
正常的流程
1、通过工具定位具体的view
2、根据业务,对view进行操作
遇到的问题
怎么查找希望的view? 赶时间的同学可以直接看最后的捷径整理
常用工具
2.1.1、ddms中的 dump view hierarchy for ui automator 新版本Android studio中已经不提供 可以尝试在Android sdk路径下,查看tools/monitor 是否存在,存在即还有可能能用。
2.1.2、上面提供的工具如果可用,还有一个简化版本的,可以直接在tools/bin下查找 uiautomatorviewer 功能和上面的一样
正常是这样的效果

还有就是利用adb命令,adb命令的方法看起来比较头疼,就不举例了,具体的可以自己搜索下。
出师不利
上面的工具已经用的比较多了,就以为解决这个问题就是分分钟的事情。还是自己年轻了。 尝试了2.1.1方法,然后一直失败

最开始以为是工具不对,内存导致的 就换了2.1.2的工具。还是不行。但是发现了一个重要的现象 如果页面上面的变化内容比较少的话,就能抓取到,多了就不行了 ,结合保存怀疑是因为在生成view hierarchy的时候,直播页面已经发生了变化,导致生成失败。
要不尝试反编译下apk?
说干就干,使用jadx对apk进行反编译,8g内存直接被爆了,重新配置为16g,正常跑起来了。 看了下代码,觉得头疼,要不还是想下其他方案吧。不得不说,直播页真的是有点头疼 1、activity竟然还要使用代理来处理 2、使用了万恶的event bus 3、对资源进行了混淆和代理 整体来说,如果去看这个代码的话,就比较头疼,要花比较多的精力。
要不先xp hook下?
这个好像成本也比较大。作为兜底方案。
柳暗花明又一村
本来以为没有其他的更好方案了,后来一想,不对,我们既然已经使用了辅助功能,为啥不考虑用api来做呢? 说干就干。 1、我们的service直接继承自 AccessibilityService 我们之前的业务也都在这个里面处理。
public abstract void onAccessibilityEvent(AccessibilityEvent event);
关注到 AccessibilityEvent 下有
public @EventType int getEventType() {
return mEventType;
}
查看EventType:
@IntDef(flag = true, prefix = { "TYPE_" }, value = {
TYPE_VIEW_CLICKED,
TYPE_VIEW_LONG_CLICKED,
TYPE_VIEW_SELECTED,
TYPE_VIEW_FOCUSED,
TYPE_VIEW_TEXT_CHANGED,
TYPE_WINDOW_STATE_CHANGED,
TYPE_NOTIFICATION_STATE_CHANGED,
TYPE_VIEW_HOVER_ENTER,
TYPE_VIEW_HOVER_EXIT,
TYPE_TOUCH_EXPLORATION_GESTURE_START,
TYPE_TOUCH_EXPLORATION_GESTURE_END,
TYPE_WINDOW_CONTENT_CHANGED,
TYPE_VIEW_SCROLLED,
TYPE_VIEW_TEXT_SELECTION_CHANGED,
TYPE_ANNOUNCEMENT,
TYPE_VIEW_ACCESSIBILITY_FOCUSED,
TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED,
TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY,
TYPE_GESTURE_DETECTION_START,
TYPE_GESTURE_DETECTION_END,
TYPE_TOUCH_INTERACTION_START,
TYPE_TOUCH_INTERACTION_END,
TYPE_WINDOWS_CHANGED,
TYPE_VIEW_CONTEXT_CLICKED,
TYPE_ASSIST_READING_CONTEXT
})
@Retention(RetentionPolicy.SOURCE)
public @interface EventType {}
看到了心心念念的 TYPE_VIEW_CLICKED 我觉得看到了光明。
2、就干,代码安排上。 开启辅助,触发对应view的点击事件。激动人心的事情发生了
真的输出了对应的view id和text!!!
3、使用
findAccessibilityNodeInfosByViewId(String viewId)
获取对应的nodeInfo,然后对其进行点击操作。
原本平淡无奇的操作,竟然再起波澜。
波澜再起
发现对前面找到的view进行点击操作的时候,无法触发效果。 但是我刚才点击的时候抓到的明明是这个view啊,text内容也是对的,怎么回事呢? 先看下这个view是不是clickable吧,万一没有这个功能呢?
List<AccessibilityAction> getActionList()
nodeInfo提供了查看当前节点所有的action的列表,也有对应的含义。其中我们比较关注的是这个
public static final int ACTION_CLICK = 0x00000010;
遗憾的是前面找到的view并没有这个action。
完美结局
回想Android的事件传递机制,如果一个view没有拦截点击事件,但是点击事件还被响应了,那就只有一个情况--当前的view的父布局或者子布局把事件给处理了。 兵分两路 通过:
getParent()
getChild(i)
去查看对应的父view和子view,并检查他们对应的action是否有click。 功夫不负有心人。最终确认了,view的父布局中有click的action。对父view进行操作,也获得了期望的效果。至此这个问题被解决。
捷径整理
1、利用AccessibilityService中onAccessibilityEvent的event 的clicktype,缩小view的查找范围。
2、校验view是否是想要确认的view
3、如果是需要view,但是无法响应事件,可以查找他的父布局或者子布局上能够响应click的view
4、确定最终要确定的view
5、不要被之前的经验所束缚,要多使用系统给的api,要多思考系统原理。
关注公众号: arigeweixin ,取得更多联系

边栏推荐
- torch.utils.data.DataLoader说明
- 【Pygame 学习笔记】5.rect对象的碰撞检测
- Framework construction of business card management
- Module 7 (Architecture Design of King glory mall)
- Onvif protocol related: 4.1.4 WS username token method to obtain the stream address
- Advanced C language -- custom type: structure enumeration Union
- (pc+wap) dream weaving template clothing dress website
- 每周小结(*65):有计划的输出
- Attachment handling of SAP Fiori
- Google Earth Engine——1992—至今混合坐标海洋模型、水温和盐度(全球海洋数据集HYCOM)
猜你喜欢

Advanced C language -- custom type: structure enumeration Union

Security measures for tcp/ip protocol vulnerabilities

【腾讯蓝鲸】第七届 7·24 运维日节日祝福送上~ 快来许愿~

onvif协议相关:3.1.2 Digest方式获取token列表

565.数组嵌套

语音通信网络的原理

C语言进阶——自定义类型:结构体 枚举 联合

How to upgrade Flink job gracefully?

onvif协议相关:2.1.1 none方式获取token
![[record of question brushing] 13 Roman numeral to integer](/img/44/9eff513ff8eb4109d3f77ed6832ee8.png)
[record of question brushing] 13 Roman numeral to integer
随机推荐
onvif协议相关:2.1.3 none方式获取流地址
2.三数之和
torch. utils. data. Dataloader description
Module 7 (Architecture Design of King glory mall)
Metal organic framework material / polymer composite zif-8/p (TDA co HDA) | zinc oxide [email protected] (FE) composite nan
Li Kou 413 division of equal difference sequence dynamic programming
Perl command batch replaces some contents in the file
Unveiling secrets of matrixcube 101 - functions and architecture of matrixcube
Three methods of realizing network request in pyodide
每周小结(*65):有计划的输出
MySQL sort index failure?
Chitosan coated pcn224 nanoparticles | metal organic skeleton fe-mil-88nh2 | nickel based MOF material (Ni MOF / NF)
XML文件解析
[Yugong series] July 2022 go teaching course 012 forced type conversion
[pyGame learning notes] 5 Collision detection of rect objects
Onvif protocol related: 4.1.2 WS username token method to obtain token
MOF customized materials | bimetallic CuNi MOF nano materials | core-shell structure [email protected] Nanocomposites | zif-8/ poly
Solutions to the failure of dedecms dream weaving to save the current column changes
力扣64-最小路径和——动态规划入门题型
基于PMOS的过压保护(OVP)电路仿真