CN106406914A - 安卓***窗口数据的获取方法及装置 - Google Patents

安卓***窗口数据的获取方法及装置 Download PDF

Info

Publication number
CN106406914A
CN106406914A CN201610996206.3A CN201610996206A CN106406914A CN 106406914 A CN106406914 A CN 106406914A CN 201610996206 A CN201610996206 A CN 201610996206A CN 106406914 A CN106406914 A CN 106406914A
Authority
CN
China
Prior art keywords
screenshotss
android system
java
window data
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201610996206.3A
Other languages
English (en)
Inventor
刘琛
刘一琛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201610996206.3A priority Critical patent/CN106406914A/zh
Publication of CN106406914A publication Critical patent/CN106406914A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开了一种安卓***窗口数据的获取方法及装置,其中,所述方法包括:在当前应用程序中创建一个java程序,所述java程序用于在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据;获取当前应用程序的安装路径;通过adb shell命令进入安卓***的shell模式,在安卓***的shell模式下根据所述安装路径查找并启动所述java程序。本发明实施例无需进行root操作,即可实现各种版本安卓***的终端设备的窗口数据的获取,而且在各种机型的android终端设备上都能适用,具有更好的适配性。

Description

安卓***窗口数据的获取方法及装置
技术领域
本发明涉及移动终端操作***技术领域,尤其涉及一种安卓***窗口数据的获取方法及装置。
背景技术
随着移动设备技术不断地发展和移动终端在人们日常生活中的普及,人们对移动终端在娱乐性和智能型方面的要求也与日俱增。移动终端的截屏功能,用于获取***窗口数据的,方便了用户进行信息的共享,增加了趣味性和娱乐性,越来越受到人们的欢迎。
目前,android***主要有以下几种截屏方案:
方案一、通过调用View.getDrawingCache()。其中,.getDrawingCache是android的view族类的的一个方法,该方法是获取view的视图缓存这是最常见的应用内截屏方法,这个函数的原理就是通过view的Cache来获取一个bitmap对象,然后保存成图片文件。这种截屏方式虽然非常的简单,但是有很大的局限性,该方法只能对应用自身的view来获取cache,所以只能截取应用内部的界面,而状态栏等应用外部的视图便都无法截取到。并且其对某些view的兼容性也不好,比如web view内的内容也无法截取。
方案二、读取屏幕buffer。市场上绝大多数显示设备成像都是通过一块内存进行显示(这块内存就是所说的显存),这块显存在程序中也称为屏幕buffer,操作***将需要成像的像素数据拷贝到屏幕buffer来显示,也就是说通过读取屏幕buffer就能获取当前屏幕的成像,因为Android是基于linux内核,所以能在android中找到屏幕buffer这个设备,本方案通过读取/dev/graphics/fb0这个帧缓存文件中的数据来获取屏幕上的内容,但是/dev/目录的读取权限是system级的,普通应用根本就没有这个权限,需要root。
方案三、通过VirtualDisplay接口。VirtualDisplay是android5.0提供的录屏接口,其使用非常简单,其缺点也很明显,只能在android 5.0以上的终端设备才能使用,而对于目前用户占大多数的android 4.+版本的终端设备则无法使用该接口。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的安卓***窗口数据的获取方法及装置,本发明实施例无需进行root操作,即可实现各种版本安卓***的终端设备的窗口数据的获取。
本发明的一个方面,提供了一种安卓***窗口数据的获取方法,包括:
在当前应用程序中创建一个java程序,所述java程序用于在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据;
获取当前应用程序的安装路径;
通过adb shell命令进入安卓***的shell模式,在安卓***的shell模式下根据所述安装路径查找并启动所述java程序。
可选地,所述存在***访问权限的截屏方法为安卓***的源码中的具有隐藏属性的截屏方法。
可选地,所述在当前应用程序中创建一个java程序,包括:
在所述java程序的main方法中创建一个截屏服务,所述截屏服务用于监听当前应用程序是否接收到截屏请求,并在获取到安卓***窗口数据时,将获取到的安卓***窗口数据传输到对应的服务端口。
可选地,还包括:
获取所述截屏服务对应的服务端口,并采用adb端口重定向命令将所述服务端口重定向到PC设备的预设端口,以供所述PC设备获取所述安卓***窗口数据并进行显示。
可选地,所述采用java反射机制访问存在***访问权限的截屏方法,包括:
根据所述截屏方法所属类的类名称描述符,获取所述截屏方法所属的类型对象;
获取所述截屏方法的输入参数和方法名称描述符,根据所述输入参数和方法名称描述符获取所述截屏方法的对象;
基于所述截屏方法所属的类型对象以及所述截屏方法的对象,采用Invoke方法调用所述截屏方法。
可选地,所述根据所述截屏方法所属类的类名称描述符,获取所述截屏方法所属的类型对象,包括:
判定当前安卓***的版本信息,根据所述版本信息确定所述截屏方法所属类的类名称描述符;
采用Class类的Class.forName()方法,以根据所述类名称描述符获取所述截屏方法所属类的类型对象。
可选地,所述根据所述输入参数和方法名称描述符获取所述截屏方法的对象,包括:
所述输入参数包括当前屏幕的宽度值和高度值;
将所述方法名称描述符作为第一参数,将所述当前屏幕的宽度值和高度值作为第二参数,采用getDeclaredMethod方法获取所述截屏方法的对象。
可选地,所述在安卓***的shell模式下根据所述安装路径查找并启动所述java程序,包括:
在安卓***的shell模式下调用app_process命令,以根据所述安装路径查找并启动所述java程序。
本发明的另一个方面,提供了一种安卓***窗口数据的获取装置,包括:
创建模块,用于在当前应用程序中创建一个java程序,所述java程序用于在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据;
获取模块,用于获取当前应用程序的安装路径;
执行模块,用于通过adb shell命令进入安卓***的shell模式,在安卓***的shell模式下根据所述安装路径查找并启动所述java程序。
可选地,所述创建模块,具体用于在所述java程序的main方法中创建一个截屏服务,所述截屏服务用于监听当前应用程序是否接收到截屏请求,并在获取到安卓***窗口数据时,将获取到的安卓***窗口数据传输到对应的服务端口;
进一步地,所述装置还包括:
数据共享模块,用于获取所述截屏服务对应的服务端口,并采用adb端口重定向命令将所述服务端口重定向到PC设备的预设端口,以供所述PC设备获取所述安卓***窗口数据并进行显示。
本发明实施例提供的安卓***窗口数据的获取方法及装置,通过在当前应用程序中创建一个java程序,并在安卓***的shell模式下根据该应用程序的安装路径查找并启动所述java程序,以使该java程序在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据。本发明实施例无需进行root操作,即可实现各种版本安卓***的终端设备的窗口数据的获取,而且在各种机型的android终端设备上都能适用,具有更好的适配性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明实施例的一种安卓***窗口数据的获取方法的流程图;
图2示出了根据本发明实施例的另一种安卓***窗口数据的获取方法的流程图;
图3示出了根据本发明实施例的一种安卓***窗口数据的获取装置的结构示意图;
图4示出了根据本发明实施例的另一种安卓***窗口数据的获取装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。
本实施例提供的安卓***窗口数据的获取方法被配置在终端设备中,例如,PDA(个人数字助理,Personal Digital Assistant)、智能手机等各种使用安卓操作***的电子设备。下面以智能手机为例,结合附图对本申请实施例技术方案的主要实现原理、具体实施方式及其对应能够达到的有益效果进行详细的阐述。
图1示意性示出了本发明一个实施例的安卓***窗口数据的获取方法的流程图。
参照图1,本发明实施例的安卓***窗口数据的获取方法具体包括以下步骤:
步骤S11、在当前应用程序中创建一个java程序,所述java程序用于在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据。
反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。例如,程序能够“观察”并且修改自己的行为。
本发明实施例中,所述存在***访问权限的截屏方法为安卓***的源码中的具有隐藏属性的截屏方法。
具体的,在安卓***的源码中,存在一些***的隐藏方法,这些方法被标记成了隐藏属性,具体采用“@hide”符号进行标记,这些被标记成隐藏属性隐藏方法没有办法直接调用,需要通过反射机制来进行访问。
本实施例中的截屏方法具体为Surface/SurfaceControl方法。SurfaceControl.screenshot()与Surface.screenshot()是android***提供的截屏函数。其中,android api版本大于17采用的是SurfaceControl.screenshot(),android api版本低于17用的是Surface.screenshot()。
在实际应用场景中,虽然可以通过反射机制反射到screenshot方法并调用,但是普通的android应用程序根本就没有调用screenshot方法的权限,也无法完成screenshot方法的反射。因此本发明实施例中,通过创建一个java程序,并将实现截屏的方法放在java程序中,通过java程序调用screenshot方法。具体的,java程序用于监听当前应用程序是否接收到截屏请求,并在监听到当前应用程序接收到截屏请求时,调用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据。
由于用于实现截屏方法的java类再android当中没有办法直接运行,而且其java文件也没有提供android的运行环境,因此,为了确保java程序的正常运行,本实施例中通过在应用程序中创建能够实现截屏方法的java程序,并将该应用程序apk作为java程序的宿主,将java程序码放入android应用代码中,让android的apk为其提供运行环境。
需要说明的是,作为java程序宿主的当前应用程序可以是新创建的应用程序,也可以是当前***中已有的应用程序。
进一步地,当所述当前应用程序是新创建的应用程序时,所述方法还包括预先创建应用程序,并将该应用程序作为java程序的宿主应用程序的步骤。
步骤S12、获取当前应用程序的安装路径。
可理解的,由于本实施例中的java程序是在应用程序中创建的,因此当前应用程序的安装路径也即是java程序的路径。
本实施例中,导出java程序路径是通过执行“export CLASSPATH=”命令来实现的,命令后面接java类的路径,这里就是当前应用程序apk包的安装路径,在android手机中应用的apk包都是安装在/data/app目录下,其安装名字就是应用的包名,本实施例中用pkg来指代,所以其完整命令是:
“export CLASSPATH=/data/app/pkg”。
步骤S13、通过adb shell命令进入安卓***的shell模式,在安卓***的shell模式下根据所述安装路径查找并启动所述java程序。
本发明实施例中,在获取到当前应用程序的安装路径之后,通过在安卓***的shell模式下根据该安装路径查找并启动在当前应用程序中创建的java程序,以使其在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,获取安卓***窗口数据。
在实际应用场景中,虽然普通的android应用程序根本就没有调用screenshot方法的权限,但是,安卓***的shell模式却有这个权限,本发明实施例可以通过adb shell命令打开android手机的shell模式,进入安卓***的shell模式,进而在安卓***的shell模式下根据所述安装路径查找并启动所述java程序。
本发明实施例提供的安卓***窗口数据的获取方法,通过在当前应用程序中创建一个java程序,并在安卓***的shell模式下根据该应用程序的安装路径查找并启动所述java程序,以使该java程序在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据。本发明实施例无需进行root操作,即可实现各种版本安卓***的终端设备的窗口数据的获取,简单、有效地实现了各种安卓***窗口数据的获取,而且在各种机型的android终端设备上都能适用,具有更好的适配性。
本发明实施例中,所述步骤S11中的在当前应用程序中创建一个java程序,具体通过以下步骤实现:在所述java程序的main方法中创建一个截屏服务,所述截屏服务用于监听当前应用程序是否接收到截屏请求,并在获取到安卓***窗口数据时,将获取到的安卓***窗口数据传输到对应的服务端口。
其中,所述截屏请求可以通过PC设备发送的http请求实现。具体的,PC设备可通过浏览器来访问终端设备的当前应用。
在一个具体实施例中,在android中实现java程序的创建具体包括:在java程序的类中实现一个静态方法,将其命名为main,并在main方法中创建一个截屏服务。为了简单快速地实现截屏,可以开启http服务作为所述的截屏服务。在java和android中开启http服务的方式有很多,本发明实施例中可以使用okhttp和AsyncHttpServer实现http服务的创建,该http服务用于监听当前应用程序是否接收到截屏请求,当服务监听到截屏请求时,java程序采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据就返回其截图的数据,并在获取到安卓***窗口数据时,将获取到的安卓***窗口数据传输到对应的服务端口。
在一个具体示例中,所述截屏请求可以为一个get请求,请求名为screenshot,可理解的是本实施例中的请求名并不是固定的,用户可在实际使用场景中自己约定,对此本发明不做具体限定。
在本发明的一个可选实施例中,如图2所示,所述安卓***窗口数据的获取方法还包括步骤S14:
步骤S14、获取所述截屏服务对应的服务端口,并采用adb端口重定向命令将所述服务端口重定向到PC设备的预设端口,以供所述PC设备获取所述安卓***窗口数据并进行显示。
本实施例中,虽然通过adb shell命令开启了截屏服务,但是该截屏服务只能通过adb shell命令进行请求访问,也就是只能在手机上进行内部的访问请求。为了数据PC设备共享窗口数据,实现android***的终端设备与PC设备的同步显示,本发明实施例,通过adb端口重定向命令开启端口转发功能。例如本实施例中开启的截屏服务的端口是8080,那么需要调用adb命令“adb forward tcp:8080tcp:8080”,使得PC设备通过8080端口去访问该截屏服务,以获取所述安卓***窗口数据并进行显示。
本发明实施例通过端口重定向命令,将截屏服务对应的服务端口重定向到PC设备的预设端口,以供所述PC设备获取所述安卓***窗口数据并进行同步显示,实现非root情况下,android***的终端设备与PC设备的同步显示。
本发明实施例中,所述采用java反射机制访问存在***访问权限的截屏方法,包括以下附图中未示出的步骤:
步骤A11、根据所述截屏方法所属类的类名称描述符,获取所述截屏方法所属的类型对象。
其中,所述类名称描述符具体是指该类的字符串名称。
进一步地,步骤A11中的根据所述截屏方法所属类的类名称描述符,获取所述截屏方法所属的类型对象,具体包括:判定当前安卓***的版本信息,根据所述版本信息确定所述截屏方法所属类的类名称描述符;采用Class类的Class.forName()方法,以根据所述类名称描述符获取所述截屏方法所属类的类型对象。
步骤A12、获取所述截屏方法的输入参数和方法名称描述符,根据所述输入参数和方法名称描述符获取所述截屏方法的对象。
进一步地,步骤A12中的根据所述输入参数和方法名称描述符获取所述截屏方法的对象,包括:
所述输入参数包括当前屏幕的宽度值和高度值;将所述方法名称描述符作为第一参数,将所述当前屏幕的宽度值和高度值作为第二参数,采用getDeclaredMethod方法获取所述截屏方法的对象。
步骤A13、基于所述截屏方法所属的类型对象以及所述截屏方法的对象,采用Invoke方法调用所述截屏方法。
本实施例中,由于screenshot方法是类方法所以先要获取其所属的类型对象。具体的,可以调用Class类的forName方法,该方法接受一个类的字符串名称返回该类的类型对象。在这里需要先判断当前安卓***的版本,具体的,安卓***的版本可通过***函数:Build.VERSION.SDK_INT来读取,当返回值大于17时,得到的字符串名称就是“android.view.SurfaceControl”,当返回值小于17时,得到的字符串名称是“android.view.Surface”,当返回SurfaceControl类/Surface类的类型对象后,需要调用其getDeclaredMethod方法来反射screenshot方法。getDeclaredMethod方法第一个参数是screenshot方法的方法名称描述符,这里就是“screenshot”,第二个参数是screenshot方法的参数类型数组,screenshot方法接受需要截图的宽、高作为参数,即screenshot方法的参数:终端设备的屏幕的宽和高,即第二个参数就是‘new Class[]{Integer.TYPE,Integer.TYPE}’,这样就返回一个screenshot方法的对象,要想调用screenshot方法需要再调用其invoke方法,invoke方法的参数就是终端设备的屏幕的宽和高。其中,终端设备的屏幕的宽、高可以使用android提供的SurfaceControlVirtualDisplayFactory.getCurrentDisplaySize方法来获取。
本发明实施例中,所述在安卓***的shell模式下根据所述安装路径查找并启动所述java程序,包括:
在安卓***的shell模式下调用app_process命令,以根据所述安装路径查找并启动所述java程序。
由于adb shell命令执行的都是命令行程序,而本发明实施例中的java程序是在一个android应用程序中创建的,要想运行该java程序,需要使用app_process命令。其中,app_process命令可以直接在android设备上执行java程序,由于本实施例中的java程序代码在终端设备的apk中,所以首先需要设置app_process执行的路径,路径设置后可以直接调用app_process命令来启动java程序。具体执行的命令为“exec app_process/system/bin pkg.Main'$@'”,该命令表示调用exec app_process命令,system/bin是其***bin路径,pkg.Main指代本实施例中创建的截屏服务类的全称。
本发明实施例在完成截屏服务的开启操作之后,仅需要向包含有java程序代码的应用程序发送截屏请求即可,每次通过adb命令访问截屏请求时会返回一张终端设备当前的屏幕截图,这样只要在PC设备重复调用服务请求就能源源不断的获取终端设备当前的***窗口数据,从而达到PC机与手机同步进行显示的效果。
具体的,循环发送可以pc端定义自己的逻辑,比如每隔多少毫秒发送一次http请求,pc端可以自己针对不同的机型进行设置,已达到最好的效果,其实电脑端相当于服务的客户端,实现一个网络的客户端有多种方法,例如可以直接通过浏览器来获取,浏览器访问screenshot请求,然后将获取的图像显示在浏览器上。
本发明实施例提供了一种安卓***终端设备与PC设备在不root的情况下的同屏方案,与现有技术相比,本技术方案具有更好的适配性,在各种机型的android手机上都能适用。
对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
图3示意性示出了本发明一个实施例的安卓***窗口数据的获取装置的结构示意图。
参照图3,本发明实施例的安卓***窗口数据的获取装置具体包括创建模块301、获取模块302以及执行模块303,其中:
所述的创建模块301,用于在当前应用程序中创建一个java程序,所述java程序用于在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据。
其中,所述存在***访问权限的截屏方法为安卓***的源码中的具有隐藏属性的截屏方法。
所述的获取模块302,用于获取当前应用程序的安装路径;
所述的执行模块303,用于通过adb shell命令进入安卓***的shell模式,在安卓***的shell模式下根据所述获取模块302获取的安装路径查找并启动所述创建模块301在当前应用程序中创建的java程序。
可理解的,由于本实施例中的java程序是在当前应用程序中创建的,因此当前应用程序的安装路径也即是java程序的路径。因此,本实施例通过获取模块302获取当前应用程序的安装路径,并在安卓***的shell模式下根据该安装路径查找并启动在当前应用程序中创建的java程序,以使其在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据。
在本发明的一个可选实施例中,所述创建模块301,具体用于在所述java程序的main方法中创建一个截屏服务,所述截屏服务用于监听当前应用程序是否接收到截屏请求,并在获取到安卓***窗口数据时,将获取到的安卓***窗口数据传输到对应的服务端口;
进一步地,如图4所示,所述安卓***窗口数据的获取装置还包括数据共享模块304,所述的数据共享模块304,用于获取所述截屏服务对应的服务端口,并采用adb端口重定向命令将所述服务端口重定向到PC设备的预设端口,以供所述PC设备获取所述安卓***窗口数据并进行显示。
本发明实施例中,所述的执行模块303,具体用于在安卓***的shell模式下调用app_process命令,以根据所述安装路径查找并启动所述java程序。
进一步地,所述执行模块303,具体通过启动所述java程序,以使所述java程序执行如下操作:根据所述截屏方法所属类的类名称描述符,获取所述截屏方法所属的类型对象;获取所述截屏方法的输入参数和方法名称描述符,根据所述输入参数和方法名称描述符获取所述截屏方法的对象;基于所述截屏方法所属的类型对象以及所述截屏方法的对象,采用Invoke方法调用所述截屏方法。
其中,所述根据所述截屏方法所属类的类名称描述符,获取所述截屏方法所属的类型对象,包括:判定当前安卓***的版本信息,根据所述版本信息确定所述截屏方法所属类的类名称描述符;采用Class类的Class.forName()方法,以根据所述类名称描述符获取所述截屏方法所属类的类型对象。
其中,所述根据所述输入参数和方法名称描述符获取所述截屏方法的对象,包括:所述输入参数包括当前屏幕的宽度值和高度值;将所述方法名称描述符作为第一参数,将所述当前屏幕的宽度值和高度值作为第二参数,采用getDeclaredMethod方法获取所述截屏方法的对象。
本发明实施例提供的安卓***窗口数据的获取装置,通过创建模块301在当前应用程序中创建一个java程序,并使执行模块303在安卓***的shell模式下根据该应用程序的安装路径查找并启动所述java程序,以使该java程序在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据。本发明实施例无需进行root操作,即可实现各种版本安卓***的终端设备的窗口数据的获取,而且在各种机型的android终端设备上都能适用,具有更好的适配性。
在此提供的算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的网关、代理服务器、***中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (10)

