手机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连接到远程手机
下一篇:编写中。