在Linux兼容安卓系统上进行左右分屏的方法转让专利

申请号 : CN202210134802.6

文献号 : CN114185508B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 彭韬杨硕李翔黄晟黄彩龙马超游远赵坤谢辉军杨陈博寰

申请人 : 麒麟软件有限公司

摘要 :

本申请公开了在Linux兼容安卓系统上进行左右分屏的方法,所述方法包括以下步骤:选择Android系统镜像文件并对所述Android系统镜像文件做预处理;Linux系统上运行docker容器里所述Android系统;所述Linux系统创建Android应用显示视窗;所述Android系统接收Linux系统的启动命令,创建虚拟屏并绑定所述Android应用显示视窗;所述Android系统启动应用至虚拟屏;所述Android系统对Android应用所在虚拟屏进行左右分屏;在内存中添加所述Android应用的界面跳转匹配规则;所述Android应用跳转界面时,根据所述界面跳转匹配规则来选择启动至左屏或右屏;本发明更加契合宽屏显示,带来了两个窗口同时显示的交互体验,使多个创建的Android应用达到左右分屏的效果,有效地避免了多个应用场景被中断的情况。

权利要求 :

1.在Linux兼容安卓系统上进行左右分屏的方法,其特征在于,所述方法包括以下步骤:

选择Android系统镜像文件并对所述Android系统镜像文件做预处理;

Linux系统上运行docker容器里的所述Android系统;

所述Linux系统创建Android应用显示视窗;

所述Android系统接收Linux系统的启动命令,创建虚拟屏并绑定所述Android应用显示视窗;

所述Android系统启动所述Android应用至所述虚拟屏;

所述Android系统对所述Android应用所在的所述虚拟屏进行左右分屏;

在内存中添加所述Android应用的界面跳转匹配规则;

所述Android应用跳转界面时,根据所述界面跳转匹配规则来选择启动至左屏或右屏。

2.根据权利要求1所述的在Linux兼容安卓系统上进行左右分屏的方法,其特征在于,所述选择Android系统镜像文件并对所述Android系统镜像文件做预处理,包括以下步骤:选择支持分屏模式方案的所述Android系统平台进行系统定制;

将所述Android系统上原物理屏分屏模式的方案移植至所述虚拟屏。

3.根据权利要求1所述的在Linux兼容安卓系统上进行左右分屏的方法,其特征在于,所述Linux系统上运行docker容器里的所述Android系统,包括以下步骤:所述Linux系统上使用docker加载所述Android系统的镜像,让所述Linux系统和所述Android系统共享同一所述Linux系统内核;

所述容器中启动所述Android系统环境。

4.根据权利要求1所述的在Linux兼容安卓系统上进行左右分屏的方法,其特征在于,所述Android系统对所述Android应用所在的所述虚拟屏进行左右分屏,包括以下步骤:获取所述虚拟屏中所述Android应用界面所在的任务栈的任务ID;

根据所述任务ID,执行Android Activity任务管理服务类中的方法setTaskWindowingModeSplitScreenPrimary,所述Android系统将对当前所述虚拟屏进行分屏显示。

5.根据权利要求1所述的在Linux兼容安卓系统上进行左右分屏的方法,其特征在于,所述Android系统解析所述Android应用内的资源文件,并保存与预设定左右屏幕的界面跳转匹配规则至内存中,包括以下步骤:解析所述Android应用内存在的所述界面跳转匹配规则的资源文件;

对无所述界面跳转匹配规则的资源文件的所述Android应用做预设定规则;

将解析的所述界面跳转匹配规则或所述预设定规则保存至内存中。

6.根据权利要求1所述的在Linux兼容安卓系统上进行左右分屏的方法,其特征在于,所述Android应用跳转界面时,根据所述界面跳转匹配规则来选择启动至左屏或右屏,包括以下步骤:

在Activity启动流程中添加拦截器;

所述拦截器在每次Android应用界面跳转时对所述Activity启动流程进行拦截;

再将左屏当前所述Activity启动流程与预启动的所述Activity启动流程按所述界面跳转匹配规则进行匹配;

匹配符合所述界面跳转匹配规则的,则在启动意图中设置意图标识,所述Android应用界面启动至右屏;

