手机app如何跳过无障碍权限实现弹框自动点击-ADB连接专题

手机app如何跳过无障碍权限实现弹框自动点击

--ADB连接专题

  • 一、前言

我们在前期的时候,在双SIM卡进行协同外呼和SIM卡切换时,对如何在手机中“执行批处理脚本做自动点击”的内容进行预研,力图使用事件触发和坐标点击等方式来实现手机安装的App对手机运行过程的其它应用或系统弹出框等预设界面进行自动确认操作。

详情可以会看笔者之前编写的上述三篇文章,如下:

《蓝牙电话-如何自动切换手机SIM卡》

《蓝牙电话-如何设置双SIM卡自动切换策略》

《手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案》

对于【智能拨号器App】而言,在应用运行过程中会涉及蓝牙配对、应用弹出权限授权框、插入USB蓝牙时需要手动点击确认等系统内置的界面弹出框。其实一直以来,我们都在思考,有没有什么办法能不需要认为进行操作,系统或应用App能够自动检测出弹出的系统界面,并自动点击进行授权和确认?

在之前的方案中,我们发现可以在应用中通过开启【无障碍功能】的方式,来实现自动触发点击坐标的事件。这样的话,可以在应用运行过程中,根据业务场景和实际需要,预先录制一个脚本,获取对应事件触发的界面,并点击界面的某些坐标或某些按钮,使应用的业务能够自动化的进行操作。

但是由于【无障碍功能】开启和授权的方式,要求应用每次启动运行的时候,都要手动再次弹一遍框然后再授一次无障碍的权限,有些还要倒计时8秒才能点击确认。非常的繁琐和反人类,简直就无法作为应用的正常附属功能来使用。(只能用于专有设备的专有功能进行特定场景下使用)

在做这个功能和业务探索时,我们也在这个范围之外思考:到底有没有办法,不使用无障碍这种鸡肋的功能,却又能实现手机弹框自动点击呢?

这个就是本篇章内容编写的由来,也是本系列《ADB连接专题》中的第四个篇章,关注过我的读者应该也能猜到,我们这么写那肯定是有办法的,在这里我们将花费几个章节的内容,对“手机app如何绕过无障碍权限实现弹框自动点击”的能力进行详细的阐述。

  • 二、重新了解ADB连接

ADB(Android Debug Bridge)是一个命令行工具,它允许您与连接的Android设备或模拟器进行通信。通过ADB,您可以安装和调试应用,提供对各种设备操作的访问,如安装和调试应用,并提供了对各种设备操作的访问。

adb协议是一种基于文本的通信协议,它使用Socket进行数据传输,通过USB连接或网络连接(如TCP/IP)在客户端(通常是计算机)和服务端(Android设备上的adb守护进程)之间建立连接。adb协议提供了一套丰富的命令,使开发者能够方便地执行各种操作,如安装应用、调试、查看日志等。

adb协议的主要功能

‌设备连接与管理‌:列出已连接的Android设备,进行设备识别和管理。

‌应用安装与卸载‌:通过adb命令可以安装和卸载Android设备上的应用。

‌文件传输‌:实现计算机与Android设备之间的文件传输,包括上传和下载。

‌设备调试‌:提供对Android设备的实时调试功能,如查看日志、执行shell命令等。

‌性能测试‌:获取Android设备的性能数据,如CPU占用率、内存占用率等,用于性能分析和优化。

adb协议的工作流程大致如下:

‌启动ADB Server‌:在PC端启动ADB Server,它监听5037端口等待Client连接。

‌Client发起请求‌:开发者通过ADB Client(命令行工具或脚本)向ADB Server发起请求。

‌Server处理请求‌:ADB Server接收请求后,根据请求类型(Host Service或Local Service)进行处理。

对于Host Service,如adb devices,ADB Server直接返回结果。

对于Local Service,如adb shell,ADB Server将请求转发到目标设备的ADB Daemon。

‌Daemon执行操作‌:ADB Daemon在Android设备上执行具体的操作,并将结果返回给ADB Server。

‌返回结果给Client‌:ADB Server将执行结果返回给ADB Client,开发者在命令行界面查看结果。

以上内容,摘选自某搜索引擎中检索的结果

  • 三、应用App如何连接手机自身的ADB

从前面的篇章《ADB连接专题-本地手机如何被远程访问和文件上传下载操作》中,我们获知到:所有的ADB连接数据,都是通过TCP来传输的,并且都在一个TCP连接中进行传输

那么问题来了,我不做远程传输,能不能由手机内的App做ADB客户端,自己连接ADB-Server的5555端口呢?当然可以。

