一种安卓兼容环境适配多Linux内核的启动方法技术

技术编号:35499015 阅读:19 留言:0更新日期:2022-11-05 17:03
本发明专利技术公开了一种安卓兼容环境适配多Linux内核的启动方法,通过为安卓兼容环境编译两类内存镜像文件,当Linux系统内核对应的目录发生变化时启动位置无关代码类型的内存镜像文件,根据Linux系统动态配置的地址加载内存镜像文件,从而保证了安卓兼容环境在多种不同Linux内核下的正常启动,进一步提高了安卓兼容环境与桌面系统之间的兼容性,改善了用户的使用体验。户的使用体验。户的使用体验。

【技术实现步骤摘要】
一种安卓兼容环境适配多Linux内核的启动方法


[0001]本专利技术属于桌面操作系统上运行移动应用的开发
,具体涉及一种安卓兼容环境适配多Linux内核的启动方法。

技术介绍

[0002]Linux操作系统安卓兼容环境(下文简称安卓兼容环境)是一种在Linux操作系统上运行安卓应用的技术,对丰富Linux操作系统应用生态有着重要的意义。通常情况下,典型的安卓兼容环境主要包括安卓应用显示单元和安卓应用兼容服务,安卓应用显示单元用于在桌面操作系统上实现安卓应用的用户界面,安卓应用兼容服务用于提供运行于桌面操作系统上的安卓兼容环境,通过安卓应用显示单元与安卓应用兼容服务的相互配合实现安卓应用在桌面操作系统上的有效运行,例如,现有安卓兼容环境的实现方案有xDroid,它包括xDroidUI和xDroidServer,xDroidUI为安卓应用显示单元,xDroidServer为安卓应用兼容服务,通过xDroid与xDroidUI的配合即可实现安卓应用与Linux操作系统的兼容。
[0003]现有安卓系统为了提高其运行时性能,在其第一次运行时往往会将安卓框架的各种Jar包编译成OAT或ART文件,OAT或ART文件实质上就是ELF格式的Linux的可执行代码即机器指令而不是Java的中间代码,然而这将会导致第一次启动安卓系统的过程耗时较多,尤其是对于安卓兼容环境而言,会导致用户在桌面系统中启动安卓兼容环境的耗时过长,从而影响用户体验。
[0004]因此,现有的安卓系统的启动机制为,在编译安卓系统时直接将安卓系统自带的Jar文件编译为OAT或ART文件,这虽然会增大安卓系统镜像文件的数据量,但会显著减少安卓系统第一次启动的时间。在安卓系统启动过程中会加载Boot.art文件,Boot.art文件为包含了安卓框架各组件编译结果的文件,如果Boot.art文件存在,则将Boot.art文件复制到Cache目录并映射到地址空间的某个固定地址进行使用,类似于加载动态库的操作,由此即可减少安卓系统的启动时间,如不存在就需要将安卓框架对应的Jar文件编译生成为ART文件并保存到cache目录中。
[0005]然而当在桌面系统中使用安卓兼容环境时,由于安卓兼容环境需要与多种版本的桌面系统进行适配,因此安卓系统现有启动机制中所设定的固定地址则可能会被桌面系统占用,致使安卓兼容环境加载Boot.art文件失败,进而产生安卓兼容环境无法正常启动的问题,为用户的正常操作带来不便。

技术实现思路