反之,所述Android应用界面则按所述当前Activity启动流程,启动至左屏。

说明书 :

在Linux兼容安卓系统上进行左右分屏的方法

技术领域

[0001] 本申请涉及Android图形显示的技术领域,尤其涉及在Linux兼容安卓系统上进行左右分屏的方法。

背景技术

[0002] 近年来,随着Android用户的增长以及Android软硬件产品的成熟和发展,Android应用生态呈现出爆发式发展,在很多领域都已经超过Windows应用生态和iOS应用生态,成
为目前使用最广泛的应用生态。Android基于Linux内核发展而来,是目前移动终端市场中
市场份额最高的Linux类操作系统,在移动终端领域具有极好的生态环境;Windows系统占
据着PC市场的最大份额,其作为美国闭源操作系统,在信息网络安全方面存在巨大安全隐
患;而Linux操作系统,其作为Android的前身,由于开发人员数目和市场份额的限制,发展
较为缓慢,生态环境长期处于不良状态,一直不见起色。随着信息技术的飞速发展,国家对
信息安全的重视程度日益提升,国内基于开源Linux操作系统的自主操作系统日益发展壮
大,但Linux操作系统生态应用的严重缺乏仍旧是困扰Linux操作系统真正推向市场的一大
痛点。
[0003] 而要解决Linux操作系统的生态应用问题,必须解决用户数不足和平台应用软件数不足这两个关键点。Android在移动终端领域具有广泛的用户群,并且具有成熟的开发平
台和应用软件群体,对于解决Linux操作系统目前的窘境具有一定的参考价值。
[0004] 由于Android操作系统基于Linux内核发展而来,其针对移动终端设备的特点在用户空间做了大幅的改进和增强,所以给Linux操作系统兼容Android应用提供了极大的可能
性和便利,使得移动端的丰富应用很有可能成功运行在PC端。近年来,Android应用生态在
Linux操作系统上的兼容支持成为了研究热点,国内外有许多研究人员尝试将Android运行
环境迁移到Linux类计算机平台以实现Android应用生态在Linux操作系统上兼容支持的效
果,各种兼容技术衍生而出,其中就包括Google的 ARC(App Runtime for Chrome)技术、虚
拟机和模拟器技术、Anbox(Android in a Box)项目等,这些技术将PC端和移动端进行融
合,成功将Android应用生态迁移到Linux上来,极大地推动了Linux应用生态的发展,很大
程度上弥补了Linux应用缺乏的诟病,方便了Linux操作系统用户的日常办公、娱乐等需求,
也加快了Linux操作系统走向消费市场的步伐,但它们都还存在着无法忽视的用户体验问
题,包括稳定性、易用性、功能完备性等,导致这块技术领域没有显著的提升。
[0005] 目前运行在PC操作系统上Android运行环境,应用在使用过程中一般采用竖屏与单屏的显示模式,这种显示模式运行在普遍长大于宽的显示器中,显示效果并不是那么美
观,相较于原生的运行程序会显得突兀;如果Linux端窗口程序强行将显示效果改为与原生
运行程序一样,也就是长宽比与显示器差不多,众所周知,大部分的Android应用为适应手
机终端,都是竖屏显示的,如果Linux端改变窗口长宽,会导致Android应用不适配这种分辨
率,导致应用内图标、图像拉升;再者,PC操作还和手机终端操作一样,是单操作场景,这样
显示器大屏显示的优势就无法发挥,如果是应用窗口内左右分屏,创造两个场景,这样再处
理另一场景时,则无需中断当前场景的操作。结合以上两点,为充分发挥现有硬件性能,提
升PC上运行Android应用的显示效果以及用户的使用体验。

发明内容

