一种桌面系统上安卓应用的限制截屏方法与流程

文档序号:31349606发布日期:2022-08-31 12:27阅读:210来源:国知局
一种桌面系统上安卓应用的限制截屏方法与流程

1.本发明属于安卓应用开发技术领域,具体涉及一种桌面系统上安卓应用的限制截屏方法。


背景技术:

2.linux或windows等桌面操作系统上的安卓兼容环境(下文简称安卓兼容环境)是一种在linux或windows操作系统上运行安卓应用的技术,对丰富操作系统应用生态有着重要的意义。通常情况下,典型的安卓兼容环境主要包括安卓应用显示单元和安卓应用兼容服务,安卓应用显示单元用于在桌面操作系统上实现安卓应用的用户界面,安卓应用兼容服务用于提供运行于桌面操作系统上的安卓兼容环境,通过安卓应用显示单元与安卓应用兼容服务的相互配合实现安卓应用在桌面操作系统上的有效运行,例如,现有安卓兼容环境的实现方案有xdroid,它包括xdroidui和xdroidserver,xdroidui为安卓应用显示单元,xdroidserver为安卓应用兼容服务。
3.现有某些安卓应用中包含密码输入、个人隐私填写等内容敏感的使用页面,这些使用页面存在被恶意软件截屏进而导致用户个人数据被盗的可能,因此在涉及此类情况的安卓应用开发过程中开发人员往往会为上述使用页面增加防截屏功能。现有安卓系统提供了安卓应用防截屏的系统接口,通过设置系统接口达到限制截取安卓应用窗口的功能,如为接口activity.getwindow().addflags()设置参数为windowmanager.layoutparams.flag_secure,设置该系统接口后,即使在安卓应用视图切换时也无法截取安卓应用窗口的清晰的缩略图。
4.然而,由于安卓应用设置的防截屏机制是通过安卓系统实现的,因此对于运行在桌面系统上的安卓应用而言,上述防截屏机制将不再起作用,此时采用桌面系统提供的截屏方式进行截屏就可以截取整个桌面系统当前桌面的内容,如采用桌面系统提供的截屏按键或者截屏接口即可间接实现对安卓应用的截屏,这为用户在桌面系统上使用安卓应用引入了安全隐患。


技术实现要素:

5.有鉴于此,本发明提供了一种桌面系统上安卓应用的限制截屏方法,能够实现运行在桌面系统中的安卓应用的限制截屏功能。
6.本发明提供的一种桌面系统上安卓应用的限制截屏方法,包括以下步骤:步骤1、用户在桌面系统中启动安卓应用时,当安卓兼容环境的限制截屏系统接口被调用且调用参数为限制截屏参数时,获取安卓应用的第一指纹信息,并将第一指纹信息发送至桌面系统的安卓应用显示单元;步骤2、安卓应用显示单元在与第一指纹信息相匹配的安卓应用窗口中增加限制截屏标记;安卓兼容环境在toast创建时获取与其相关的安卓应用的第二指纹信息,若第二指纹信息与第一指纹信息相同则为toast增加限制截屏标记,否则不做处理;
步骤3、当桌面系统中出现截屏操作时,暂停执行截屏操作,通知安卓兼容环境遍历当前的display,隐藏display中属于限制截屏的安卓应用的图层,再强制刷新display;步骤4、恢复执行截屏操作,待截屏操作执行完毕后,通知安卓兼容环境恢复步骤3隐藏的display图层后,再强制刷新display。
7.进一步地,所述步骤3中隐藏display中属于限制截屏的安卓应用的图层的方式为:安卓兼容环境遍历display,对于非新增或状态未改变的display,选择display中属于限制截屏的安卓应用的图层进行隐藏,或选择名称中含有限制截屏标记的图层进行隐藏,再将display的状态设置为待刷新;对于新增的display,选择不属于限制截屏的安卓应用的图层且名称中不含限制截屏标记的图层构建layerstack完成display的创建。
8.进一步地,所述选择display中属于限制截屏的安卓应用的图层进行隐藏,或选择名称中含有限制截屏标记的图层进行隐藏中的隐藏方式为:将属于限制截屏的安卓应用的图层或名称中含有限制截屏标记的图层从display的layerstack中删除。
9.进一步地,所述选择display中属于限制截屏的安卓应用的图层进行隐藏,或选择名称中含有限制截屏标记的图层进行隐藏中的隐藏方式为:将属于限制截屏的安卓应用的图层或名称中含有限制截屏标记的图层设置为全透明。
10.进一步地,所述步骤3中当桌面系统中出现截屏操作时的判断方式为:当安卓应用显示单元监测到桌面系统按键中的截屏键被按下则说明出现截屏操作。
11.进一步地,所述步骤3中当桌面系统中出现截屏操作时的判断方式为:当桌面系统监测到截屏api被调用则说明出现截屏操作。
12.进一步地,所述步骤3中还包括通知安卓应用显示单元将带有限制截屏标记的安卓应用窗口均设置为不可见。
13.进一步地,所述将带有限制截屏标记的安卓应用窗口均设置为不可见的方式为:将带有限制截屏标记的安卓应用窗口设置为全透明。
14.进一步地,所述将带有限制截屏标记的安卓应用窗口均设置为不可见的方式为:对于linux系统在窗口合成器合成窗口时不合成带有限制截屏标记的安卓应用窗口。
15.有益效果:本发明通过在安卓兼容环境中监测限制截屏系统接口的调用及toast的创建过程,确定限制截屏的安卓应用的指纹信息及toast相关安卓应用的指纹信息,并根据指纹信息判断图层是否属于限制截屏的安卓应用,同时,在桌面系统中根据指纹信息确定窗口是否属于限制截屏的安卓应用并控制窗口的显示或隐藏,由此在桌面系统上实现了安卓应用的限制截屏功能。
附图说明
16.图1为本发明提供的一种桌面系统上安卓应用的限制截屏方法的流程图。
具体实施方式
17.下面结合附图并举实施例,对本发明进行详细描述。
18.为了便于理解本发明提供的技术方案,现将与本发明相关的安卓系统技术名词列举如下:surfaceflinger服务,是用于在安卓系统中将接收到的多个来源的图形显示数据合成后发送到显示设备。例如,安卓应用一般包括三个图层,即顶部的状态栏、底部或者侧面的导航栏以及应用的界面,单独更新和渲染图层,再将图层发送到surfaceflinger服务进行合成后刷新到硬件显示。
19.绘制表面(surface),是安卓应用窗口第一次显示时请求安卓系统内的windowmanagerservice服务为其创建的用于记录窗口显示内容的类。安卓系统中,窗口(window)是从设计者角度定义的关于层次和布局的类,surface则是从工程师实现角度定义的类。窗口的内容是变化的,surface需要有空间来记录每个时刻窗口的内容。在安卓系统的surfaceflinger实现里,surface一般具有两个缓冲区,分别用于绘画和显示,两个缓冲区按照固定的频率进行交换,从而实现窗口的动态刷新。
20.图层(layer),是surfaceflinger 进行合成的基本操作单元。layer在安卓应用请求创建surface时在surfaceflinger内部创建,因此surface与layer对应。
21.显示(display),是用于从帧缓冲区中取出数据信息并将数据信息展示到屏幕上的类,其中,虚显(virtualdisplay)是display的子类。display的状态一般包括读取状态(mcurrentstate)和待绘制状态(mdrawingstate)两类,其中,处于待绘制状态的display通常为处于读取状态的display的子集。
22.本发明提供了一种桌面系统上安卓应用的限制截屏方法,流程如图1所示,包括以下步骤:步骤1、用户在桌面系统中启动安卓应用时,安卓兼容环境监测限制截屏系统接口的调用,当限制截屏系统接口被调用且调用参数为限制截屏参数时,获取安卓应用的第一指纹信息,并将第一指纹信息发送至运行在桌面系统的安卓应用显示单元。
23.具体来说,限制截屏系统接口,例如linux系统的activity.getwindow().addflags()接口,该接口的参数windowmanager.layoutparams.flag_secure即为限制截屏参数。本发明采用安卓应用的指纹信息辨识安卓应用,安卓应用的指纹信息为安卓应用的包名,获取安卓应用的第一指纹信息的方式可为获取当前任务id或activitythread相关的包名。
24.步骤2、安卓应用显示单元根据接收到的指纹信息查找对应的安卓应用窗口,并在对应的安卓应用窗口中增加限制截屏标记;安卓兼容环境监测toast的创建过程,在toast创建时获取与其相关的安卓应用的第二指纹信息,若第二指纹信息与第一指纹信息相同则为toast增加限制截屏标记,否则不做处理。
25.由于toast是由安卓兼容环境管理的,且现有toast中并不包含创建toast的安卓应用的相关信息,因此本发明对toast所在的图层进行特殊处理。toast的创建过程需要在安卓兼容环境内监测,当toast创建时找到与创建toast操作相关的安卓应用,根据安卓应用的指纹信息确定其是否为限制截屏的安卓应用,如果是则可在toast对应的图层名称中增加限制截屏标记,以便surfaceflinger服务能够识别。
26.步骤3、当桌面系统中出现截屏操作时,暂停执行截屏操作,通知安卓兼容环境遍历当前的display,对于每个display遍历其中的图层,并将其中属于限制截屏的安卓应用
的图层从display中删除,再对安卓兼容环境内的display进行强制刷新。
27.此外,当安卓兼容环境内删除了限制截屏的安卓应用的图层后,如果桌面系统不做处理则在桌面端进行截屏操作过程中限制截屏的安卓应用会显示为黑色矩形,降低用户体验,因此,本发明还需执行通知桌面系统内的安卓应用显示单元将带有限制截屏标记的安卓应用窗口均设置为不可见的操作。
28.其中,桌面系统监测截屏操作的方式为在安卓应用显示单元中监测桌面系统按键中的截屏键,如截屏键按下则说明用户正在桌面系统执行截屏操作。桌面系统监测截屏操作的方式还可为通过监测桌面系统中截屏api的调用进行判断,如果截屏api被调用则说明用户正在桌面系统执行截屏操作。桌面系统的截屏api,例如linux系统中的x11/wayland的截屏api。
29.设置带有限制截屏标记的安卓应用窗口不可见的方式为通过调用qt或者窗口管理器的相应接口将带有限制截屏标记的安卓应用窗口设置为全透明,或者当桌面系统为linux系统时修改窗口合成器composer在合成窗口时不合成带有限制截屏标记的安卓应用窗口。
30.在遍历当前的display,对于每个display遍历其中的图层,并将其中属于限制截屏的安卓应用的图层从display中删除的过程中,判断图层是否属于限制截屏的安卓应用时,若图层为toast对应的图层则通过图层名称判断,即若图层名称中包含了限制截屏标记则说明该toast属于限制截屏的安卓应用,反之则不属于;若图层为非toast对应的图层则通过图层对应的安卓应用的指纹信息是否与第一指纹信息相等进行判断,相等则说明该图层属于限制截屏的安卓应用,反之则不属于。
31.步骤4、恢复执行截屏操作,待截屏操作执行完毕后,通知安卓兼容环境将步骤3中删除的图层增加到display中后,再对安卓兼容环境内的display进行强制刷新;通知桌面系统内的安卓应用显示单元将增加了限制截屏标记的安卓应用窗口恢复为原始设置。
32.实施例:本实施例通过对安卓兼容环境及桌面系统进行系统级的修改实现了本发明提供的一种桌面系统上安卓应用的限制截屏方法,具体包括以下步骤:s1、在安卓兼容环境内监测限制截屏接口的调用,根据监测结果设置限制截屏标记。
33.通过修改安卓兼容环境对应的安卓系统框架,当监测到对window.addflag的调用时,如果调用参数windowmanager.layoutparams.flag_secure被设置为1,则获取当前task或者activitythread对应的packagename,并通过rpc通知xdroidui。当xdroidui收到通知后,根据packagename找到对应的安卓应用窗口,将安卓应用窗口标记为限制截屏。
34.s2、在桌面系统linux/windows端监视截屏操作的执行,当截屏操作被执行时,延迟截屏操作,执行s3。
35.具体包括以下两种方式:一是在xdroidui中监视桌面系统按键中的截屏键,如截屏键被按下,则说明开始执行截屏操作;二是监视x11/wayland/windows的截屏api的调用,如果截屏api被调用,则说明开始执行截屏操作。
36.s3、在安卓兼容环境内监测toast的创建,在toast创建时判断toast是否属于限制截屏的安卓应用,若属于则在toast对应的图层中做标识。
37.具体步骤如下:修改toast类的显示函数(show),获取当前线程所在的taskid,通过taskid获取对应的安卓应用的指纹信息,根据指纹信息判断若该安卓应用为限制截屏的安卓应用,则在此toast对应的图层的名称中加入限制截屏标记,例如,将layer的名字设置为“toast.noscreenshot”,以便surfaceflinger能够识别该toast为限制截屏的toast。
38.s4、通知安卓兼容环境内的xdroidservice或surfaceflinger,强制刷新安卓兼容环境内的display,强制刷新后surfaceflinger会重新为每个display分配layer集合,此时即可隐藏限制截屏的安卓应用所对应的所有图层,已实现使安卓兼容环境不向桌面系统传递限制截屏的安卓应用所对应的应用窗口数据。具体包括以下步骤:s4.1、修改surfaceflinger::handletransactionlocked,遍历每个display,对于非新增或状态未改变的display,遍历display中的图层,通过图层的task属性判断该图层是否属于限制截屏的安卓应用,如果属于则将此layer从此display的layerstack中删除,否则不处理;此外,若图层的名称为“toast.noscreenshot”,则将此图层从display的layerstack中删除,否则不处理;然后,将此display的状态设置为有变化待刷新。
39.对于新增的display,在构建layerstack时,选择不属于限制截屏的安卓应用的图层构建layerstack,并采用新建的layerstack完成display的创建,具体来说,遍历每个图层,通过图层的task属性判断该图层是否属于限制截屏的安卓应用,或是通过图层的名称是否为“toast.noscreenshot”判断图层是否属于限制截屏的安卓应用,然后将不属于限制截屏的安卓应用的图层加入新的layerstack,并通过setlayerstack将此layerstack赋给display完成新建。
40.此外,除了删除限制截屏的安卓应用对应的图层外,本发明还可采用将这些图层的alpha值设置为0即全透明的方式实现隐藏限制截屏的安卓应用所对应的所有图层,两种方式相比删除的方式更高效。
41.s4.2、执行handletransactionlocked的标准操作。
42.s4.3、调用surfaceflinger的接口强制刷新安卓兼容环境的display。
43.进一步地,为了提高显示效果,通知桌面系统即linux/windows端,控制限制截屏的安卓应用所对应的安卓应用窗口进行刷新。
44.控制限制截屏的安卓应用所对应的安卓应用窗口进行刷新的方式,包括以下两种:一种是由xdroidui在收到通知后,通过qt或者窗口管理器的相应接口将所有标记为限制截屏的应用的窗口都设置为全透明;另一种是在linux系统中,修改窗口合成器composer,修改后的窗口合成器composer遍历所有窗口,选择不属于限制截屏的安卓应用的窗口进行合成。
45.其中,上述linux系统中修改窗口合成器composer 的方式为,对于支持x11协议的系统来说,通过修改xcompositegetoverlaywindow或xcompositeredirectsubwindows,即可实现不合成限制截屏的窗口;对于支持wayland协议的系统来说:通过修改wl_compositor_create_surface,可实现不为限制截屏的窗口其创建surface,即可达到不合成限制截屏的窗口的效果。
46.s5、恢复挂起的截屏程序,执行截屏操作。
47.s6、当linux/windows端监视截屏操作结束后,通过rpc通知安卓兼容环境内的xdroidservice或surfaceflinger强制刷新,修改后的surfaceflinger::
handletransactionlocked根据标准策略加入之前删除的图层;通知桌面系统端恢复限制截屏应用的窗口的透明度,或通知窗口合成器正常合成所有窗口。
48.综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1