[0006]有鉴于此,本专利技术提供了一种安卓兼容环境适配多Linux内核的启动方法,能够实现安卓兼容环境对多种Linux系统内核的适配。
[0007]本专利技术提供的一种安卓兼容环境适配多Linux内核的启动方法,包括以下步骤:步骤1、将安卓兼容环境的Jar包编译为非位置无关代码类型和位置无关代码类型的内存镜像文件,并将动态基地址的初始值设置为空,其中,非位置无关代码类型的内存镜
像文件记为Boot.art文件,位置无关代码类型的内存镜像文件记为Boot.pic.art文件;步骤2、在Linux系统内运行安卓兼容环境时,加载未启动的进程,若预设路径下存在Boot.art文件则执行步骤3,否则执行步骤7;步骤3、若动态基地址为空则执行步骤4,否则执行步骤6;步骤4、获取Boot.art文件的地址空间作为镜像地址空间;获取当前进程的虚拟地址空间作为进程虚拟地址空间;若镜像地址空间被进程虚拟地址空间所占用则执行步骤5,否则将Boot.art文件映射到镜像地址空间完成进程的启动后执行步骤8;步骤5、若Boot.pic.art文件存在,则将Boot.pic.art文件映射到零地址,采用Linux系统分配的基地址更新动态基地址,再根据动态基地址及镜像地址空间大小确定新的镜像地址空间,完成进程的启动,执行步骤8;若Boot.pic.art文件不存在则执行步骤7;步骤6、根据动态基地址及镜像地址空间大小确定新的镜像地址空间,将Boot.art文件映射到新的镜像地址空间中,完成进程的启动,执行步骤8;步骤7、根据当前Linux系统的指令集编译安卓兼容环境启动所依赖的安卓框架的Jar包,得到Boot.art文件和Boot.pic.art,再将Boot.art文件和Boot.pic.art均复制到确定的路径下,执行步骤2;步骤8、进程加载后导出符号表,记录为兼容环境符号表,兼容环境符号表为二元组的集合,每个二元组包括符号名和符号地址;步骤9、若安卓兼容环境运行所需的所有进程均已启动,则完成安卓兼容环境的启动结束本流程;否则执行步骤2。
[0008]进一步地,所述步骤4中的所述获取Boot.art文件的地址空间作为镜像地址空间的方式为:解析Boot.art文件获取其对应的基地址及镜像地址空间大小,确定内存镜像文件的地址空间,将该地址空间命名为镜像地址空间。
[0009]进一步地,所述步骤4中的所述获取当前进程的虚拟地址空间作为进程虚拟地址空间的方式为:获取当前进程的进程ID,读取当前进程的映射文件获取当前进程所分配的虚拟地址空间,将该虚拟地址空间命名为进程虚拟地址空间。
[0010]进一步地,所述步骤2中的所述预设路径为“/system/framework/<arch>/”。
[0011]进一步地,所述步骤2还包括若所述未启动的进程仅存在非位置无关代码类型的编译结果,则在解析未启动的进程的导入符号表时,若兼容环境符号表不为空则采用兼容环境符号表中保存的符号地址替换导入符号表中具有相同符号名的符号地址;若兼容环境符号表为空则不处理。
[0012]进一步地,所述步骤4中所述将Boot.art文件映射到镜像地址空间完成进程的启动的方式为:若当前Linux系统的内核版本不低于5.18,则使用memfd接口将Boot.art映射到镜像地址空间;否则,采用ashmem接口将Boot.art映射到镜像地址空间。
[0013]有益效果:本专利技术通过为安卓兼容环境编译两类内存镜像文件,当Linux系统内核对应的目录发生变化时启动位置无关代码类型的内存镜像文件,根据Linux系统动态配置的地址加载内存镜像文件,从而保证了安卓兼容环境在多种不同Linux内核下的正常启动,进一步提高了安卓兼容环境与桌面系统之间的兼容性,改善了用户的使用体验。
附图说明
[0014]图1为本专利技术提供的一种安卓兼容环境适配多Linux内核的启动方法的流程图。
具体实施方式
[0015]下面结合附图并举实施例,对本专利技术进行详细描述。
[0016]本专利技术提供的一种安卓兼容环境适配多Linux内核的启动方法,其核心思想是:通过为安卓兼容环境编译两类内存镜像文件,当Linux系统内核对应的目录发生变化时启动位置无关代码类型的内存镜像文件,根据Linux系统动态配置的地址加载内存镜像文件,从而实现了安卓兼容环境在多种不同Linux内核下的正常启动。
[0017]本专利技术提供了一种安卓兼容环境适配多本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种安卓兼容环境适配多Linux内核的启动方法,其特征在于,包括以下步骤:步骤1、将安卓兼容环境的Jar包编译为非位置无关代码类型和位置无关代码类型的内存镜像文件,并将动态基地址的初始值设置为空,其中,非位置无关代码类型的内存镜像文件记为Boot.art文件,位置无关代码类型的内存镜像文件记为Boot.pic.art文件;步骤2、在Linux系统内运行安卓兼容环境时,加载未启动的进程,若预设路径下存在Boot.art文件则执行步骤3,否则执行步骤7;步骤3、若动态基地址为空则执行步骤4,否则执行步骤6;步骤4、获取Boot.art文件的地址空间作为镜像地址空间;获取当前进程的虚拟地址空间作为进程虚拟地址空间;若镜像地址空间被进程虚拟地址空间所占用则执行步骤5,否则将Boot.art文件映射到镜像地址空间完成进程的启动后执行步骤8;步骤5、若Boot.pic.art文件存在,则将Boot.pic.art文件映射到零地址,采用Linux系统分配的基地址更新动态基地址,再根据动态基地址及镜像地址空间大小确定新的镜像地址空间,完成进程的启动,执行步骤8;若Boot.pic.art文件不存在则执行步骤7;步骤6、根据动态基地址及镜像地址空间大小确定新的镜像地址空间,将Boot.art文件映射到新的镜像地址空间中,完成进程的启动,执行步骤8;步骤7、根据当前Linux系统的指令集编译安卓兼容环境启动所依赖的安卓框架的Jar包,得到Boot.art文件和Boot.pic.art,再将Boot.art文件和Boot.pic.art均复制到确定的路径下,执行步骤2;步骤8、进程加载后导出符号表,记录为兼...

【专利技术属性】
技术研发人员:温研
申请(专利权)人:北京麟卓信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1