1.一种安卓***窗口数据的获取方法,其特征在于,包括:
在当前应用程序中创建一个java程序,所述java程序用于在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据;
获取当前应用程序的安装路径;
通过adb shell命令进入安卓***的shell模式,在安卓***的shell模式下根据所述安装路径查找并启动所述java程序。
2.根据权利要求1所述的方法,其特征在于,所述存在***访问权限的截屏方法为安卓***的源码中的具有隐藏属性的截屏方法。
3.根据权利要求1或2所述的方法,其特征在于,所述在当前应用程序中创建一个java程序,包括:
在所述java程序的main方法中创建一个截屏服务,所述截屏服务用于监听当前应用程序是否接收到截屏请求,并在获取到安卓***窗口数据时,将获取到的安卓***窗口数据传输到对应的服务端口。
4.根据权利要求3所述的方法,其特征在于,还包括:
获取所述截屏服务对应的服务端口,并采用adb端口重定向命令将所述服务端口重定向到PC设备的预设端口,以供所述PC设备获取所述安卓***窗口数据并进行显示。
5.根据权利要求1或2所述的方法,其特征在于,所述采用java反射机制访问存在***访问权限的截屏方法,包括:
根据所述截屏方法所属类的类名称描述符,获取所述截屏方法所属的类型对象;
获取所述截屏方法的输入参数和方法名称描述符,根据所述输入参数和方法名称描述符获取所述截屏方法的对象;
基于所述截屏方法所属的类型对象以及所述截屏方法的对象,采用Invoke方法调用所述截屏方法。
6.根据权利要求5所述的方法,其特征在于,所述根据所述截屏方法所属类的类名称描述符,获取所述截屏方法所属的类型对象,包括:
判定当前安卓***的版本信息,根据所述版本信息确定所述截屏方法所属类的类名称描述符;
采用Class类的Class.forName()方法,以根据所述类名称描述符获取所述截屏方法所属类的类型对象。
7.根据权利要求5所述的方法,其特征在于,所述根据所述输入参数和方法名称描述符获取所述截屏方法的对象,包括:
所述输入参数包括当前屏幕的宽度值和高度值;
将所述方法名称描述符作为第一参数,将所述当前屏幕的宽度值和高度值作为第二参数,采用getDeclaredMethod方法获取所述截屏方法的对象。
8.根据权利要求1或2所述的方法,其特征在于,所述在安卓***的shell模式下根据所述安装路径查找并启动所述java程序,包括:
在安卓***的shell模式下调用app_process命令,以根据所述安装路径查找并启动所述java程序。
9.一种安卓***窗口数据的获取装置,其特征在于,包括:
创建模块,用于在当前应用程序中创建一个java程序,所述java程序用于在监听到当前应用程序接收到截屏请求时,采用java反射机制访问存在***访问权限的截屏方法,以获取安卓***窗口数据;
获取模块,用于获取当前应用程序的安装路径;
执行模块,用于通过adb shell命令进入安卓***的shell模式,在安卓***的shell模式下根据所述安装路径查找并启动所述java程序。
10.根据权利要求9所述的装置,其特征在于,所述创建模块,具体用于在所述java程序的main方法中创建一个截屏服务,所述截屏服务用于监听当前应用程序是否接收到截屏请求,并在获取到安卓***窗口数据时,将获取到的安卓***窗口数据传输到对应的服务端口;
进一步地,所述装置还包括:
数据共享模块,用于获取所述截屏服务对应的服务端口,并采用adb端口重定向命令将所述服务端口重定向到PC设备的预设端口,以供所述PC设备获取所述安卓***窗口数据并进行显示。
CN201610996206.3A 2016-11-11 2016-11-11 安卓***窗口数据的获取方法及装置 Pending CN106406914A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610996206.3A CN106406914A (zh) 2016-11-11 2016-11-11 安卓***窗口数据的获取方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610996206.3A CN106406914A (zh) 2016-11-11 2016-11-11 安卓***窗口数据的获取方法及装置

Publications (1)

Publication Number Publication Date
CN106406914A true CN106406914A (zh) 2017-02-15

Family

ID=59230377

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610996206.3A Pending CN106406914A (zh) 2016-11-11 2016-11-11 安卓***窗口数据的获取方法及装置

Country Status (1)

Country Link
CN (1) CN106406914A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107197088A (zh) * 2017-05-16 2017-09-22 网易(杭州)网络有限公司 基于安卓移动设备的截图方法与装置
CN107807835A (zh) * 2017-10-26 2018-03-16 竞技世界(北京)网络技术有限公司 一种利用java反射机制进行截屏的方法
CN108563382A (zh) * 2018-02-26 2018-09-21 挖财网络技术有限公司 基于安卓***的截屏方法及装置
CN109660661A (zh) * 2018-12-03 2019-04-19 北京云测信息技术有限公司 一种适用于安卓9.0***的远程真机截图方法
CN111309617A (zh) * 2020-02-21 2020-06-19 北京字节跳动网络技术有限公司 应用程序的控制方法、装置、存储介质及电子设备
CN113259224A (zh) * 2018-04-11 2021-08-13 创新先进技术有限公司 一种客服数据发送的方法及装置
CN113835752A (zh) * 2020-06-08 2021-12-24 中兴通讯股份有限公司 数据获取方法、装置、终端及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103729174A (zh) * 2012-10-16 2014-04-16 腾讯科技(深圳)有限公司 截屏方法及装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103729174A (zh) * 2012-10-16 2014-04-16 腾讯科技(深圳)有限公司 截屏方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
STEVENSUNZH: "vysor的实现原理是什么?", 《HTTPS://WWW.ZHIHU.COM/QUESTION/46229570》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107197088A (zh) * 2017-05-16 2017-09-22 网易(杭州)网络有限公司 基于安卓移动设备的截图方法与装置
CN107197088B (zh) * 2017-05-16 2020-09-25 网易(杭州)网络有限公司 基于安卓移动设备的截图方法与装置
CN107807835A (zh) * 2017-10-26 2018-03-16 竞技世界(北京)网络技术有限公司 一种利用java反射机制进行截屏的方法
CN108563382A (zh) * 2018-02-26 2018-09-21 挖财网络技术有限公司 基于安卓***的截屏方法及装置
CN113259224A (zh) * 2018-04-11 2021-08-13 创新先进技术有限公司 一种客服数据发送的方法及装置
CN113259224B (zh) * 2018-04-11 2022-07-26 创新先进技术有限公司 一种客服数据发送的方法及装置
CN109660661A (zh) * 2018-12-03 2019-04-19 北京云测信息技术有限公司 一种适用于安卓9.0***的远程真机截图方法
CN111309617A (zh) * 2020-02-21 2020-06-19 北京字节跳动网络技术有限公司 应用程序的控制方法、装置、存储介质及电子设备
CN113835752A (zh) * 2020-06-08 2021-12-24 中兴通讯股份有限公司 数据获取方法、装置、终端及存储介质

