CN116627579B - 一种在Linux上缩放安卓应用窗口的方法及装置 - Google Patents
一种在Linux上缩放安卓应用窗口的方法及装置 Download PDFInfo
- Publication number
- CN116627579B CN116627579B CN202310905316.4A CN202310905316A CN116627579B CN 116627579 B CN116627579 B CN 116627579B CN 202310905316 A CN202310905316 A CN 202310905316A CN 116627579 B CN116627579 B CN 116627579B
- Authority
- CN
- China
- Prior art keywords
- android
- window
- linux
- application
- virtual screen
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 50
- 238000009877 rendering Methods 0.000 claims abstract description 27
- 238000005520 cutting process Methods 0.000 claims abstract description 7
- 230000002194 synthesizing effect Effects 0.000 claims abstract description 4
- 238000004891 communication Methods 0.000 claims description 30
- 230000008569 process Effects 0.000 claims description 22
- 230000015572 biosynthetic process Effects 0.000 claims description 11
- 238000003786 synthesis reaction Methods 0.000 claims description 11
- 230000008859 change Effects 0.000 claims description 8
- 230000006870 function Effects 0.000 claims description 4
- 230000003993 interaction Effects 0.000 claims description 3
- 230000002159 abnormal effect Effects 0.000 description 5
- 230000007547 defect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
- G06F9/452—Remote windowing, e.g. X-Window System, desktop virtualisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0484—Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0484—Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
- G06F3/04845—Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range for image manipulation, e.g. dragging, rotation, expansion or change of colour
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明提供一种在Linux上缩放安卓应用窗口的方法和装置,发送启动安卓应用请求时将参数发送至安卓侧;为应用创建一个与显示器尺寸相同虚拟屏,根据显示窗口尺寸大小设定应用的Bound值,Bound值以虚拟屏左上角为原点,以Freeform模式启动应用到虚拟屏上,在虚拟屏左上角按照Bound值显示安卓图像,将返回的数据发送至Linux侧;创建图形显示窗口,对虚拟屏画面进行裁剪、合成和送显;将捕获到的窗口尺寸发送至安卓侧;更新应用栈边界Bound值,Bound值以虚拟屏左上角为原点,根据Bound信息进行图像渲染,完成渲染后将返回的数据发送至Linux侧;Linux侧解析显存地址,使用缩放后的窗口大小对虚拟屏上的图像从左上角开始重新进行裁剪,合成最新的图像画面后绘制显示。
Description
技术领域
本发明涉及在Linux系统上兼容安卓应用,尤其涉及一种在Linux上缩放安卓应用窗口的方法及装置。
背景技术
为满足用户实际使用需要,桌面操作系统上的原生应用软件通常支持软件窗口自由缩放,而手机上的安卓应用一般以固定的屏幕尺寸大小显示。从桌面操作系统兼容安卓应用生态的角度来看,不仅是为了在桌面操作系统上运行安卓应用,也要保证具备良好的用户体验,提供接近桌面用户的操作习惯。为此,在Linux兼容安卓应用的环境上,需要满足用户对于安卓应用窗口能够自由缩放的需求。Android N平台开始引入多窗口功能,支持分屏模式、画中画模式和自由窗口Freeform模式三种模式,用户可以同时打开和看到多个安卓应用的界面,其中的自由窗口Freeform模式可以实现窗口的自由拖动和修改大小。现有Linux上安卓兼容方案对窗口的缩放支持有以下三种情况:不支持缩放、支持等比例缩放、支持横/纵向和对角自由缩放,其中支持横/纵向和对角自由缩放的方式是基于Freeform的多窗口模式实现,但是自由窗口Freeform模式尚不成熟,存在较多问题,容易导致窗口缩放时出现画面显示异常问题,降低用户体验感。
中国发明专利“一种安卓运行环境内安卓应用窗口的缩放优化方法”(专利号:CN113986446A)。该专利公开了一种安卓运行环境内安卓应用窗口的缩放优化方法,能够在自由缩放安卓应用窗口时使安卓应用窗口与Linux应用窗口大小同步改变。该发明可以提升用户体验,但该专利应用的xDroid使用的安卓应用多窗口显示方案基于自由窗口Freeform,仍无法解决窗口缩放过程中出现的显示异常问题。
中国发明专利“窗口缩放方法、装置、终端及计算机可读存储介质”(专利号:CN109254821A)。该专利公开了窗口缩放方法、装置、终端及计算机可读存储介质,根据监测到的缩放触发事件对自由窗口Freeform进行缩放处理,实现自动调整显示窗口的大小,满足用户对窗口显示大小的缩放需求,提高了自由窗口Freeform显示的灵活性,但该专利不是应用在桌面操作系统兼容安卓系统的环境中,仍然没有解决由于Freeform模式自身不成熟带来的缩放过程中出现的显示异常问题。
发明内容
针对上述问题,本发明提供一种在Linux上缩放安卓应用窗口的方法及装置,应用在Linux兼容Android系统的运行环境下,安卓应用基于虚拟屏多窗口,结合Freeform模式启动应用的方式,实现多窗口安卓应用窗口尺寸实时跟随Linux窗口尺寸变化进行调整。
为实现上述目的,本发明公开了一种在Linux上缩放安卓应用窗口的方法,包括以下步骤:
步骤S1、安卓以容器方式运行在Linux中,Linux和安卓之间通过IPC通信模块进行数据交互,Linux发送启动安卓应用请求时将应用包名、显示器分辨率、显示的窗口尺寸通过IPC通信模块发送至安卓侧;
步骤S2、安卓侧接收到应用启动请求后,根据Linux侧发送过来的上述参数,为应用创建一个与显示器分辨率尺寸大小一样的虚拟屏,根据显示窗口尺寸大小设定应用的栈边界Bound值,Bound值以虚拟屏左上角为原点,以Freeform模式启动应用到虚拟屏上,通过图形渲染模块在虚拟屏左上角按照Bound值显示对应大小的安卓图像,SurfaceFlinger调用显示控制程序将返回的显存句柄、虚拟屏ID、显示画面宽高通过IPC通信模块发送至Linux侧;
步骤S3、Linux侧在安卓应用启动成功后,创建对应的图形显示窗口,通过图形合成模块按照设定的窗口尺寸对虚拟屏画面进行裁剪、合成和送显;
步骤S4、对Linux侧的图形显示窗口执行缩放操作,在鼠标释放、触摸缩放结束或窗口尺寸动态调整过程中,将捕获到的当前窗口尺寸通过IPC通信模块发送至安卓侧;
步骤S5、安卓侧接收到尺寸调整信息后,由应用管理模块更新应用栈边界Bound值,Bound值以虚拟屏左上角为原点,图形渲染模块根据该栈边界Bound信息进行图像渲染,完成渲染后由SurfaceFlinger调用显示控制程序将返回的显存句柄、虚拟屏ID、显示画面宽高通过通信模块发送至Linux侧;
步骤S6、Linux侧的图形合成模块解析显存地址,使用缩放后的窗口大小对虚拟屏上的图像从左上角开始重新进行裁剪,合成最新的图像画面后绘制显示,实现安卓图像的动态调整。
进一步的,所述步骤S2的具体实现步骤为:
步骤S21:解析虚拟屏尺寸和窗口尺寸;
步骤S22:虚拟屏管理模块根据显示器分辨率尺寸大小创建一个相同大小的虚拟屏,并生成一个唯一的虚拟屏ID;
步骤S23:应用启动管理模块AppManager设定应用启动模式为Freeform模式,同时设定栈边界Bound值,根据唯一的虚拟屏ID将该应用启动到虚拟屏上;
步骤S24:Zygote进程创建新的安卓应用进程,应用的显示区域大小为设定的栈边界Bound值大小;
步骤S25:SurfaceFlinger进程从硬件抽象层HAL中的Gralloc中申请分辨率尺寸大小的显存空间后返回其地址,并由图形渲染模块根据窗口尺寸大小将图像渲染到虚拟屏的左上角,完成图像的渲染;
步骤S26:SurfaceFlinger进程调用显示控制程序,将Gralloc申请的显存地址、唯一ID号、应用包名、窗口长宽通过IPC通信模块发送至Linux侧。
进一步的,所述步骤S3的具体实现步骤为:
步骤S31:Linux侧接收到安卓应用启动成功的信号后,根据返回的唯一ID号、包名和窗口长宽创建一个指定尺寸的图形窗口,Linux图形窗口将虚拟屏的唯一ID号与安卓内的虚拟屏一一对应;
步骤S32:Linux侧图形窗口根据返回的显存地址,解析地址并得到显存中存放的虚拟屏窗口图像数据,使用OpenGL ES接口对图像数据按实际窗口大小进行裁剪、合成和显示。
进一步的,所述步骤S4的具体实现步骤为:
步骤S41:图形窗口程序通过设置事件监听器,监听窗口尺寸的变化;
步骤S42:使用鼠标或触摸操作对Linux侧的安卓应用图形窗口进行横向、纵向或对角方式进行窗口的自由缩放;
步骤S43:窗口程序监听鼠标释放事件、触摸缩放结束事件和尺寸动态变化数据,将当前窗口尺寸大小通过IPC通信模块发送至安卓侧,请求更新安卓图像大小。
进一步的,所述步骤S5的具体实现步骤为:
步骤S51:安卓侧应用管理模块AppManager解析由Linux侧发送过来的窗口尺寸;
步骤S52:AppManager根据更新的窗口尺寸通过ATMS中resizeTask函数更新窗口栈边界Bound值;
步骤S53:安卓侧SurfaceFlinger进程根据新的栈边界Bound值大小对显示图像大小进行调整,并渲染到虚拟屏的左上角;
步骤S54:SurfaceFlinger进程调用显示控制程序,将Gralloc申请的显存地址、唯一ID号、应用包名、窗口长宽通过IPC通信模块发送至Linux侧,让Linux图形窗口进行图像显示的更新处理。
进一步的,所述步骤S6的具体实现步骤为:
步骤S61:Linux侧接收到安卓应用图形尺寸调整完成的信号后,根据返回的唯一ID号、包名找到对应的Linux侧图形窗口;
步骤S62:Linux侧图形窗口根据安卓返回的显存地址,解析地址并得到显存中存放的虚拟屏窗口图像数据,使用OpenGL ES对图像数据按实际窗口大小进行裁剪、合成和显示,完成安卓图形自由缩放操作。
一种在Linux上缩放安卓应用窗口的装置,包括:
虚拟屏管理模块,用于启动应用时虚拟屏的创建和关闭应用时虚拟屏的销毁;
IPC通信模块,用于所述Linux侧和安卓侧之间的实时消息通信通道;
图形渲染模块,应用于安卓侧,若安卓侧支持直接访问GPU硬件,则安卓侧根据获取的图形绘制请求去使用OpenGL ES调用GPU生成图像数据;若安卓侧不支持直接访问GPU硬件,则安卓侧将获取的图形绘制请求发送给Linux侧,由Linux侧完成图像渲染并返回图像显存信息;
图形合成模块:应用于Linux侧,该模块接收到安卓侧发送的显存数据信息后,解析得到显存地址,再通过OpenGL ES将显存数据进行裁剪,得到指定大小的显示画面;
界面显示模块,应用于Linux侧,通过调用图形合成模块,实现安卓图形显示到Linux图形窗口上。
本发明的一种在Linux上缩放安卓应用窗口的方法及装置的有益效果为:通过虚拟屏和Freeform模式结合的方式,实现了在Linux兼容安卓环境下对安卓应用多窗口化界面的自由缩放,并动态保持安卓应用画面的清晰度和UI布局的协调性,弥补等比例缩放存在的画面模糊、操作体验弱等不足,解决了一些安卓兼容产品使用安卓Freeform模式实现多窗口和自由缩放方案而出现的显示异常问题,充分彰显产品灵活性,满足Linux用户个性化需求,让安卓应用实现真正桌面化操作,为用户提供了更好的操作体验和视觉体验。
附图说明
下面结合附图和具体实施方式对本发明作进一步详细的说明。
图1是本发明在Linux上缩放安卓应用窗口的流程图。
图2是本发明的安卓应用动态调整尺寸在安卓侧的流程图。
图3是本发明的安卓应用动态调整尺寸在Linux侧进行图像合成和显示的流程图。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
本发明提供了一种在Linux上缩放安卓应用窗口的方法和装置。安卓在 HardwareComposer v1.3中添加了对虚拟显示屏的平台支持,可支持多个虚拟屏(OverlayDisplay/VirtualDisplay),本发明基于将不同的安卓应用启动到不同的虚拟屏以及将输入重定向到不同的虚拟屏的成果,让应用以Freeform模式启动到虚拟屏上,通过调整Linux上图形窗口的大小,同步改变对应安卓应用虚拟屏的窗口大小,以一定的规则对图像进行裁剪,实现对兼容环境下安卓应用窗口的自由缩放,并动态保持安卓应用画面的清晰度和UI布局的协调性,增强Linux应用和安卓应用在图形显示上的融合统一,达到接近桌面操作系统用户的操作习惯的目标。本发明中所述Linux泛指各个Linux发行版,所述Android泛指AndroidOS、AOSP和各种基于AOSP的衍生系统。
如图1所示,为本发明在Linux上缩放安卓应用窗口的流程图,具体的,包括以下步骤:
步骤S1、安卓以容器方式运行在Linux中,Linux和安卓之间通过IPC通信模块进行数据交互,Linux发送启动安卓应用请求时将应用包名、显示器分辨率、显示的窗口尺寸通过IPC通信模块发送至安卓侧;
步骤S2、安卓侧接收到应用启动请求后,根据Linux侧发送过来的上述参数,为应用创建一个与显示器分辨率尺寸大小一样的虚拟屏,根据显示窗口尺寸大小设定应用的栈边界Bound值,Bound值以虚拟屏左上角为原点,以Freeform模式启动应用到虚拟屏上,通过图形渲染模块在虚拟屏左上角按照Bound值显示对应大小的安卓图像,SurfaceFlinger调用显示控制程序将返回的显存句柄、虚拟屏ID、显示画面宽高通过IPC通信模块发送至Linux侧;
步骤S21:解析虚拟屏尺寸和窗口尺寸;
步骤S22:虚拟屏管理模块根据显示器分辨率尺寸大小创建一个相同大小的虚拟屏,并生成一个唯一的虚拟屏ID;
步骤S23:应用管理模块AppManager设定应用启动模式为Freeform模式,同时设定栈边界Bound值,根据唯一的虚拟屏ID将该应用启动到虚拟屏上;
步骤S24:Zygote进程创建新的安卓应用进程,应用的显示区域大小为设定的栈边界Bound值大小;
步骤S25:SurfaceFlinger进程从硬件抽象层HAL中的Gralloc中申请分辨率尺寸大小的显存空间后返回其地址,并由图形渲染模块根据窗口尺寸大小将图像渲染到虚拟屏的左上角,完成图像的渲染;
步骤S26:SurfaceFlinger进程调用显示控制程序,将Gralloc申请的显存地址、虚拟屏唯一ID号、应用包名、窗口长宽通过IPC通信模块发送至Linux侧。
步骤S3、Linux侧在安卓应用启动成功后,创建对应的图形显示窗口,通过图形合成模块按照设定的窗口尺寸对虚拟屏画面进行裁剪、合成和送显;如图3所示为本发明的安卓应用动态调整尺寸在Linux侧的流程图,具体的;
步骤S31:Linux侧接收到安卓应用启动成功的信号后,根据返回的虚拟屏唯一ID号、应用包名和窗口长宽创建一个指定尺寸的图形窗口,Linux图形窗口将虚拟屏的唯一ID号与安卓内的虚拟屏一一对应;
步骤S32:界面显示模块根据安卓发送过来唯一ID号、包名等信息确定对应的图形窗口,通过EGL和OpenGLES的接口(EGLImage)访问显存地址,将显存地址中存放的虚拟屏窗口图像数据转换为纹理;
步骤S33:Linux图形窗口程序使用缩放后的窗口大小对虚拟屏上的图像从左上角开始进行裁剪,合成最新的图像画面后绘制显示;
步骤S34:待Linux图形窗口程序完成显示后,Linux侧的显示控制模块将结果返回给安卓侧SurfaceFlinger,让SurfaceFlinger继续完成其他流程。
步骤S4、对Linux侧的图形显示窗口执行缩放操作,在鼠标释放、触摸缩放结束或窗口尺寸动态调整过程中,将捕获到的当前窗口尺寸通过IPC通信模块发送至安卓侧;
步骤S41:图形窗口程序通过设置事件监听器,监听窗口尺寸的变化;
步骤S42:使用鼠标或触摸操作对Linux侧的安卓应用图形窗口进行横向、纵向或对角方式进行窗口的自由缩放;
步骤S43:图形窗口程序监听鼠标释放事件、触摸缩放结束事件和尺寸动态变化数据,将当前窗口尺寸大小通过IPC通信模块发送至安卓侧,请求更新安卓图像大小。图形窗口程序是基于linux通用图形显示框架(如X11、Wayland)实现的普通应用显示窗口。
步骤S5、安卓侧接收到尺寸调整信息后,由应用管理模块更新应用栈边界Bound值,Bound值以虚拟屏左上角为原点,图形渲染模块根据该栈边界Bound信息进行图像渲染,完成渲染后由SurfaceFlinger调用显示控制程序将返回的显存句柄、虚拟屏ID、显示画面宽高通过通信模块发送至Linux侧;
图2是本发明的安卓应用动态调整尺寸在安卓侧的流程图,具体的:安卓应用以Freeform模式启动后,应用的Activity位于Freeform模式下的栈内,通过ATMS(ActivityTaskManagerService)服务更新栈边界值Bounds,以栈边界值大小为依据来决定最终显示在屏幕上的窗口大小,其中Bounds的类型为Rect(left,top,right,bottom),表示为各个方向离坐标轴的距离;
步骤S51:安卓侧服务程序接收到Linux侧发送的窗口尺寸等参数后,由安卓应用管理服务AppManager进行数据解析;
步骤S52:安卓通过ATMS的resizeTask函数更新安卓应用的栈边界值Bound;
步骤S53:安卓通过DisplayManagerService更新虚拟屏显示类Mode的长宽值,安卓应用通过Mode的长宽值实时获取窗口大小并将窗口更新事件通知到SufaceFlinger;
步骤S54:SurfaceFlinger将调整后最新尺寸的图像数据渲染到虚拟屏的左上角;
步骤S55:SurfaceFlinger进程调用显示控制程序,将Gralloc申请的显存地址、唯一ID号、应用包名、窗口长宽等信息通过IPC通信模块发送至Linux侧,由Linux侧的图形窗口进行图像显示的更新处理。
步骤S6、Linux侧的图形合成模块解析显存地址,使用缩放后的窗口大小对虚拟屏上的图像从左上角开始重新进行裁剪,合成最新的图像画面后绘制显示,实现安卓图像的动态调整,具体的:
步骤S61:Linux侧接收到安卓应用图形尺寸调整完成的信号后,根据返回的唯一ID号、包名找到对应的Linux侧图形窗口;
步骤S62:Linux侧图形窗口根据安卓返回的显存地址,解析地址并得到显存中存放的虚拟屏窗口图像数据,使用OpenGL ES对图像数据按实际窗口大小进行裁剪、合成和显示,完成安卓图形自由缩放操作。
另一方面,本发明提供了一种在Linux上缩放安卓应用窗口的装置,所述装置包括:虚拟屏管理模块,用于:启动应用时虚拟屏的创建和关闭应用时虚拟屏的销毁。IPC通信模块,用于:所述Linux侧和安卓侧之间的实时消息通信通道。图形渲染模块,用于:应用于安卓侧,若安卓侧支持直接访问GPU硬件,则安卓侧根据获取的图形绘制请求去使用OpenGLES调用GPU生成图像数据;若安卓侧不支持直接访问GPU硬件,则安卓侧将获取的图形绘制请求发送给Linux侧,由Linux侧完成图像渲染并返回图像显存信息。图形合成模块:应用于Linux侧,该模块接收到安卓侧发送的显存数据信息后,解析得到显存地址,再通过OpenGLES将显存数据进行裁剪,得到指定大小的显示画面。界面显示模块,用于:应用于Linux侧,管控着安卓应用的生命周期,通过调用图形合成模块,实现安卓图形显示到Linux图形窗口上。
本发明提供的一种在Linux上缩放安卓应用窗口的方法和装置,通过虚拟屏和Freeform模式结合的方式,实现了在Linux兼容安卓环境下对安卓应用多窗口化界面的自由缩放,并动态保持安卓应用画面的清晰度和UI布局的协调性,弥补等比例缩放存在的画面模糊、操作体验弱等不足,解决了一些安卓兼容产品使用安卓Freeform模式实现多窗口和自由缩放方案而出现的显示异常问题,充分彰显产品灵活性,满足Linux用户个性化需求,让安卓应用实现真正桌面化操作,为用户提供了更好的操作体验和视觉体验。
显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
Claims (7)
1.一种在Linux上缩放安卓应用窗口的方法,其特征在于,包括以下步骤:
步骤S1、安卓以容器方式运行在Linux中,Linux和安卓之间通过IPC通信模块进行数据交互,Linux发送启动安卓应用请求时将应用包名、显示器分辨率、显示的窗口尺寸通过IPC通信模块发送至安卓侧;
步骤S2、安卓侧接收到应用启动请求后,根据Linux侧发送过来的上述参数,为应用创建一个与显示器分辨率尺寸大小一样的虚拟屏,根据显示窗口尺寸大小设定应用的栈边界Bound值,Bound值以虚拟屏左上角为原点,以Freeform模式启动应用到虚拟屏上,通过图形渲染模块在虚拟屏左上角按照Bound值显示对应大小的安卓图像,SurfaceFlinger调用显示控制程序将返回的显存句柄、虚拟屏ID、显示画面宽高通过IPC通信模块发送至Linux侧;
步骤S3、Linux侧在安卓应用启动成功后,创建对应的图形显示窗口,通过图形合成模块按照设定的窗口尺寸对虚拟屏画面进行裁剪、合成和显示;
步骤S4、对Linux侧的图形显示窗口执行缩放操作,在鼠标释放、触摸缩放结束或窗口尺寸动态调整过程中,将捕获到的当前窗口尺寸通过IPC通信模块发送至安卓侧;
步骤S5、安卓侧接收到尺寸调整信息后,由应用管理模块更新应用栈边界Bound值,Bound值以虚拟屏左上角为原点,图形渲染模块根据该栈边界Bound信息进行图像渲染,完成渲染后由SurfaceFlinger调用显示控制程序将返回的显存句柄、虚拟屏ID、显示画面宽高通过通信模块发送至Linux侧;
步骤S6、Linux侧的图形合成模块解析显存地址,使用缩放后的窗口大小对虚拟屏上的图像从左上角开始重新进行裁剪,合成最新的图像画面后绘制显示,实现安卓图像的动态调整。
2.基于权利要求1所述的一种在Linux上缩放安卓应用窗口的方法,其特征在于,所述步骤S2的具体实现步骤为:
步骤S21:解析虚拟屏尺寸和窗口尺寸;
步骤S22:虚拟屏管理模块根据显示器分辨率尺寸大小创建一个相同大小的虚拟屏,并生成一个唯一的虚拟屏ID;
步骤S23:应用启动管理模块AppManager设定应用启动模式为Freeform模式,同时设定栈边界Bound值,根据唯一的虚拟屏ID将该应用启动到虚拟屏上;
步骤S24:Zygote进程创建新的安卓应用进程,应用的显示区域大小为设定的栈边界Bound值大小;
步骤S25:SurfaceFlinger进程从硬件抽象层HAL中的Gralloc中申请分辨率尺寸大小的显存空间后返回其地址,并由图形渲染模块根据窗口尺寸大小将图像渲染到虚拟屏的左上角,完成图像的渲染;
步骤S26:SurfaceFlinger进程调用显示控制程序,将Gralloc申请的显存地址、唯一ID号、应用包名、窗口长宽通过IPC通信模块发送至Linux侧。
3.基于权利要求1所述的一种在Linux上缩放安卓应用窗口的方法,其特征在于,所述步骤S3的具体实现步骤为:
步骤S31:Linux侧接收到安卓应用启动成功的信号后,根据返回的唯一ID号、包名和窗口长宽创建一个指定尺寸的图形窗口,Linux图形窗口将虚拟屏的唯一ID号与安卓内的虚拟屏一一对应;
步骤S32:Linux侧图形窗口根据返回的显存地址,解析地址并得到显存中存放的虚拟屏窗口图像数据,使用OpenGL ES接口对图像数据按实际窗口大小进行裁剪、合成和显示。
4.基于权利要求1所述的一种在Linux上缩放安卓应用窗口的方法,其特征在于,所述步骤S4的具体实现步骤为:
步骤S41:图形窗口程序通过设置事件监听器,监听窗口尺寸的变化;
步骤S42:使用鼠标或触摸操作对Linux侧的安卓应用图形窗口进行横向、纵向或对角方式进行窗口的自由缩放;
步骤S43:窗口程序监听鼠标释放事件、触摸缩放结束事件和尺寸动态变化数据,将当前窗口尺寸大小通过IPC通信模块发送至安卓侧,请求更新安卓图像大小。
5.基于权利要求1所述的一种在Linux上缩放安卓应用窗口的方法,其特征在于,所述步骤S5的具体实现步骤为:
步骤S51:安卓侧应用管理模块AppManager解析由Linux侧发送过来的窗口尺寸;
步骤S52:AppManager根据更新的窗口尺寸通过ATMS中resizeTask函数更新窗口栈边界Bound值;
步骤S53:安卓侧SurfaceFlinger进程根据新的栈边界Bound值大小对显示图像大小进行调整,并渲染到虚拟屏的左上角;
步骤S54:SurfaceFlinger进程调用显示控制程序,将Gralloc申请的显存地址、唯一ID号、应用包名、窗口长宽通过IPC通信模块发送至Linux侧,让Linux图形窗口进行图像显示的更新处理。
6.基于权利要求1所述的一种在Linux上缩放安卓应用窗口的方法,其特征在于,所述步骤S6的具体实现步骤为:
步骤S61:Linux侧接收到安卓应用图形尺寸调整完成的信号后,根据返回的唯一ID号、包名找到对应的Linux侧图形窗口;
步骤S62:Linux侧图形窗口根据安卓返回的显存地址,解析地址并得到显存中存放的虚拟屏窗口图像数据,使用OpenGL ES对图像数据按实际窗口大小进行裁剪、合成和显示,完成安卓图形自由缩放操作。
7.一种在Linux上缩放安卓应用窗口的装置,其特征在于,适用于权利要求1-6任一项所述的一种在Linux上缩放安卓应用窗口的方法,包括:
虚拟屏管理模块,用于启动应用时虚拟屏的创建和关闭应用时虚拟屏的销毁;
IPC通信模块,用于所述Linux侧和安卓侧之间的实时消息通信通道;
图形渲染模块,应用于安卓侧,若安卓侧支持直接访问GPU硬件,则安卓侧根据获取的图形绘制请求去使用OpenGL ES调用GPU生成图像数据;若安卓侧不支持直接访问GPU硬件,则安卓侧将获取的图形绘制请求发送给Linux侧,由Linux侧完成图像渲染并返回图像显存信息;
图形合成模块:应用于Linux侧,该模块接收到安卓侧发送的显存数据信息后,解析得到显存地址,再通过OpenGL ES将显存数据进行裁剪,得到指定大小的显示画面;
界面显示模块,应用于Linux侧,通过调用图形合成模块,实现安卓图形显示到Linux图形窗口上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310905316.4A CN116627579B (zh) | 2023-07-24 | 2023-07-24 | 一种在Linux上缩放安卓应用窗口的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310905316.4A CN116627579B (zh) | 2023-07-24 | 2023-07-24 | 一种在Linux上缩放安卓应用窗口的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116627579A CN116627579A (zh) | 2023-08-22 |
CN116627579B true CN116627579B (zh) | 2023-10-31 |
Family
ID=87602962
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310905316.4A Active CN116627579B (zh) | 2023-07-24 | 2023-07-24 | 一种在Linux上缩放安卓应用窗口的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116627579B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116931933B (zh) * | 2023-09-19 | 2023-12-01 | 北京麟卓信息科技有限公司 | 一种应用适配自由缩放的自动判断方法 |
CN117724797B (zh) * | 2024-02-18 | 2024-04-09 | 北京麟卓信息科技有限公司 | 一种基于异构混合渲染的自由缩放优化方法 |
CN117806765B (zh) * | 2024-03-01 | 2024-05-03 | 北京麟卓信息科技有限公司 | 一种基于细分动态重布局的自由缩放优化方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112269604A (zh) * | 2020-11-11 | 2021-01-26 | 北京技德系统技术有限公司 | 在Linux上兼容运行Android应用的窗口交互方法及装置 |
CN114168239A (zh) * | 2021-10-21 | 2022-03-11 | 北京鲸鲮信息系统技术有限公司 | 窗口显示方法、装置、设备和存储介质 |
CN114185508A (zh) * | 2022-02-15 | 2022-03-15 | 麒麟软件有限公司 | 在Linux兼容安卓系统上进行左右分屏的方法 |
CN114201134A (zh) * | 2022-02-17 | 2022-03-18 | 北京麟卓信息科技有限公司 | 安卓兼容环境中多窗口模式下Toast的优化显示方法 |
CN114579246A (zh) * | 2022-05-05 | 2022-06-03 | 北京麟卓信息科技有限公司 | 一种安卓兼容环境中多窗口模式下安卓应用的截屏方法 |
CN116339900A (zh) * | 2023-05-30 | 2023-06-27 | 北京麟卓信息科技有限公司 | 一种跨运行环境的多窗口融合显示方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105426191B (zh) * | 2015-11-23 | 2019-01-18 | 深圳创维-Rgb电子有限公司 | 用户界面显示处理方法及装置 |
-
2023
- 2023-07-24 CN CN202310905316.4A patent/CN116627579B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112269604A (zh) * | 2020-11-11 | 2021-01-26 | 北京技德系统技术有限公司 | 在Linux上兼容运行Android应用的窗口交互方法及装置 |
CN114168239A (zh) * | 2021-10-21 | 2022-03-11 | 北京鲸鲮信息系统技术有限公司 | 窗口显示方法、装置、设备和存储介质 |
CN114185508A (zh) * | 2022-02-15 | 2022-03-15 | 麒麟软件有限公司 | 在Linux兼容安卓系统上进行左右分屏的方法 |
CN114201134A (zh) * | 2022-02-17 | 2022-03-18 | 北京麟卓信息科技有限公司 | 安卓兼容环境中多窗口模式下Toast的优化显示方法 |
CN114579246A (zh) * | 2022-05-05 | 2022-06-03 | 北京麟卓信息科技有限公司 | 一种安卓兼容环境中多窗口模式下安卓应用的截屏方法 |
CN116339900A (zh) * | 2023-05-30 | 2023-06-27 | 北京麟卓信息科技有限公司 | 一种跨运行环境的多窗口融合显示方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116627579A (zh) | 2023-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116627579B (zh) | 一种在Linux上缩放安卓应用窗口的方法及装置 | |
US10732922B2 (en) | Manipulating shared screen content | |
KR100588327B1 (ko) | 화상 표시 시스템 | |
WO2017063324A1 (zh) | 一种窗口显示方法及移动终端 | |
JP2002536676A (ja) | ビデオズーミングシステム及び方法 | |
JP6255495B2 (ja) | ブラウザリソースの表示方法及び装置、並びにコンピュータ可読記憶媒体 | |
CN109101233B (zh) | 适配多种屏幕分辨率的方法、存储设备及安卓设备 | |
US6075532A (en) | Efficient redrawing of animated windows | |
KR101973985B1 (ko) | 고해상도 디스플레이를 위한 분산 병렬 처리 방식의 영상 렌더링 시스템 및 그 방법 | |
CN111754607A (zh) | 图片处理方法及装置、电子设备、计算机可读存储介质 | |
CN112035195A (zh) | 应用界面的展示方法、装置、电子设备及存储介质 | |
WO2021259249A1 (zh) | 数据显示处理方法、装置、计算机设备和存储介质 | |
US20060187239A1 (en) | System and method for improving visual appearance of efficient rotation algorithm | |
CN106919376B (zh) | 动态画面传输方法、伺服器装置及用户装置 | |
US20140184603A1 (en) | Method to improve usability of high pixel density displays | |
JP6339550B2 (ja) | 端末用プログラム、端末装置及び端末制御方法 | |
CN114089896A (zh) | 一种渲染图像截取方法及装置 | |
WO2022217433A1 (zh) | 多端协同的显示更新方法及装置 | |
JP2004318269A (ja) | 画像表示装置、画像表示方法、及び画像表示システム | |
CN114168240A (zh) | 窗口显示方法、装置、设备和存储介质 | |
CN112346687A (zh) | 信息交互方法、装置、电子设备和可读存储介质 | |
CN113490035B (zh) | 一种显示方法、装置、电视及存储介质 | |
CN112511880B (zh) | 一种多屏间内容传送和控制系统 | |
CN113238724B (zh) | 多区域组合投屏方法、装置、设备及存储介质 | |
JP6559280B2 (ja) | 端末用プログラム、端末装置及び端末制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |