掌桥专利:专业的专利平台
掌桥专利
首页

一种安卓容器实现的方法、系统及设备

文献发布时间:2023-06-19 11:49:09


一种安卓容器实现的方法、系统及设备

技术领域

本申请涉及计算机领域,尤其涉及一种安卓容器实现的方法、系统及设备。

背景技术

虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。虚拟化技术分为全虚拟化、半虚拟化、操作系统层虚拟化、桌面虚拟化和硬件虚拟化。

容器是一种全新意义上的虚拟化技术,由操作系统提供虚拟化的支持,操作系统提供接口,能够让应用程序间可以互不干扰的独立运行,并且能够对其在运行中所使用的资源进行管理。由于应用程序的运行被隔离在了一个独立的运行环境之中,这个独立的运行环境就像一个容器。传统容器为Linux软件容器(Linux Containers,Lxc),它是一种轻量级的操作系统层虚拟化技术,与全虚拟化和半虚拟化所构建的虚拟机都有各自独立的操作系统不同,通过Lxc构建的容器共享同一个内核,即所有的容器运行在同一个操作系统之上。目前使用的Anbox容器,是基于Lxc容器技术在GNU/Linux系统上运行整个Android系统的一种实现方案。它需要在主机系统加入android的binder和ashmem驱动,通过anbox创建Lxc实例加载特定的android文件系统,实现在主机系统上运行android的环境。而Anbox容器需要通过QEMU PIPE方式去和Linux主机上某个进程交互,进程间数据传输的开销较大,影响容器系统性能。

发明内容

本申请的一个目的是提供一种安卓容器实现的方法、系统及设备,解决现有技术中操作系统容器进程间数据传输开销较大,容器系统性能低的问题。

根据本申请的一个方面,提供了一种安卓容器实现的方法,该方法包括:

基于获取的绘制图像请求将图像进行渲染,得到待合成的图层;

将所述待合成的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,得到合成后的图层;

收集所述安卓容器的请求,基于所述安卓容器的请求申请显示面,将合成后的图层显示在所述显示面上。

进一步地,基于获取的绘制图像请求将图像进行渲染,得到待合成的图层,包括:

基于安卓容器的应用程序的绘制图像请求,创建用于显示图像的窗口及图形面;

将所述图形面引用至所述应用程序,以使所述应用程序将图像渲染至所述图形面上,得到待合成的图层,其中,所述待合成的图层为应用程序的图层。

进一步地,所述图形面用于保存图像数据,并与从主机操作系统的内核中申请得到的图形缓冲区绑定。

进一步地,将所述待合成的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,包括:

按照指定的合成方式将所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,其中,所述指定的合成方式包括以下任一种:

通过调用图形程序接口使用GPU对所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成;

通过屏幕驱动overlay方式对所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成。

进一步地,按照指定的合成方式将所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,包括:

确定所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层中各层的指定合成方式,对确定完指定合成方式的层进行GPU处理标记;

调用所述图形程序接口将标记GPU处理的层进行合成,得到GPU合成后的层;

将所述GPU合成后的层与由显示服务器硬件合成模块所合成的层在所述服务器硬件合成模块中进行合成并显示。

进一步地,基于所述安卓容器的请求申请显示面,基于所述安卓容器的请求申请显示面,将所述合成后的图层显示在所述显示面上,包括:

将在所述显示服务器硬件合成模块中合成后的图层传送至显示排序模块上,通过所述显示排序模块收集所述安卓容器的请求并将所述请求连接至显示设备上;

为所述请求申请在所述显示设备上的一块显示面,将合成后的图层显示在所述显示面上。

根据本申请又一个方面,还提供了一种安卓容器实现的系统,该系统包括:

安卓容器、显示服务器及显示设备;

所述安卓容器用于基于获取的绘制图像请求将图像进行渲染,得到待合成的图层,并将所述待合成的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,得到合成后的图层;

所述显示服务器用于收集所述安卓容器的请求,基于所述安卓容器的请求申请显示面,将所述合成后的图层显示在所述显示设备上。

进一步地,所述安卓容器包括:应用程序、窗口管理模块及图形面显示模块;

所述应用程序用于基于获取的绘制图像请求创建用于显示图像的窗口并将所述窗口注册至所述窗口管理模块;

所述窗口管理模块用于通知所述图形面显示模块进行创建图形面,并将所述图形面引用至所述应用程序,以使所述应用程序将图像渲染至所述图形面上,得到应用程序的图层。

进一步地,所述安卓容器包括:显示服务器硬件合成模块,用于将所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,得到合成后的图层。

进一步地,所述显示服务器包括:显示排序模块,用于收集所述安卓容器的请求,基于所述安卓容器的请求申请显示面,将所述合成后的图层显示在所述显示面上。

根据本申请再一个方面,还提供了一种安卓容器实现的设备,该设备包括:

一个或多个处理器;以及

存储有计算机可读指令的存储器,所述计算机可读指令在被执行时使所述处理器执行如前述所述方法的操作。

根据本申请另一个方面,还提供了一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现如前述所述的方法。

与现有技术相比,本申请通过基于获取的绘制图像请求将图像进行渲染,得到待合成的图层;将所述待合成的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,得到合成后的图层;收集所述安卓容器的请求,基于所述安卓容器的请求申请显示面,将合成后的图层显示在所述显示面上。可以使得安卓容器直接将渲染指令和数据发送到主机操作系统的图形硬件进行渲染,省去了进程间数据传输的开销,从而达到优化安卓容器系统性能的目的。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出根据本申请一个方面提供的一种安卓容器实现的系统的结构示意图;

图2示出本申请一实施例中安卓容器实现的应用场景的框架示意图;

图3示出本申请一实施例中安卓容器实现的模块结构示意图;

图4示出根据本申请的又一个方面提供的一种安卓容器实现的方法的流程示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(例如中央处理器(Central Processing Unit,CPU))、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RandomAccess Memory,RAM)和/或非易失性内存等形式,如只读存储器(Read Only Memory,ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(Phase-Change RAM,PRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、数字多功能光盘(Digital Versatile Disk,DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

图1示出根据本申请一个方面提供的一种安卓容器实现的系统的结构示意图,该系统包括:安卓容器100、显示服务器200及显示设备300;所述安卓容器100用于基于获取的绘制图像请求将图像进行渲染,得到待合成的图层,并将所述待合成的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,得到合成后的图层;所述显示服务器200用于收集所述安卓容器的请求,基于所述安卓容器的请求申请显示面,将所述合成后的图层显示在所述显示设备300上。在此,安卓容器100中运行着安卓(Andriod)系统,该安卓系统通过主机系统上的容器管理工具systemd-nspawn启动或者停止。显示服务器200优选为Wayland,在主机操作系统上,Android容器通过Wayland和主机系统的图形硬件进行交互。显示设备300可为带有显示屏幕的终端设备。当安卓容器中有绘制图像请求时,进行图像的渲染得到对应的待合成的图层,该待合成的图层为绘制图像请求对应的图层,比如某一应用程序有绘制图像的请求,则该待合成的图层为该应用程序的图层。从而将得到的待合成的图层与安卓系统负责渲染的状态栏层(statusbar layer)、导航栏图层(menubar layer)进行合成,从而得到合成后的图层;接着,主机操作系统上的显示服务器200收集安卓容器的请求,将该请求连接到显示设备(Wayland display)上,申请一块显示面,从而将合成后的图层显示在显示面上,最终在显示设备上显示出来。从而不需要再通过QEMU PIPE方式与Linux主机上某个进程进行交互,而是Andriod容器直接将图形渲染指令和数据发送到主机操作系统的图形硬件进行渲染,省去了进程间数据传输的开销,从而达到优化Andriod容器系统性能的目的。

图2所示为本申请一实施例中安卓容器实现的应用场景的框架示意图,包括Android系统、Wayland、PulseAudio和Linux kernel,其中,Android容器和Linux主机操作系统共享一个内核,PulseAudio在主机操作系统上,为一个跨平台的、可通过网络工作的声音服务,Andriod容器通过它和主机系统的音频硬件进行交互。需要说明的是,Wayland是一套display server与client间的通信协议,在架构上使用时,可以将Wayland compositor作为display server,使client与Wayland compositor直接通信。Wayland既可以用于传统的桌面又适用于移动设备,同时越来越多的窗口和图形系统开始兼容Wayland协议。Wayland基于domain socket实现了一套display server与client间通信的库,并且以XML形式定义了一套可扩展通信协议。这个协议分为Wayland核心协议和扩展协议。

图3所示为本申请一实施例中安卓容器实现的模块结构示意图,其中,所述安卓容器包括:应用程序、窗口管理模块及图形面显示模块;所述应用程序用于基于获取的绘制图像请求创建用于显示图像的窗口并将所述窗口注册至所述窗口管理模块;所述窗口管理模块用于通知所述图形面显示模块进行创建图形面,并将所述图形面引用至所述应用程序,以使所述应用程序将图像渲染至所述图形面上,得到应用程序的图层。在此,当Android容器的应用程序(APP)有绘制图像需求时,APP首先会启动一个应用组件(Activity),该应用组件负责创建用于显示的窗口(Window),并将Window注册到窗口管理模块(WindowManager),Window用于确定绘制图像的大小、位置等信息,后续的图像绘制都在该窗口进行。WindowManager通知图形合成板(SurfaceFlinger)创建一个图像面(Surface)用于图像数据的保存,将该Surface的引用返回给APP,从而APP调用OpenGL ES指令将图像渲染到这块Surface上。SurfaceFlinger创建一块用于图像数据保存的Surface,这块Surface会绑定一块图形缓冲区(graphic buffer),对于这块图形缓冲区的分配是通过Gralloc模块的gbm_mod_alloc_gpu0函数实现的。该块图形缓冲区直接从主机操作系统的内核中申请。

需要说明的是,Android设备的显示屏被抽象为一个帧缓冲区,而Android系统中的SurfaceFlinger服务通过向这个帧缓冲区写入内容来绘制应用程序的用户界面的。Android系统在硬件抽象层中提供了一个Gralloc模块,封装了对帧缓冲区的所有访问操作。用户空间的应用程序在使用帧缓冲区之前,首先要加载Gralloc模块,获得一个帧缓冲区设备,图形缓冲区的分配和释放和图形缓冲区渲染到帧缓冲区工作都是通过这个帧缓冲区设备去完成的。

继续参考图3,所述安卓容器包括:显示服务器硬件合成模块,用于将所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,得到合成后的图层。在此,当APP渲染完成后,SurfaceFlinger会将应用所渲染的Surface Layer和由系统负责渲染的状态栏层(statusbar layer)、导航栏图层(menubar layer)一起提交到显示服务器硬件合成模块(Wayland Hardware Composer,WHWC),由WHWC模块决定用什么的形式进行合成,进行合成时有两种合成方式,一种为通过调用OpenGL ES使用GPU进行合成,另一种是通过屏幕驱动通过overlay的方式进行合成。得到WHWC对各层layer(图层)的合成方式进行标记后,SurfaceFlinger调用OpenGL ES把标记GPU处理的layer进行合成,随后SurfaceFlinger将由GPU合成后的layer和由需要WHWC模块合成的layer一起交给WHWC模块完成剩余的合成和显示工作。具体地,SurfaceFlinger向WHWC提供所有layer的完整列表,让WHWC根据其硬件能力决定如何处理列表中的layer;WHWC为每个layer标注合成方式,是通过GPU还是通过WHWC合成,SurfaceFlinger负责先把所有注明GPU合成的layer通过OpenGL ES合成到一个输出缓冲区(Buffer),之后把输出Buffer和其他由WHWC合成的layer一起交给WHWC,让WHWC完成剩余layer的合成和显示。

继续参考图3,所述显示服务器包括:显示排序模块,用于收集所述安卓容器的请求,基于所述安卓容器的请求申请显示面,将所述合成后的图层显示在所述显示面上。在此,安卓容器作为Wayland client,由WHWC模块合成完成后,会传给显示排序模块(Waylandcompositor),Wayland compositor收集Wayland client的请求,会将其连接到Waylanddisplay,并申请一块Wayland surface,接着将Wayland client合成后图层一起输出到这块Wayland surface上,最终在显示设备上显示出来。

通过上述安卓容器实现的系统,可以使安卓容器直接访问到主机系统的硬件设备,达到优化安卓容器系统性能的目的。

图4示出根据本申请的又一个方面提供的一种安卓容器实现的方法的流程示意图,该方法包括:步骤S11~步骤S13,

在步骤S11中,基于获取的绘制图像请求将图像进行渲染,得到待合成的图层;在此,获取绘制图像请求,根据该请求对图像进行渲染,从而得到待合成的图层,该待合成的图层为绘制图像请求对应的图层,比如某一应用程序有绘制图像的请求,则该待合成的图层为该应用程序的图层。接着,在步骤S12中,将所述待合成的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,得到合成后的图层;在此,将得到的待合成的图层与安卓系统负责渲染的状态栏层(statusbar layer)、导航栏图层(menubar layer)进行合成,从而得到合成后的图层。随后,在步骤S13中,收集所述安卓容器的请求,基于所述安卓容器的请求申请显示面,将合成后的图层显示在所述显示面上。在此,收集安卓容器的请求,将该请求连接到显示设备(Wayland display)上,申请一块显示面,从而将合成后的图层显示在显示面上,最终在显示设备上显示出来。从而不需要再通过QEMU PIPE方式与Linux主机上某个进程进行交互,而是Andriod容器直接将图形渲染指令和数据发送到主机操作系统的图形硬件进行渲染,省去了进程间数据传输的开销,从而达到优化Andriod容器系统性能的目的。

具体地,在步骤S11中,基于安卓容器的应用程序的绘制图像请求,创建用于显示图像的窗口及图形面;将所述图形面引用至所述应用程序,以使所述应用程序将图像渲染至所述图形面上,得到待合成的图层,其中,所述待合成的图层为应用程序的图层。在此,当Android容器的应用程序(APP)有绘制图像需求时,APP首先会启动一个应用组件(Activity),该应用组件负责创建用于显示的窗口(Window),并将Window注册到窗口管理模块(WindowManager),Window用于确定绘制图像的大小、位置等信息,后续的图像绘制都在该窗口进行。WindowManager通知图形合成板(SurfaceFlinger)创建一个图像面(Surface)用于图像数据的保存,将该Surface的引用返回给APP,从而APP调用OpenGL ES指令将图像渲染到这块Surface上,得到应用程序的图层。

其中,所述图形面用于保存图像数据,并与从主机操作系统的内核中申请得到的图形缓冲区绑定。在此,SurfaceFlinger创建一块用于图像数据保存的Surface,这块Surface会绑定一块图形缓冲区(graphic buffer),对于这块图形缓冲区的分配是通过Gralloc模块的gbm_mod_alloc_gpu0函数实现的。该块图形缓冲区直接从主机操作系统的内核中申请。

在本申请一实施例中,在步骤S12中,按照指定的合成方式将所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,其中,所述指定的合成方式包括以下任一种:通过调用图形程序接口使用GPU对所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成;通过屏幕驱动overlay方式对所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成。在此,进行合成时,指定的合成方式包括两种,一种为通过调用OpenGL ES使用GPU进行合成,另一种是通过屏幕驱动通过overlay的方式进行合成。

接上述实施例,可以确定所述应用程序的图层和由安卓系统负责渲染的状态栏层、导航栏图层中各层的指定合成方式,对确定完指定合成方式的层进行GPU处理标记;调用所述图形程序接口将标记GPU处理的层进行合成,得到GPU合成后的层;将所述GPU合成后的层与由显示服务器硬件合成模块所合成的层在所述服务器硬件合成模块中进行合成并显示。在此,得到显示服务器硬件合成模块(WHWC)对各层layer(图层)的合成方式进行标记后,SurfaceFlinger调用OpenGL ES把标记GPU处理的layer进行合成,随后SurfaceFlinger将由GPU合成后的layer和由需要WHWC模块合成的layer一起交给WHWC模块完成剩余的合成和显示工作。具体地,SurfaceFlinger向WHWC提供所有layer的完整列表,让WHWC根据其硬件能力决定如何处理列表中的layer;WHWC为每个layer标注合成方式,是通过GPU还是通过WHWC合成,SurfaceFlinger负责先把所有注明GPU合成的layer通过OpenGL ES合成到一个输出缓冲区(Buffer),之后把输出Buffer和其他由WHWC合成的layer一起交给WHWC,让WHWC完成剩余layer的合成和显示。

在本申请一实施例中,在步骤S13中,将在所述显示服务器硬件合成模块中合成后的图层传送至显示排序模块上,通过所述显示排序模块收集所述安卓容器的请求并将所述请求连接至显示设备上;为所述请求申请在所述显示设备上的一块显示面,将合成后的图层显示在所述显示面上。在此,安卓容器作为Wayland client,由WHWC模块合成完成后,会传给显示排序模块(Wayland compositor),Wayland compositor收集Wayland client的请求,会将其连接到Wayland display,并申请一块Wayland surface,接着将Wayland client合成后图层一起输出到这块Wayland surface上,最终在显示设备上显示出来。

通过本申请所述的安卓容器的实现方法,可以使得安卓容器直接将渲染指令和数据发送到主机操作系统的图形硬件进行渲染,省去了进程间数据传输的开销,从而达到优化安卓容器系统性能的目的。

此外,本申请实施例还提供了一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现前述一种安卓容器实现的方法。

与上文所述的方法相对应的,本申请还提供一种终端,其包括能够执行上述图4或各个实施例所述的方法步骤的模块或单元,这些模块或单元可以通过硬件、软件或软硬结合的方式来实现,本申请并不限定。例如,在本申请一实施例中,还提供了一种安卓容器实现的设备,所述设备包括:

一个或多个处理器;以及

存储有计算机可读指令的存储器,所述计算机可读指令在被执行时使所述处理器执行如前述所述方法的操作。

例如,计算机可读指令在被执行时使所述一个或多个处理器:

基于获取的绘制图像请求将图像进行渲染,得到待合成的图层;

将所述待合成的图层和由安卓系统负责渲染的状态栏层、导航栏图层进行合成,得到合成后的图层;

收集所述安卓容器的请求,基于所述安卓容器的请求申请显示面,将合成后的图层显示在所述显示面上。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

相关技术
  • 基于安卓双容器系统的设备策略管理系统及管理域实现方法
  • 一种安卓容器实现的方法、系统及设备
技术分类

06120113066995