系统升级方法及装置制造方法及图纸

技术编号:12886033 阅读:41 留言:0更新日期:2016-02-17 17:07
本公开是关于一种系统升级方法及装置,其中,系统升级方法包括:将原方法替换为第一方法,将原方法备份到第二方法中;将对原方法的调用转换为对第一方法的调用,并通过第二方法调用备份的原方法。本公开实施例,通过将原方法替换为第一方法,将原方法备份到第二方法中,然后将对原方法的调用转换为对第一方法的调用,并通过第二方法调用备份的原方法,从而在不修改源代码的情况下,实现兼容系统的升级,大大地节省了时间、减少了出错率以及提高了升级效率。

【技术实现步骤摘要】

本公开涉及操作系统
,尤其涉及一种系统升级方法及装置
技术介绍
安卓(Android)系统是一个开源的移动设备操作系统。目前很多移动设备操作系统均基于安卓系统开发,为安卓兼容系统。但是,所有安卓兼容系统必须兼容所有为安卓系统开发的软件。因此,这些安卓兼容系统不但需要保证自有软件的正常使用,而且需要保证基于安卓系统开发的第三方软件的正常使用。为了将安卓系统改造为一个新的安卓兼容系统,现有的技术方案,是通过修改源代码来实现的。通过在安卓系统的源代码中,在适当的位置插入或者修改原代码,然后再一起编译来实现。由于必须修改源代码,才能实现安卓系统的改造,这就导致当安卓系统升级时,必须付出额外的工作进行源代码的合并和修改才可以完成兼容系统的升级,不仅耗费时间多且容易出错。
技术实现思路
为克服相关技术中存在的问题,本公开提供一种系统升级方法及装置。根据本公开实施例的第一方面,提供一种系统升级方法,包括:将原方法替换为第一方法,将所述原方法备份到第二方法中;将对所述原方法的调用转换为对所述第一方法的调用,并通过所述第二方法调用备份的所述原方法。在一实施例中,所述将原方法替换为第一方法,将所述原方法备份到第二方法中,包括:将所述原方法入口处将要被覆盖的代码备份到一内存区域;在所述原方法的入口处写入第一跳转指令,所述第一跳转指令用于跳转到第一函数,所述第一函数用于将所述原方法的参数转换为所述第一方法的参数;在所述第二方法的入口处写入第二跳转指令,所述第二跳转指令用于跳转到第二函数,所述第二函数用于将所述第二方法的参数转换为所述原方法的参数;在所述内存区域写入跳回指令。在一实施例中,在所述将所述原方法入口处将要被覆盖的代码备份到一内存区域之前,所述方法还包括:创建一数据区域,所述数据区域用于保存所述原方法的地址、所述第一方法的地址、所述第二方法的地址和所述内存区域的地址;在所述原方法的入口处写入第一跳转指令时,所述方法还包括:写入所述数据区域的地址;在所述第二方法的入口处写入第二跳转指令时,所述方法还包括:写入所述数据区域的地址。在一实施例中,所述将对所述原方法的调用转换为对所述第一方法的调用,包括:通过所述第一跳转指令跳转到第一函数,并通过所述第一函数将所述原方法的参数转换为所述第一方法的参数,以执行所述第一方法。在一实施例中,所述通过所述第二方法调用备份的所述原方法,包括:通过所述第二跳转指令跳转到第二函数,通过所述第二函数将所述第二方法的参数转换为所述原方法的参数,以执行所述内存区域备份的代码。在一实施例中,在所述通过所述第二函数将所述第二方法的参数转换为所述原方法的参数之后,所述方法还包括:根据所述跳回指令跳回执行所述原方法未被覆盖部分的代码。根据本公开实施例的第二方面,提供一种系统升级装置,包括:替换备份模块,被配置为将原方法替换为第一方法,将所述原方法备份到第二方法中;转换调用模块,被配置为将对所述原方法的调用转换为对所述替换备份模块替换的所述第一方法的调用,并通过所述第二方法调用所述替换备份模块备份的所述原方法。在一实施例中,所述替换备份模块包括:备份子模块,被配置为将所述原方法入口处将要被覆盖的代码备份到一内存区域;第一写入子模块,被配置为在所述原方法的入口处写入第一跳转指令,所述第一跳转指令用于跳转到第一函数,所述第一函数用于将所述原方法的参数转换为所述第一方法的参数;第二写入子模块,被配置为在所述第二方法的入口处写入第二跳转指令,所述第二跳转指令用于跳转到第二函数,所述第二函数用于将所述第二方法的参数转换为所述原方法的参数;第三写入子模块,被配置为在所述内存区域写入跳回指令。在一实施例中,所述替换备份模块还包括:创建子模块,被配置为在所述备份子模块将所述原方法入口处将要被覆盖的代码备份到一内存区域之前,创建一数据区域,所述数据区域用于保存所述原方法的地址、所述第一方法的地址、所述第二方法的地址和所述内存区域的地址;其中,所述第一写入子模块,还被配置为在所述原方法的入口处写入第一跳转指令时,写入所述数据区域的地址;其中,所述第二写入子模块,还被配置为在所述第二方法的入口处写入第二跳转指令时,写入所述数据区域的地址。在一实施例中,所述转换调用模块包括:第一跳转转换子模块,被配置为通过所述第一写入子模块写入的所述第一跳转指令跳转到第一函数,并通过所述第一函数将所述原方法的参数转换为所述第一方法的参数,以执行所述第一方法。在一实施例中,所述转换调用模块包括:第二跳转转换子模块,被配置为通过所述第二写入子模块写入的所述第二跳转指令跳转到第二函数,通过所述第二函数将所述第二方法的参数转换为所述原方法的参数,以执行所述内存区域备份的代码。在一实施例中,所述转换调用模块还包括:跳回执行子模块,被配置为在所述第二跳转转换子模块通过所述第二函数将所述第二方法的参数转换为所述原方法的参数之后,根据所述跳回指令跳回执行所述原方法未被覆盖部分的代码。根据本公开实施例的第三方面,提供一种系统升级装置,包括:处理器;用于存储处理器可执行指令的存储器;其中,处理器被配置为:将原方法替换为第一方法,将所述原方法备份到第二方法中;将对所述原方法的调用转换为对所述第一方法的调用,并通过所述第二方法调用备份的所述原方法。本公开的实施例提供的技术方案可以包括以下有益效果:通过将原方法替换为第一方法,将原方法备份到第二方法中,然后将对原方法的调用转换为对第一方法的调用,并通过第二方法调用备份的原方法,从而在不修改源代码的情况下,实现兼容系统的升级,大大地节省了时间、减少了出错率以及提高了升级效率。通过写入跳转指令实现将原方法替换为第一方法,将原方法备份到第二方法中,从而为后续实现方法调用转换提供了条件。通过创建数据区域,保存替换过程中所需的信息,为实现方法替换提供了条件。可以通过参数转换实现由原方法到第一方法的调用,由于第一方法中包含了升级后的新代码,因此,该实施例可以在不修改源代码的情况下实现系统升级。通过参数转换实现由第二方法到备份代码的调用,从而可以保证对第三方软件的兼容。通过跳回指令跳回执行原方法未覆盖部分代码的调用,从而可以保证对第三方软件的兼容。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。【附图说明】此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本专利技术的实施例,并与说明书一起用于解释本专利技术的原理。图1是根据一示例性实施例示出的一种系统升级方法的流程图。图2是根据一示例性实施例示出的一种方法替换过程的流程图。图3A是根据一示例性实施例示出的ART的执行过程示意图。图3B是根据一示例性实施例示出的一种Class的组织结构示意图。图3C-3D是根据一示例性实施例示出的一种系统升级方法的场景图。图4是根据一示例性实施例示出的另一种方法替换过程的流程图。图5是根据一示例性实施例示出的一种对原方法的调用转换为对第一方法的调用的流程图。图6是根据一示例性实施例示出的一种通过第二方法调用原方法的流程图。图7是根据一不例性实施例不出的一种系统升级装置的框图。图8是根据一示例性实施例示出的另一种系统升级装置的框图。图9是根据一不例性实施例不出的另一种系统升级装置的框图。本文档来自技高网...

【技术保护点】
一种系统升级方法,其特征在于,所述方法包括:将原方法替换为第一方法,将所述原方法备份到第二方法中;将对所述原方法的调用转换为对所述第一方法的调用,并通过所述第二方法调用备份的所述原方法。

【技术特征摘要】

【专利技术属性】
技术研发人员:董俊杰
申请(专利权)人:小米科技有限责任公司
类型:发明
国别省市:北京;11

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

1