[0006] 本申请实施例提供了在Linux兼容安卓系统上进行左右分屏的方法,用以解决现有的Android应用在转移至Linux PC端时,不适配Linux PC端的的宽屏显示分辨率,导致应
用内图标、图像被拉升变形等缺陷;以及存在着Android应用在Linux PC端操作上只能和手
机终端操作一样,为单操作场景,不能进行多场景操作的缺陷,导致了Linux PC端显示器大
屏显示的优势无法发挥,影响用户使用体验的技术问题。
[0007] 有鉴于此,本申请提供了在Linux兼容安卓系统上进行左右分屏的方法,所述方法包括以下步骤:选择Android系统镜像文件并对所述Android系统镜像文件做预处理;Linux
系统上运行docker容器里的所述Android系统;所述Linux系统创建Android应用显示视窗;
所述Android系统接收Linux系统的启动命令,创建虚拟屏并绑定所述Android应用显示视
窗;所述Android系统启动所述Android应用至所述虚拟屏;所述Android系统对所述
Android应用所在的所述虚拟屏进行左右分屏;在内存中添加所述Android应用的界面跳转
匹配规则; 所述Android应用跳转界面时,根据所述界面跳转匹配规则来选择启动至左屏
或右屏。
[0008] 可选地,所述选择Android系统镜像文件并对所述Android系统镜像文件做预处理,包括以下步骤:选择支持分屏模式方案的所述Android系统平台进行系统定制;将所述
Android系统上原物理屏分屏模式的方案移植至所述虚拟屏。
[0009] 可选地,所述Linux系统上运行docker容器里的所述Android系统,包括以下步骤:在所述Linux系统上使用docker容器加载所述Android系统的镜像,让所述Linux系统和所
述Android系统共享同一所述Linux系统内核;在所述docker容器中启动所述Android系统
环境。
[0010] 可选地,所述Android系统对所述Android应用所在的所述虚拟屏进行左右分屏,包括以下步骤:获取所述虚拟屏中所述Android应用界面所在的任务栈的任务ID;根据所述
任务ID,执行Android Activity任务管理服务类中的方法setTaskWindowingModeSplitSc
reenPrimary,所述Android系统将对当前所述虚拟屏进行分屏显示。
[0011] 可选地,所述Android系统解析所述Android应用内的资源文件,并保存与预设定左右屏幕的界面跳转匹配规则至内存中,包括以下步骤:解析所述Android应用内存在的所
述界面跳转匹配规则的资源文件;对无所述界面跳转匹配规则的资源文件的所述Android
应用做预设定规则;将解析的所述界面跳转匹配规则或所述预设定规则保存至内存中。
[0012] 可选地,所述Android应用跳转界面时,根据所述界面跳转匹配规则来选择启动至左屏或右屏,包括以下步骤:在Activity启动流程中添加拦截器;所述拦截器在每次
Android应用界面跳转时对所述Activity启动流程进行拦截;再将左屏当前所述Activity
启动流程与预启动的所述Activity启动流程按所述界面跳转匹配规则进行匹配;匹配符合
所述界面跳转匹配规则的,则在启动意图中设置意图标识,所述Android应用界面启动至右
屏;反之,所述Android应用界面则按所述当前Activity启动流程,启动至左屏。
[0013] 从以上技术方案可以看出,本申请实施例具有以下优点:
[0014] 本申请提供的在Linux兼容安卓系统上进行左右分屏的方法,与现有技术相比,所述方法包括以下步骤:选择Android系统镜像文件并对所述Android系统镜像文件做预处
理;Linux系统上运行docker容器里的所述Android系统;所述Linux系统创建Android应用
显示视窗;所述Android系统接收Linux系统的启动命令,创建虚拟屏并绑定所述Android应
用显示视窗;所述Android系统启动所述Android应用至所述虚拟屏;所述Android系统对所
述Android应用所在的虚拟屏进行左右分屏;在内存中添加所述Android应用的界面跳转匹
配规则; 所述Android应用跳转界面时,根据所述界面跳转匹配规则来选择启动至左屏或
右屏;通过以上方法,为运行在Linux系统上Android系统兼容环境中的Android应用提供一
种左右分屏的机制,将Android系统物理屏分屏模式的方案进行改造,将其移植到自创建的
虚拟屏当中,使Android应用启动时,可以实现横屏显示并且左右分屏的效果,提供了更好
的显示和交互体验,更加符合Linux PC端宽屏的显示效果,也避免了在Linux PC端下操作
Android应用时,遇到多个场景要处理时,需中断当前场景的情况,进而减少场景被中断和
恢复的繁琐过程,从而提升了用户的使用效率,使Android应用的使用体验有了革命性的突
破。