远程ADB桥接本质上就是把App自己当做ADB客户端的远程代理来中继远程ADB客户端的TCP数据。既然远程ADB中继能正常工作,那么本地自己实现ADB客户端也完全没问题

这样,我们就通过Java层的Android应用,简单的实现了ADB协议中客户端的内容,就可以直接通过ADB向手机发送操作指令,用来实现本篇章中预期的“手机app如何绕过无障碍权限实现弹框自动点击”的能力,根本不需要什么【无障碍功能】的权限。

  • 四、ADB客户端常见的界面操作方式

通常,使用ADB自动化操作Android设备常用的有两种做法:

1)使用uiautomatorviewer工具(在Android SDK的tools文件夹中)来查看和获取界面元素的UI层级信息。示例代码如下:

adb shell uiautomator text "ButtonText" click

2)使用input tap坐标来对界面坐标所在位置进行点击。示例代码如下:

adb shell input tap x y

界面坐标所在的位置,可通过截图后用【画图】工具打开后移动到对于按钮位置来查看坐标X和Y的值,填写替换【adb shell input tap x y】的x和y的值即可。如下图所示:

图中,若想使用input tap来点击“乘车码”这个图标,只需要在界面截图中找到其相对于屏幕左上角的坐标位置(602, 1300)像素,然后在ADB命令中触发下述命令即可:

adb shell input tap 602 1300

  • 五、应用App需要做什么

与远程ADB中继的做法类似,操作人员需要开启开发者模式并插入USB调试线后运行adb tcpip 5555,将ADB端口映射为本地的5555端口。

应用App需要在本地建立一个TCP客户端并连接到该5555端口上,并实现ADB协议的客户端部分的逻辑。

实现完成了之后,即可在应用App中执行上面章节中列举的ADB命令,来对手机进行界面和数据操作。这些内容不会像【无障碍功能】这种,需要额外的弹框授权就可以正常运行,甚至我们开拓这个自动化点击的功能,有些时候就是为了去自动点击系统弹出的授权框而开发的。

一切操作的初始,仅仅只需要在手机重启了之后,做一下adb tcpip 5555而已,操作复杂度完全可以接受。

  • 六、小结

我们在《ADB连接专题》系列文章中,对手机本身的ADB功能进行了一系列深入的挖掘,在本篇章中,我们着重的探讨了“手机app如何绕过无障碍权限实现弹框自动点击”的能力。

实践发现,只要换个思路,世界的打开方式就完全不同,我们所有的操作和预期功能都能够有非常简洁清晰的途径去实现。


上一篇:如何跨互联网adb连接到远程手机

下一篇:编写中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/959376.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Blazor-选择循环语句

今天我们来说说Blazor选择语句和循环语句。 下面我们以一个简单的例子来讲解相关的语法,我已经创建好了一个Student类,以此类来进行语法的运用 因为我们需要交互性所以我们将类创建在*.client目录下 if 我们做一个学生信息的显示,Gender为…

高速光模块中的并行光学和WDM波分光学技术

随着AI大模型训练和推理对计算能力的需求呈指数级增长,AI数据中心的网络带宽需求大幅提升,推动了高速光模块的发展。光模块作为数据中心和高性能计算系统中的关键器件,主要用于提供高速和大容量的数据传输服务。 光模块提升带宽的方法有两种…

RNN实现阿尔茨海默症的诊断识别

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 导入数据 import torch.nn as nn import torch.nn.functional as F import torchvision,torch from sklearn.preprocessing import StandardScaler from torch.utils.data import TensorDatase…

RabbitMQ---面试题

常见面试题 1.MQ的作用及应用场景 类似问题:项目什么情况下用到了MQ,为什么要用MQ MQ的主要应用场景,消息队列的应用场景,为什么说消息队列可以削峰 首先MQ是一种用来接收和转发消息的队列,常见的应用常见如下&…

全球AI模型百科全书,亚马逊云科技Bedrock上的100多款AI模型

今天小李哥给大家介绍的是亚马逊云科技上的AI模型管理平台Amazon Bedrock上的Marketplace,这是亚马逊云科技在今年re:Invent发布的一个全新功能,将亚马逊的电商基因带到了其云计算平台,让我们能够通过Amazon Bedrock访问100多种流行、新兴和专…

八种排序算法【C语言实现】

系列文章目录 🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼 🎉🎉我的C语言初阶合集:C语言初阶合集,希望能…

在 vscode + cmake + GNU 工具链的基础上配置 JLINK

安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash,选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成: 接下来设置…

PyQt5之QtDesigner的若干配置和使用

