分享
基于Android平台的新媒体自动化交互工具开发_邵小巍.pdf
下载文档

ID:2564496

大小:2.05MB

页数:4页

格式:PDF

时间:2023-07-12

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于 Android 平台 媒体 自动化 交互 工具 开发 邵小巍
2023.6电脑编程技巧与维护Device Monitor工具抓屏是否为控件型YNNOpenCV智能识别算法控件属性是否受限发送消息操控手势模拟操控线程回调更新UIY1概述近年来,新媒体技术在各级地方主流媒体中有了突飞猛进的发展,人们对信息的了解已不局限于读书、看报、看电视、听广播这样传统的获取方式。智能手机的普及和融媒体的快速发展,使掌上媒介成为了大众获取信息的主渠道,而在这些庞大的智能手机终端中,各式各样的Android应用层出不穷,在具体应用操作这些软件方面,用手触的方式在一些重复工作中显得乏陈无味,需要附加开发一些其他的外挂功能,例如,从一些App中获取感兴趣的数据,或者操作控制这些App完成类似自动化的功能等。2用户信息向目标软件的输入用户信息向目标软件的输入,如图1所示。使用以Android为平台的智能掌端设备时,为了让自已的应用程序与其他已安装的App进程进行交互并智能操作、自动控制,比较简单的方法是手机端连接个人计算机(PC)端,在PC端进行命令行脚本编程,许多自动化测试流程也是运用这样的方式通过安卓调试桥接工具进行联机或模拟测试,也有直接通过自已的掌端应用写入这些安卓调试桥(ADB)命令行,通过调试桥接命令行单击特定坐标位置或模拟操作某些特定键。实际上,这些命令在具体解析执行时相对来讲会略显滞后、进度缓慢,并且出于安全考量,这样的操作需要调试及使用的真机事先取得根权限(root)授权支持,root后的真机通常还承载着人们日常社交与网购的任务,账号和密码安全必须重视,在root状态下可能会为日后的操作使用留下后门安全隐患。因此,探索一种新途径以便在非root的状态下,开发运行一个类似的外挂程序完成所需的各项特殊功能尤为重要。在这里,Android的无障碍服务为实现此功能打开了一扇方便之门,利用该项技术即可完成与手机应用的一般性交互,其原本是为了残障人士而预留的接口,让他们也能像正常人一样方便地使用手机,用一些简单的方法完成一系列动作。具体来讲,可以利用这个无障碍服务提供的抽象基类,派生一个具体实现类,并且重写其中的一系列触法型方法事件对目标软件进行监测和交互,在锁定具体监测范围时,需要在XML文件夹下建立的无障碍参数配置文件中加入需要模拟控制的目标软件包名,明确只对感兴趣的目标软件进行监视,并且需要在项目清单文件中添加无障碍服务许可。可以在无障碍基类服务(Accessibili-tyService)子类的构造函数中通过窗体管理类(Win-dowManager)添加一个系统提示类型的置顶视图,作为一个简易的操控台,添加用来控制的命令按钮,让其置顶运行在其他App之上,在监测执行的单击事件中启动一个一次性或循环的线程监测目标App的视图内容变化,并将探测后操作的结果显示在屏幕新建的置顶视作者简介:邵小巍(1982),男,工程师,研究方向为广播电视工程及新媒体。基于 Android 平台的新媒体自动化交互工具开发邵小巍(秦安县文体广电和旅游局王墩转播台,甘肃 天水741600)摘要:智能手机的普及,无线网络在城乡各角落的全域覆盖,为便捷地了解这个世界提供了更多的可能。在信息时代,大家对于智能机的操控可谓是轻车熟路。许多时候,循规蹈矩的刻板操作已经很难满足人们与 Android 应用交互的特殊需求,探索一种实用的依附于 Android 应用之上的外挂式交互工具,使用编程的方式实现一系列自动化操控代替手工或手工不能完成的操作是一件实用且有趣的事。关键词:Android 系统;应用交互;外挂图1用户对目标应用输入流程73DOI:10.16184/prg.2023.06.0152023.6电脑编程技巧与维护图显示组件之上。但这样有一个问题,就是在这个新开设的线程中不能对自已的工具界面视图的文字属性或者按钮的激活状态等做出修改,因为对用户界面(UI)的操作受到单线程保护,所以这个UI型的视图级操作只被允许在随应用启动的主线程中进行更改,对按钮组件的标题等赋值都是无效的。为了完成更新视图等操作需要构建一个线程间调用异步执行的机制异步消息处理器(Handler)来完成,用消息处理的方式完成这些更新操作,在需要执行这样一些功能时,只需要发送一个特定的自定义消息,在消息到达Handler时,通过其消息处理的方法判断消息类型,一旦满足条件,则开辟一个新线程,做出更进一步的UI更新处理,也可以用UI线程执行方法(runOnUiThread)的显式调用方式让新定义的线程在主线程(UI可操作)中运行更新操作,这种原理底层的实现究其根本仍然是前述的Handler机制。关于如何分析获得目标应用软件的组件视图并加以操作控制,可以使用类似获取激活窗口root的方法取得目标App视图的根节点,进而通过以文本包含查找结点方法(findAccessibilityNodeInfosByText)查找文字部分或全部匹配或者以ID查找节点方法(findAccessibilityNodeIn-fosByViewId)查 找匹配目标控 件 的 资 源 标 识 符(re-source-id)。由于同名,如果这两种方式取得的控件仍然比较多且难以区分,则需要在ByText查找标题方式得到一系列满足条件的组件之后,用循环枚举时加计数值的形式进行区别筛查。为了便于观察,可以在每次枚举计数后加入Log语句,通过输出台记录输出每个获取到的组件的左上角顶点坐标及长度、宽度值,再与窗体控件层级查看(monitor)工具中查找到的组件位置参数进行对比以确定第几个计数值的组件是想要获取的目标(在每次目标软件打开时,这些枚举组件的计数值是不会改变的,因此可取得目标组件)。关于这些控件ID及文字属性的获取,可以启动安卓SDK相应版本开发包中工具文件夹下的monitor.bat工具来获得。对于一些活动的视图可能使用普通的捕获方式无效,例如,在做一个微信视频自动接听辅助工具时,接听控件是获取不到的,此时需要使用adb命令行执行UI自动抓取(uiau-tomator dump)和截图(screencap)命令获得相应的.uix和.png文件,可以建立一个批处理文件用来完成这些操作,再从monitor工具中打开.uix文件,并指定附加相应的.png截图就可以查看到视图中各控件的布局及属性。在批处理.bat文件中可以用类例下列语句对界面UI树进行获取,如图2所示。对于这些控件的模拟操作命令,可以用消息执行动作(performAction)发送单击操作,当然这只是对于目标控件clickable属性为真时才行得通,在计算机监视工具中执行手机抓屏后查看这些应用组件,单击属性的布尔值在此工具中可查看到。对于一些控件来讲,开发者并不想让其响应模拟单击,例如,许多应用的点赞控件,想用简单的performAction发送单击是不会有任何反应的,为了解决这个问题,在高一点的版本中,An-droid为开发者留了一个方便之门,那就是用手势模拟的方式解决,这种手势模拟的参数并不依赖于需要已知控件才能调用,它只需要相应的坐标即可。当起点和终点相同时,一个手势恰好可以看作是一次单击,使用手势的优点是可以触发那些没有clickable权限的东西,即使控件缺失可单击属性也不会影响人们消息模拟调用的操作,手势只能在Android 7.0以上的版本才能获得支持使用,就目前的发展势态来说,大部分手机是完全能够达到此项限制基准线的。在实际的操作中,使用monitor工具查看组件属性时,会发现往往既无resourceid,也无text值,控件对象无法取得,要想获得这个控件的区域坐标可谓困难重重,要做到这点只能使用图形智能识别技术,获取图像中不可获取的控件或单击区域。使用这种方法获取这些控件的外接矩形(boundsRect)区域,进而在区域内执行手势操作。而在早期的Android版本中,就连屏幕截图这样的操作都是不被允许的,识别分析控件更谈何容易,然而在后来的Android版本中放开了这种操作,因此在截图后使用图形智能识别技术分析即可以获得区域坐标。使用代码实现屏幕的动态截图,这需要较高级的版本支持,Android 5.0及以上即可,用媒体投射管理类创建一个屏幕捕获授权的动作类(intent),这需要用户手动允许确认,因此在启动加载这个intent时要用返回结果的形式启动,在用户授权之后来到结果返回事件(onActivityResult)中通过第一个参数是否为媒体投射许可(REQUEST_MEDIA_PROJECTION)判断授权是否被允许以继续执行屏幕截图操作。通过媒体投射管理类中的方法获取媒体投射,在这个投射上创建虚拟显示,并把截图数据写入图像读取类的Surface以供其使用。接下来,由于要检测识别处理截图数据有耗时需求,所图2命令行获取UI层次742023.6电脑编程技巧与维护以仍然需要在新线程中执行,考虑到UI界面更新,作为handler机 制 实 现 的 替 代 方 案,可 以 以 异 步 任 务(AsyncTask)类实现这些异步处理与更新,在继承自该类的后台处理方法中处理传入的图像。为了实现图标智能检测和识别,如果不使用现有三方库接口的话,那将是一项庞大的工作。为了简化此项工作,项目需要用到第三方OpenCV库(一个开源的第三方图像处理开发包),该库有多个不同平台的支持包,可以方便、快捷地进行图像分析,可以将图像转换为位图后再使用库函数换化成矩阵(Mat)对象,最后调用库中常用的图形处理函数,依次进行图片灰度的去色转化、边缘像素检测、轮廓特征匹配查找,进而可以获取到控件或操作区域的外部矩形框,需要用手势操控的坐标值范围由此可以准确获得。这项技术拥有广泛的适用性,无论是一个组件、一个小图标或是图形区域,都可以完美获取。具体过程涉及已有的待检图标在目标截屏图像中的查找与相似匹配问题。首先需要将待检图标与目标截屏图像进行灰度(gray)去色转化,成为灰度图像后存入矩阵Mat中,然后使用算法如常用的尺度不变特征转换(SIFT)方法运用关键特征角点核查筛选,将两个图像的关键点都存入关键点矩阵中,通过关键点矩阵可以用SIFT的计算函数算出它们的描述矩阵,有了描述矩阵就可以选用一种匹配算法进行两幅图的匹配检索。例如,邻近查找算法(FLANN)搜索方法就可以完成这种检索任务,新构建一个描述匹配器,传入两幅图的描述矩阵作为参数,调用匹配方法即可获得它们的匹配点矩阵对象,通过计算这些关键点距离的最大、最小值得到一些相配程度较高的点,最后经过查找单应性方法获取到单应性的矩阵(matrix)对象,再经过透视转化从而得到所查目标在截图视图中的外部矩形轮廓数据。3目标软件向用户的输出前述方法着重详解了从用户到目标应用的输入操控,对于任意屏幕组件有了完整的解决方案。在实际生活应用中,只有这些输入型操控方法是不够的,对于一个第三方应用显示数据输出的获取,同样有着很大的需求,通过手工复制其中内容的方式在很多应用中是无济于事的,即便是用上了代码编程加以辅助实现,要想通过查找这些控件并调用控件的文本属性获取显示数据,仍然不可行,其中一些应用尤其是小程序这样的视图,它们都是利用类似于像浏览器(WebView)这样的组件制作派生而来的,其中的数据并不能靠简单调用属性值获得。回到最初的方式,寻求一种具有普适性的操作,对于屏幕中任意区域数据的获取,可以借用光学字符识别(OCR)技术加以调用实现,使用第三方现有的OCR库,提取手机屏幕上的任意数据,成为一种可能的实现方式。可以用现成的百度提供的识别接口,对于访问量不大的个人调用,它是免费且性价比极高的。登录到百度的开放平台,切换至应用列表项,创建新应用时的应用名称可以随意填入,接口选择中系统已默认选择好文字识别,对于以HTTP方式调用的开发包需要选择An-droid平台,包名要与自身应用的APK包名一致,APK的信息摘要算法(MD5)签名信息也必须一并填写提交,在应用代码编写平台中,可以在导出签名的APK后从src目录下获取签名的.jks文件,使用keytool工具命令可以在命令行窗口中提取.jks文件密钥库

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开