Similar Documents

Publication Publication Date Title
CN106406914A (zh) 安卓***窗口数据的获取方法及装置
US20220222070A1 (en) Techniques to deploy an application as a cloud computing service
CN112513820B (zh) 开发工具扩展程序的透明远程执行
US10983774B2 (en) Extensions for deployment patterns
CN113010181B (zh) 一种深度学习框架之中算子的部署方法、装置及电子设备
US20140244812A1 (en) Method, system and program for browser to switch ie core
US8543713B2 (en) Computing environment arranged to support predetermined URL patterns
US20110047415A1 (en) Debugging of business flows deployed in production servers
CN102930058B (zh) 一种在浏览器的地址栏中实现搜索的方法和装置
US20150026146A1 (en) System and method for applying a set of actions to one or more objects and interacting with the results
CN110427323A (zh) 一种应用测试方法、装置、代理服务器和***
US20220030052A1 (en) Cross-platform Module for Loading Across a Plurality of Device Types
CN104965691A (zh) 配置网页页面的页面元素的方法、装置及***
US11023558B1 (en) Executing functions on-demand on a server utilizing web browsers
US20180357436A1 (en) Parallel access to running eda application
US20180239693A1 (en) Testing web applications using clusters
CN103761241A (zh) 一种图片数据的上传方法和浏览器
CN104363251A (zh) 网站安全检测方法与装置
CN108574669A (zh) 用户行为树构建方法及装置
CN104378389A (zh) 网站安全检测方法与装置
CN110765483A (zh) 一种配置化的日志脱敏方法、装置和电子设备
WO2016039782A1 (en) Auditing of mobile applications
US20230037382A1 (en) Docker installed software/hardware discovery
CN108304321A (zh) 一种创建前后端开发联调环境的方法、***及装置
CN104392408B (zh) 一种展现图像的***及方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20170215

RJ01 Rejection of invention patent application after publication