1.描述 QtDesigner是一个可视化工具,可以通过该工具设计页面 2.简单使用 1.下载PyQt5-tools pip install pyqt5-tools 2.打开designer.exe文件 我采用的是虚拟环境,该文件位于C:\Users\24715\anaconda3\envs\pyqt\Lib\site-packages\qt5_applicatio…

【高项】6.3 排列活动顺序 ITTO

输入 项目管理计划组件: ① 进度管理计划;② 范围基准 项目文件: ① 假设日志;② 活动属性;③ 活动清单;④ 里程碑清单 工具与技术 紧前关系绘图法(PDM) ① 完成到开始&…

Elasticsearch 自定义分成器 拼音搜索 搜索自动补全 Java对接

介绍 通常用于将文档中的文本数据拆分成易于索引的词项(tokens)。有时,默认的分词器无法满足特定应用需求,这时就可以创建 自定义分词器 来实现定制化的文本分析。 自定义分词器组成 Char Filters(字符过滤器&#x…

Leecode刷题C语言之完成所有交易的初始最少钱数

执行结果:通过 执行用时和内存消耗如下&#xff1a; long long minimumMoney(int** transactions, int transactionsSize,int* transactionsColSize) {long long total_lose 0;int res 0;for (int i 0; i < transactionsSize; i) {int cost transactions[i][0];int cas…

案例研究丨浪潮云洲通过DataEase推进多维度数据可视化建设

浪潮云洲工业互联网有限公司&#xff08;以下简称为“浪潮云洲”&#xff09;成立于2018年&#xff0c;定位于工业数字基础设施建设商、具有国际影响力的工业互联网平台运营商、生产性互联网头部服务商。截至目前&#xff0c;浪潮云洲工业互联网平台连续五年入选跨行业跨领域工…

C++——动态管理

目录 一、C/C内存分布二、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free三、C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 四、operator new与operator delete函数4.1 operator new与operator delete函数 五、new和delete的实现原…

three.js+WebGL踩坑经验合集(4.1):THREE.Line2的射线检测问题(注意本篇说的是Line2,同样也不是阈值方面的问题)

上篇大家消化得如何了&#xff1f; 笔者说过&#xff0c;1级编号不同的两篇博文相对独立&#xff0c;所以这里笔者还是先给出完整代码&#xff0c;哪怕跟&#xff08;3&#xff09;没有太大区别。 这里我们把线的粗细调成5&#xff08;排除难选中的因素&#xff09;&#xff…

Vue2下篇

插槽&#xff1a; 基本插槽&#xff1a; 普通插槽&#xff1a;父组件向子组件传递静态内容。基本插槽只能有一个slot标签&#xff0c;因为这个是默认的位置&#xff0c;所以只能有一个 <!-- ParentComponent.vue --> <template> <ChildComponent> <p>…

【Unity3D】aab包太大无法上传Google问题

目录 一、勾选Split Application Binary&#xff0c;Unity直接打aab包 勾选Split Application Binary选项的影响 不勾选Split Application Binary选项的影响 总结 2、导出Android工程打包aab 一、勾选Split Application Binary&#xff0c;Unity直接打aab包 超出150MB部分…

第6章 数据结构—列表与列表项讲解--总结

整理 野火 《FreeRTOS 内核实现与应用开发实战指南》—基于野火 STM32 全系列&#xff08;M3/4/7&#xff09;开发板 文章目录 第6章 数据结构—列表与列表项讲解--总结6.1 C 语言链表简介6.1.1 单向链表6.1.2 双向链表6.1.3 链表与数组的对比 6.2 FreeRTOS 中链表的实现6.2.1 …

强化学习-Deep Q Network

文章目录 Deep Q Networkzip(*batch)的内部实现假设&#xff1a;结果&#xff1a; Deep Q Network 这种方式很适合格子游戏。因为格子游戏中的每一个格子就是一个状态&#xff0c;这是离散的&#xff0c;但在现实生活中&#xff0c;很多状态并不是离散而是连续的。所以我们可以…

C语言-构造数据类型

1、构造数据类型 结构体、共用体、枚举。 2、结构体 1、结构体的定义 结构体是一个自定义的复合数据类型&#xff0c;它允许将不同类型的数据组合在一起。 struct 结构体名 {数据类型1 成员变量1;数据类型2 成员变量2;数据类型3 成员变量3;数据类型4 成员变量4; } 2、结构体变…

FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转

本文主要介绍如何基于FPGA实现视频的90度/270度无裁剪旋转&#xff0c;旋转效果示意图如下&#xff1a; 为了实时对比旋转效果&#xff0c;采用分屏显示进行处理&#xff0c;左边代表旋转前的视频在屏幕中的位置&#xff0c;右边代表旋转后的视频在屏幕中的位置。 分屏显示的…