一种应用于Linux上Android多窗口显示方法

文档序号:26003672发布日期:2021-07-23 21:21阅读:220来源:国知局
一种应用于Linux上Android多窗口显示方法

本发明属于android技术领域,具体涉及一种应用于linux上android多窗口显示方法。



背景技术:

近年来,随着android用户的增长,以及android软硬件产品的成熟和发展,android应用生态呈现出爆发式发展,在很多领域都已经超过windows和ios,成为目前使用最广泛的应用生态。android基于linux内核发展而来,是目前移动终端市场中市场份额最高的linux类操作系统,在移动终端领域具有极好的生态环境;windows系统占据着pc市场的最大份额,其作为美国闭源操作系统,在信息网络安全方面存在巨大安全隐患;而linux操作系统,其作为android的前身,由于开发人员数目和市场份额的限制,发展较为缓慢,生态环境长期处于不良状态,一直不见起色。随着信息技术的飞速发展,国家对信息安全的重视程度日益提升,国内基于开源linux操作系统的自主操作系统日益发展壮大,但linux操作系统生态应用的严重缺乏仍旧是困扰linux操作系统真正推向市场的一大痛点。

要解决linux操作系统的生态问题,必须解决用户数不足和平台应用软件数不足这两个关键点。android在移动终端领域具有广泛的用户群,并且具有成熟的开发平台和应用软件群体,对于解决linux操作系统目前的窘境具有一定的参考价值。

由于android操作系统基于linux内核发展而来,其针对移动终端设备的特点在用户空间做了大幅的改进和增强,所以给linux操作系统兼容android应用提供了极大的可能性和便利,使得移动端的丰富应用很有可能成功运行在pc端。近年来,android应用生态在linux操作系统上的兼容支持成为了研究热点,国内外有许多研究人员尝试将android运行环境迁移到linux类计算机平台以实现android应用生态在linux操作系统上兼容支持的效果,各种兼容技术衍生而出,其中就包括google的arc(appruntimeforchrome)技术,虚拟机和模拟器技术、anbox(androidinabox)项目等,这些技术将pc端和移动端进行融合,成功将android应用生态迁移到linux上来,极大地推动了linux应用生态的发展,很大程度上弥补了linux应用缺乏的诟病,方便了linux操作系统用户的日常办公、娱乐等需求,也加快了linux操作系统走向消费市场的步伐,但它们都还存在着用户无法忽视的体验问题,包括稳定性、易用性、功能完备性等,导致这块技术领域没有显著的提升。

在linux操作系统上运行android应用方面,android模拟器类似于主机上开启一个窗口去运行一个手机,借助于这个模拟手机实现主机运行android应用功能。android模拟器基于qemu(linux上著名开源模拟器)改写,提供了虚拟机,借助于kvm(kernel-basedvirtualmachinelinux内核模块,属于硬件虚拟化技术,负责借助硬件vt加速特性实现虚拟机的cpu虚拟化,内存虚拟化等)。在linux上使用android模拟器时,大部分android应用无法成功安装,满足不了用户多窗口、多应用的需求,再比如anbox项目,虽然anbox与android模拟器不同,能实现多窗口运行应用的功能,但由于选择的容器方案不能直接的访问显卡硬件设备,所以它也是采用虚拟机或模拟器的类似方案,使用unix域套接字替代qemu管道,但由于这样gles命令进行传输和翻译,也存在一定的性能损失,尤其对于大型手机游戏来说,性能损失更加明显,甚至导致部分应用运行崩溃,渲染错乱等严重问题。

中国发明专利“一种多窗口显示应用程序的方法及终端”(申请号cn201110406432.9),该申请没有涉及到专业上的技术实施,更多的是描述方法,更准确的说,是研究了一种多窗口显示应用程序的策略;本申请提供一种android应用程序运行在linux系统上的技术,并且以多窗口的形式来呈现出来,多窗口技术方案的研究才是本申请要点,所以上述申请与本申请无关。

中国发明专利“移动终端及用于移动终端的多窗口显示方法”(申请号cn201210087092.2),该申请涉及通信技术领域,发明了一种在移动终端上多窗口显示的方法,移动终端上多任务窗口部分地覆盖主任务窗口。虽然都涉及多窗口显示,但是上述申请主要是方法描述,而本申请注重于技术方案的实施说明;并且本申请是在linux(pc)系统上运行android应用程序,对于运行系统的限制与上述申请还是有本质的区别。



技术实现要素:

为解决上述问题,本发明提供了一种应用于linux上android多窗口显示方法,所述方法包括步骤:

编写android应用启动多窗口管理服务程序;

修改android图形显示方案;

linux系统执行图形显示程序。

优选地,所述编写android应用启动多窗口管理服务程序包括步骤:

选择支持模拟辅助显示方案的android平台进行系统定制;

编写android管理服务应用;

对android框架层overlaydisplay的参数设置;

管理overlaydisplay的生命周期;

通过socket建立linux与android容器之间的通信。

优选地,所述修改android图形显示方案包括步骤:

linux主机映射显示设备节点到android容器中;

将linux操作系统的图形库对接到android环境中;

surfacefinger服务通过gralloc模块管理显存的分配和释放;