附图说明

[0015] 为了更清楚地表达说明本申请实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于
本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他
的附图。
[0016] 图1为本申请实施例中提供的在Linux兼容安卓系统上进行左右分屏的方法的流程示意图;
[0017] 图2为本申请实施例中提供的在Linux兼容安卓系统上进行左右分屏的方法中在Linux桌面操作系统显示的Android应用分屏的示意图;
[0018] 图3为本申请实施例中提供的一种在Linux兼容Android系统上基于Android多窗口的左右分屏方法中Android应用分屏过程的流程图。

具体实施方式

[0019] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本
发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在
没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0020] 为了便于理解,请参阅图1至图3,本申请提供了以下实施例:
[0021] 实施例1
[0022] 在Linux兼容安卓系统上进行左右分屏的方法,该方法应用在Linux兼容Android系统的环境中,使得Android应用以左右分屏的方式显示出来,该方法包括以下步骤:
[0023] S1:选择Android系统镜像文件并对Android系统镜像文件做预处理;
[0024] S2:Linux系统上运行docker(docker镜像的运行实例,可以看作是一个简易版的linux环境)容器里的Android系统;
[0025] S3:Linux系统创建Android应用显示视窗;
[0026] S4:Android系统接收Linux系统的启动命令,创建虚拟屏并绑定Android应用显示视窗;
[0027] S5:Android系统启动Android应用至虚拟屏;
[0028] S6:Android系统对Android应用所在的虚拟屏进行左右分屏;
[0029] S7:在内存中添加Android应用的界面跳转匹配规则;
[0030] S8:在Android应用跳转界面时,根据界面跳转匹配规则来判断是否跳转屏幕;
[0031] 在本申请实施例中,当基于Linux系统启动Android应用左右分屏时,具体地,首先对容器内Android系统进行改造,原Android系统运行在手机上可以通过设置对手机进行上
下分屏,这就属于物理屏幕的分屏模式。将物理屏幕的分屏模式方案移植到虚拟屏幕上,具
体步骤,第一步,需屏蔽原物理分屏流程中对于屏幕ID的限制,这样做是为了后续调用分屏
接口传入虚拟屏幕ID参数时,能走物理分屏流程;第二步,移除分屏之后中轴线(原物理屏
分屏之后存在于左右分屏中间的线,左右拖动修改左右屏幕大小),由于市面上大部分应用
分辨率的固定限制,左右拖动将会导致应用的不兼容。当Linux系统发送启动Android应用
指令时,Android系统创建虚拟屏,Linux系统将创建显示视窗绑定到虚拟屏;Android系统
将解析应用内的资源文件,如果存在界面跳转匹配规则的资源文件,则保存至内存中,如果
不存在,则预设定规则至内存中;当Android应用界面启动完成时,执行分屏模式接口,当用
户操作Android应用界面跳转时,Android系统对于改造之后的Activiy启动流程进行规则
过滤拦截,拦截成功,则设置意图标识启动至右屏,反之,则走原流程启动左屏;进而更加符
合Linux PC端宽屏的显示效果,也避免了在Linux PC端下操作Android应用时,遇到多个场
景要处理时,需中断当前场景的情况,进而减少场景被中断和恢复的繁琐过程,从而提升了
用户的使用效率,使Android应用的使用体验有了革命性的突破。
[0032] 进一步的,选择Android系统镜像文件并对Android系统镜像文件做预处理,包括以下步骤:选择支持分屏模式方案的Android系统平台进行系统定制;Android系统上原物
理屏分屏模式的方案移植至虚拟屏;通过以上方法,对于Android系统平台的镜像,应选择
支持分屏模式方案的版本进行镜像,且研究Android系统分屏模式的流程,并对流程中对屏
幕ID的限制进行屏蔽,将framework(框架)层构造的虚拟屏幕分屏的接口供应用层使用,进
而提高虚拟屏幕分屏的效率。
[0033] 进一步的,Linux系统上运行docker容器(docker镜像的运行实例,可以看作是一个简易版的linux环境)里的Android系统,包括以下步骤:Linux系统上使用docker加载
Android系统的镜像,让Linux系统和Android系统共享同一Linux系统内核;容器中再启动
Android系统环境;先创建docker容器加载上述改造之后的Android系统镜像,使得Android
系统共用Linux系统端的内核,并启动Android系统,Linux系统执行图形显示程序,去渲染
虚拟屏幕中的图像数据。
[0034] 进一步的,Android系统对Android应用所在的虚拟屏进行左右分屏,包括以下步骤:获取虚拟屏中Android应用所在的任务ID;根据任务ID,执行Android Activity(具有用
户界面的单一屏幕)任务管理服务类(ActivityTaskManagerService)中的方法setTaskWi
ndowingModeSplitScreenPrimary(设置当前任务的窗口模式为分屏模式,将当前任务作为
主屏显示),Android系统将对当前虚拟屏幕进行分屏显示;通过以上方法,解决了虚拟屏幕
的分屏显示问题,提高Android应用在虚拟屏上进行左右分屏的效率。
[0035] 进一步的,Android系统解析Android应用内的资源文件,并保存与预设定左右屏幕的界面跳转匹配规则至内存中,包括以下步骤:解析Android应用中存在的界面跳转匹配
规则的资源文件;对无界面跳转匹配规则的资源文件的Android应用做预设定规则;界面跳
转匹配规则类似于键值对,键(Key)则表示左屏当前界面,值(value)则表示预启动的界面;
将解析后和预设定完的界面跳转匹配规则保存至内存中;通过以上方法,提高界面跳转匹
配规则的设定和保存效率,进而提高Android应用跳转界面实现左右分屏的效率。
[0036] 进一步的,Android应用跳转界面时,根据界面跳转匹配规则来选择启动至左屏或右屏,包括以下步骤:在Activity(Activity是一个应用程序的组件,提供一个屏幕,用户可
以用来交互为了完成某项任务,通俗点为一个Android界面)启动流程中添加拦截器;拦截
器在每次Android应用界面跳转时对Activity启动流程进行拦截;再将左屏当前Activity
启动流程与预启动的Activity启动流程按界面跳转匹配规则进行匹配;匹配符合界面跳转
匹配规则的,则在启动意图中设置意图标识,Android应用界面启动至右屏;反之,Android
应用界面则按所述当前Activity启动流程,启动至左屏;通过以上方法,提高了Android应
用跳转界面实现左右分屏的效率。
[0037] 实施例2
[0038] 如图2中,在Linux操作系统上启动了两个窗口,其中运行的都是左右分屏的Android应用,左右分屏是两块独立的显示区域,同一窗口中的两个左右分屏是同一应用的
两个不同Activity显示,用户可以同时处理多个事件,有效地避免了处理多个事件时,当前
事件被中断的情况,提高用户的使用效率,发挥了Linux PC端显示器大屏显示多个Android
应用界面的优势。
[0039] 如图3中,每当启动一个Android应用时,Android系统会分配虚拟屏的DisplayId,用于各虚拟屏幕的管理,Android系统根据启动的包名判断是否需要采用分屏模式,如果分
屏则获取当前虚拟屏幕分配的DisplayId,通过DisplayId调用之前封装好的分屏接口,分
屏完成之后Android系统会创建两个栈split‑screen‑primary和split‑screen‑
secondary,分别对应着左屏和右屏,加上屏幕本身的栈fullscreen,这个对应的就是全屏
的栈,其中界面的跳转就是Android系统创建的Task在栈中作进栈、出栈以及移栈的操作。
[0040] 以上流程完成时Android系统再对应用内的资源文件进行解析,解析的规则保存至内存中,如无资源文件则预设定规则保存至内存中;用户使用应用过程中,遇到界面跳
转,则用左屏界面与欲启动的界面进行规则匹配,匹配成功则添加启动参数,启动至右屏,
反之,则走原启动流程;进而更加符合PC端宽屏的显示效果,也避免了在Linux PC端下操作
Android应用时,遇到多个场景要处理时,需中断当前场景的情况,进而减少场景被中断和
恢复的繁琐过程,从而提升了用户的使用效率,使Android应用的使用体验有了革命性的突
破。
[0041] 以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前
述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些
修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。