android通过socket通信将数据传输给linux主机。

优选地,所述linux系统执行图形显示程序包括步骤:

启动linux服务程序以及显示窗口程序;

接收android显示数据;

linux绘制图形窗口;

使用opengles接口将数据显示在图形窗口上。

本申请的有益效果是:解决linux操作系统软件应用匮乏的问题,发挥android丰富的应用生态优势,相较于传统的android模拟器,本发明的多窗口显示能够让android应用像一个linux应用一样在linux系统上流畅运行,并且减少了性能的损失;研发人员甚至可以定制属于自己的linux窗口管理程序和android系统来满足用户特殊的需求。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明提供的一种应用于linux上android多窗口显示方法中linux上android显示方案的框架图;

图2是本发明一种应用于linux上android多窗口显示方法中多窗口显示方案的核心框架图;

图3是本发明一种应用于linux上android多窗口显示方法中android应用多窗虚拟展示图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。

如图1-3,在本申请实施例中,本发明提供了一种应用于linux上android多窗口显示方法,所述方法包括步骤:

编写android应用启动多窗口管理服务程序;

修改android图形显示方案;

linux系统执行图形显示程序。

在本申请实施例中,所述编写android应用启动多窗口管理服务程序包括步骤:

选择支持模拟辅助显示方案的android平台进行系统定制;

编写android管理服务应用;

对android框架层overlaydisplay的参数设置;

管理overlaydisplay的生命周期;

通过socket建立linux与android容器之间的通信。

在本申请实施例中,所述修改android图形显示方案包括步骤:

linux主机映射显示设备节点到android容器中;

将linux操作系统的图形库对接到android环境中;

surfacefinger服务通过gralloc模块管理显存的分配和释放;

android通过socket通信将数据传输给linux主机。

在本申请实施例中,所述linux系统执行图形显示程序包括步骤:

启动linux服务程序以及显示窗口程序;

接收android显示数据;

linux绘制图形窗口;

使用opengles接口将数据显示在图形窗口上。

图1是整个显示方案的框架图,android运行在容器内的方案如上述步骤所述,映射显示设备的节点至android容器,再由surfaceflinger服务进行窗口管理,通过opengles对图像数据进行渲染与合成,linux内核申请空间存放处理后图像数据。虚线左边为linux主机端,由android容器中显示控制程序向linux服务程序进行ipc通信,再由其控制转发显示信息,linux端的显示窗口程序根据显示信息进行android图像数据显示。

图2是本发明的核心框架图,它清晰描述了整个图形显示框架实现多窗口功能的原理,更深层次的对图1的一些细节进行描述。对容器内的android系统编写android应用启动多窗口管理服务程序,选择支持模拟辅助显示的android版本,以服务类应用来管理整个android系统各overlaydisplay的生命周期,linux服务程序与此服务类应用建立ipc通信,间接的达到管理android容器内overlaydisplay的目的;在android系统每创建一个overlaydisplay时,surfaceflinger服务将opengles渲染与合成之后的图像数据送到hal(硬件抽象层)中的gralloc。gralloc访问linux内核空间,负责linux内核空间的申请与释放,申请时返回其地址,并由渲染程序完成图像的渲染。surfaceflinger将调用显示控制程序,将上一步返回的地址、应用的包名、显示长宽以及显示方向等数据通过建立ipc通信的方式传输到linux端服务程序。

linux端的服务程序接收到android容器发送的显示数据,再转发至显示窗口程序,由显示窗口程序解析和显示数据,设置窗口长宽、方向等配置,解析获取地址得到显存中存放overlaydisplay的图像数据,用opengles将图像绘制在窗口上。

图3是本发明的虚拟展示图,按照图1和图2的流程完成本发明的技术方案,linux主机端将可以显示多个android应用窗口,其中窗口的宽、高、像素密度以及旋转方向是在启动时初始化时,也能实时的去改变。

具体实现方式如下:

(1)编写android应用启动多窗口管理服务程序:

静态注册开机广播,来开启此应用的多窗口后台管理服务类,jni(javanativeinterface)来建立localserversocket(服务端unix域套接字)监听处理,等待linux端建立连接,实现通信消息解析功能,调用android框架层的overlaydisplay的接口,创建、销毁overlaydisplay以及设置其参数等。

(2)android图形显示方案修改:

surfaceflinger调用opengles接口处理步骤(1)中创建出来的显示屏图像数据,进行渲染与合成。不改变原生的图形显示方案,将渲染之后的数据通过gralloc.drm.so这个库,与linux内核交互申请显存,显示控制程序封装图形窗口配置数据,通过socket通信,将数据发送至linux主机端。

(3)linux图形显示程序:

编写linux图形显示程序,解封装步骤(2)传输数据,以显示屏id和应用包名进行窗口管理,获取linux内核图像数据,opengles渲染图像至窗口。

本申请的有益效果是:解决linux操作系统软件应用匮乏的问题,发挥android丰富的应用生态优势,相较于传统的android模拟器,本发明的多窗口显示能够让android应用像一个linux应用一样在linux系统上流畅运行,并且减少了性能的损失;研发人员甚至可以定制属于自己的linux窗口管理程序和android系统来满足用户特殊的需求。

应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1