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

应用更新方法、装置、计算机设备和存储介质

文献发布时间:2023-06-19 19:35:22


应用更新方法、装置、计算机设备和存储介质

技术领域

本申请涉及计算机技术领域,特别是涉及一种应用更新方法、装置、计算机设备、存储介质和计算机程序产品。

背景技术

随着计算机技术的发展,终端上应用(Application,APP)的种类和数量越来越多,在人们生活、工作和娱乐中占据越来越重要的位置,例如,游戏类、教育类、社交类、金融类等等应用,在各种应用的运营中,需要不断对应用进行更新,以满足用户日益增长的需求。

目前,对于各种应用的更新,一般需要对应用版本进行发布,由用户重新下载并安装新版本的应用,以实现对应用的更新,而对应用的重新下载和安装,导致应用的更新效率较低。

发明内容

基于此,有必要针对上述技术问题,提供一种能够提高应用更新效率的应用更新方法、装置、计算机设备、存储介质和计算机程序产品。

一种应用更新方法,所述方法包括:

在操作平台上运行目标应用;

当满足目标应用的更新条件时,获取针对目标应用的补丁文件;其中,补丁文件具备在执行时与目标应用进行代码直接调用的能力;

当补丁文件不具有在操作平台执行的执行权限时,通过目标应用创建虚拟运行环境;

在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。

一种应用更新装置,所述装置包括:

应用运行模块,用于在操作平台上运行目标应用;

补丁文件获取模块,用于当满足目标应用的更新条件时,获取针对目标应用的补丁文件;其中,补丁文件具备在执行时与目标应用进行代码直接调用的能力;

虚拟运行环境创建模块,用于当补丁文件不具有在操作平台执行的执行权限时,通过目标应用创建虚拟运行环境;

补丁文件执行模块,用于在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

在操作平台上运行目标应用;

当满足目标应用的更新条件时,获取针对目标应用的补丁文件;其中,补丁文件具备在执行时与目标应用进行代码直接调用的能力;

当补丁文件不具有在操作平台执行的执行权限时,通过目标应用创建虚拟运行环境;

在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

在操作平台上运行目标应用;

当满足目标应用的更新条件时,获取针对目标应用的补丁文件;其中,补丁文件具备在执行时与目标应用进行代码直接调用的能力;

当补丁文件不具有在操作平台执行的执行权限时,通过目标应用创建虚拟运行环境;

在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。

一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现以下步骤:

在操作平台上运行目标应用;

当满足目标应用的更新条件时,获取针对目标应用的补丁文件;其中,补丁文件具备在执行时与目标应用进行代码直接调用的能力;

当补丁文件不具有在操作平台执行的执行权限时,通过目标应用创建虚拟运行环境;

在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。

上述应用更新方法、装置、计算机设备、存储介质和计算机程序产品,在满足操作平台上运行的目标应用的更新条件时,获取具备在执行时与目标应用进行代码直接调用的能力的补丁文件,在补丁文件不具有在操作平台执行的执行权限时,在通过目标应用创建的虚拟运行环境中执行补丁文件,并在执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。在应用更新过程中,通过创建虚拟运行环境执行不具有在操作平台执行的执行权限的补丁文件,且补丁文件具备在执行时与目标应用进行代码直接调用的能力,可以与目标应用进行代码直接调用,不需要进行代码转换,从而利用补丁文件实现了在不具有执行权限的操作平台上应用的动态化更新,提高了应用的更新效率。

附图说明

图1为一个实施例中应用更新方法的应用环境图;

图2为一个实施例中应用更新方法的流程示意图;

图3为一个实施例中对目标应用进行更新的流程示意图;

图4为另一个实施例中对目标应用进行更新的流程示意图;

图5为传统技术中根据补丁文件对应用进行更新的流程示意图;

图6为一个实施例中生成补丁文件的流程示意图;

图7为一个实施例中加载补丁文件的流程示意图;

图8为一个实施例中对开场白界面进行更新的界面变化示意图;

图9为一个实施例中原生代码调用虚拟机方法的流程示意图;

图10为一个实施例中虚拟机调用原生代码的流程示意图;

图11为一个实施例中虚拟机中相互调用的流程示意图;

图12为一个实施例中虚拟机替代原生代码的流程示意图;

图13为一个实施例中应用更新装置的结构框图;

图14为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的应用更新方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他网络服务器上。终端102的操作平台上可以安装有各种应用,各应用可以由服务器104提供相应服务。在终端102的操作平台上运行目标应用,当满足目标应用的更新条件时,表明需要对终端102上的应用进行更新,则终端102可以从服务器104获取针对目标应用的补丁文件,该补丁文件具备在执行时与目标应用进行代码直接调用的能力,终端102获得补丁文件后,若补丁文件不具有在终端102的操作平台执行的执行权限,则终端102通过目标应用创建虚拟运行环境,并在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新,从而避免了终端102从服务器104重新下载完整新版本的应用进行安装。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一个实施例中,如图2所示,提供了一种应用更新方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:

步骤202,在操作平台上运行目标应用。

其中,操作平台是指运行应用的平台,具体可以为运行应用的操作系统平台。操作系统(Operating System,OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务,操作系统也提供一个让用户与系统交互的操作界面。具体地,操作平台可以包括但不限于包括安卓(Android)操作系统平台、MIUI操作系统平台、iOS操作系统平台、Windows操作系统平台等各种平台。目标应用为需要针对进行更新的应用,目标应用在操作平台上运行,对于不同的操作平台,运行的应用可以基于不同的编程语言编制得到。例如,安卓操作系统平台上运行的应用可以基于JAVA编程得到,iOS操作系统平台上运行的应用可以基于Objective-C编程得到。

具体地,终端在操作平台上运行目标应用,不同的终端可以安装对应的操作平台,运行相应的应用。例如,对于安装了iOS操作平台的终端,可以运行基于Objective-C语言编写开发的应用,即此时目标应用为基于Objective-C语言编写开发的应用。在具体实现时,用户可以操作终端,以在操作平台中启动运行目标应用,如用户可以通过触摸或点击目标应用的应用图标,以在操作平台运行目标应用。此外,目标应用也可以根据预定条件自动启动,如终端可以根据预先的设定自动运行目标应用。

步骤204,当满足目标应用的更新条件时,获取针对目标应用的补丁文件;其中,补丁文件具备在执行时与目标应用进行代码直接调用的能力。

其中,更新条件为对目标应用进行更新处理的条件,更新条件可以根据实际需要进行设置,如可以为检测到服务器存在目标应用对应的更新版本、用户主动触发更新等。满足目标应用对应的更新条件,表明终端需要对目标应用进行更新处理。补丁文件为针对目标应用进行更新处理的文件,补丁文件可以对目标应用的应用功能进行更新,也可以对目标应用的漏洞进行修复。例如,对于应用A,当前版本为2.0,对应用进行更新增加了新的功能,更新版本为2.1,则补丁文件可以为针对2.0版本的应用A进行功能增加形成2.1版本的文件;而当应用A存在漏洞时,如某个功能界面无法正常显示时,则补丁可以为针对该漏洞的修复,以修复应用A异常的功能界面进行正常显示。

补丁文件具备在执行时与目标应用进行代码直接调用的能力,代码直接调用的能力指补丁文件在执行时与目标应用的代码间可以直接进行调用,而不需要进行复杂的代码转换,从而可以确保补丁文件的执行效率。在具体应用中,为确保补丁文件具备在执行时与目标应用进行代码直接调用的能力,可以从补丁文件与目标应用各自编程语言的角度进行实现,即补丁文件在执行时与目标应用之间代码的调用,与补丁文件和目标应用各自的编程语言相关。如采用与目标应用对应编程语言差异性低的编程语言编写补丁文件,可以使得补丁文件具备在执行时与目标应用之间的代码调用不需要复杂的代码转换。补丁文件的编程语言与目标应用对应编程语言越接近,则二者之间代码调用时的转换处理越简单。当补丁文件的编程语言与目标应用对应编程语言相同时,例如,对于iOS上应用B,其采用Objective-C语言编写开发得到,若补丁文件也采用Objective-C语言编写,则补丁文件在执行时,与目标应用均是基于Objective-C语言代码实现,二者可以进行代码直接调用,此时补丁文件具备在执行时与目标应用进行代码直接调用的能力。

具体地,终端监测是否满足目标应用的更新条件,如监测服务器是否存在针对目标应用的更新任务,若存在,则认为满足目标应用的更新条件,终端获取针对目标应用的补丁文件。具体应用时,终端可以在操作平台运行目标应用时,向服务器发起查询,以确认是否需要对目标应用进行更新,即监测是否满足目标应用的更新条件,若满足,则终端从服务器获得针对目标应用的补丁文件,如可以从服务器下载相应的补丁文件。

步骤206,当补丁文件不具有在操作平台执行的执行权限时,通过目标应用创建虚拟运行环境。

其中,执行权限为各种文件在操作平台中进行执行的权限,执行权限由操作平台进行管控,也可以由用户进行配置。不同的操作平台对于不同的文件具有不同的权限管控,即在不同的操作平台中,不同的文件具有不同的执行权限。例如,在iOS系统中,通过应用商店获得的应用文件可以进行执行安装,而对于通过应用获取的补丁文件则不具有执行权限,不可以进行执行。又如,在安卓系统中,对于格式为可执行的文件,可以进行执行,即通过应用获取的补丁文件也可以在安卓操作系统平台上直接进行执行。虚拟运行环境为通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的虚拟计算机环境。虚拟运行环境可以利用实体计算机的资源创建虚拟计算机环境,如创建虚拟机,以在虚拟机中执行计算机任务。虚拟运行环境中可以包括虚拟操作平台,虚拟操作平台的类型可以与运行目标应用的操作平台相同,从而通过该虚拟操作平台执行针对目标应用的补丁文件。

具体地,终端确定补丁文件是否具有在操作平台上执行的执行权限,若补丁文件具有执行权限,则可以直接在操作平台上执行补丁文件,以对目标应用进行更新。若补丁文件不具有执行权限,表明补丁文件无法在操作平台上直接执行,则终端通过目标应用创建虚拟运行环境,具体可以将终端的计算资源作为虚拟运行环境的计算资源,以创建虚拟运行环境,从而可以在虚拟运行环境中执行针对目标应用的补丁文件。具体应用中,通过目标应用创建虚拟运行环境,可以由终端在操作平台上通过目标应用创建得到,也可以由终端直接在目标应用中创建得到。

步骤208,在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。

具体地,创建虚拟运行环境后,终端可以在虚拟运行环境中执行补丁文件,在执行补丁文件的过程中,终端可以通过与目标应用进行代码直接调用,如可以直接调用目标应用中的代码,不需要对代码进行转换,从而实现对目标应用的更新。对目标应用的更新,可以包括对目标应用版本的更新、功能的更新以及漏洞修复等各种形式的更新内容。

在具体应用中,执行补丁文件时,根据补丁文件中更新内容的不同,可以与目标应用产生不同的交互。例如,补丁文件需要利用目标应用对应的代码时,则补丁文件需要调用目标应用的代码;在目标应用需要补丁文件中的代码进行修复时,目标应用则可以直接调用补丁文件的代码进行修复更新。此外,虚拟运行环境中执行的补丁文件还可以在虚拟运行环境中实现自我调用,也可以对目标应用的代码进行替换,如可以将目标应用中运行实现功能1的代码,替换为通过补丁文件的代码实现,而虚拟运行环境将补丁文件实现的功能1的结果返回至目标应用,从而实现对目标应用的替代。在对目标应用的更新中,根据更新需求的不同,会生成对应的补丁文件,补丁文件在虚拟运行环境中执行时,会基于不同的执行方式实现,当需要与目标应用进行代码调用时,虚拟运行环境可以通过补丁文件直接与目标应用进行代码调用,以实现对目标应用的更新。

上述应用更新方法中,在满足操作平台上运行的目标应用的更新条件时,获取具备在执行时与目标应用进行代码直接调用的能力的补丁文件,在补丁文件不具有在操作平台执行的执行权限时,在通过目标应用创建的虚拟运行环境中执行补丁文件,并在执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。在应用更新过程中,通过创建虚拟运行环境执行不具有在操作平台执行的执行权限的补丁文件,且补丁文件具备在执行时与目标应用进行代码直接调用的能力,可以与目标应用进行代码直接调用,不需要进行代码转换,从而利用补丁文件实现了在不具有执行权限的操作平台上应用的动态化更新,提高了应用的更新效率。

在一个实施例中,提供了一种应用更新方法,包括:在操作平台上运行目标应用,获取目标应用的更新条件;当目标应用满足更新条件时,获取针对目标应用的补丁文件;其中,补丁文件具备在执行时与目标应用进行代码直接调用的能力;获取补丁文件的平台执行权限,当补丁文件不具有在操作平台执行的执行权限时,创建目标应用的虚拟运行环境;在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。

其中,目标应用的更新条件可以预先设置,以是否对目标应用启动更新处理进行判定,如可以为是否检测到服务器存在目标应用对应的更新版本、用户是否主动触发更新等。更新条件可以根据实际需要灵活设置,如可以设置多种判定条件,只要满足更新条件中的任一判定条件,则认为满足应用的更新条件;也可以在满足更新条件中预定数量的判定条件时,认为满足应用的更新条件;此外,还可以为各判定条件设置权重,根据各判定条件的加权结果,综合确定是否满足更新条件。平台执行权限指补丁文件在操作平台中直接启动进行执行的权限,若补丁文件具备平台执行权限,则补丁文件可以在操作平台中直接启动执行,以对目标应用进行更新处理。平台执行权限由操作平台进行管控,也可以由用户进行配置,如操作平台可以设置某些类型的补丁文件,或者某些应用的补丁文件具备平台执行权限,也可以设置为所有补丁文件均不具备平台执行权限,或者,由用户为各种类型的补丁文件,或者各种应用的补丁文件的执行权限进行配置。虚拟运行环境为目标应用对应构建的虚拟的运行环境,具体可以为在目标应用中创建的虚拟机,即可以在补丁文件具备操作平台的平台执行权限时,在目标应用中创建虚拟机,以为补丁文件提供虚拟的运行环境。

具体地,在终端的操作平台上运行目标应用,并获取目标应用的更新条件,实现时可以在操作平台触发运行目标应用时,如用户点击终端操作平台上目标应用的应用图标时,终端启动运行目标应用,并获取目标应用对应的更新条件。终端基于获得的更新条件进行判定,如查询服务器是否存在更新版本,若目标应用满足更新条件,如确定目标应用存在更新版本时,获取针对目标应用的补丁文件,具体可以由终端从服务器请求获取对应的补丁文件。补丁文件具备在执行时与目标应用进行代码直接调用的能力,例如,补丁文件可以通过目标应用的开发语言编制得到,从而确保补丁文件具备在执行时与目标应用可以进行代码直接调用。进一步地,终端获取补丁文件的平台执行权限,具体可以由终端查询操作平台对应配置的平台执行权限集,从平台执行权限集中确定获取补丁文件的平台执行权限,若平台执行权限集中存在补丁文件的平台执行权限,则终端可以获取得到补丁文件的平台执行权限,否则,终端从平台执行权限集终端查询反馈为查询失败。在终端未获得补丁文件的平台执行权限,即表明补丁文件不具有在操作平台执行的执行权限,则终端创建目标应用的虚拟运行环境,具体可以在目标应用中创建虚拟机,以在虚拟机中执行该补丁文件。进一步地,在虚拟运行环境中执行补丁文件时,终端通过与目标应用进行代码直接调用,对目标应用进行更新。在虚拟运行环境中执行补丁文件时,可能需要与目标应用之间进行代码的调用交互,而补丁文件具备在执行时与目标应用进行代码直接调用的能力,此时可以实现补丁文件与目标应用的代码直接调用,不需要对代码进行转换,以通过补丁文件对目标应用进行更新处理。

本实施例中,在终端更新应用的过程中,通过创建目标应用的虚拟运行环境,以执行不具有在操作平台执行的执行权限的补丁文件,且补丁文件具备在执行时与目标应用进行代码直接调用的能力,可以与目标应用进行代码直接调用,不需要进行代码转换,从而利用补丁文件实现了在不具有执行权限的操作平台上应用的动态化更新,提高了应用的更新效率。

在一个实施例中,如图3所示,对目标应用进行更新的处理,即在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新,包括:

步骤302,当通过虚拟运行环境接收到目标应用的代码直接调用请求时,确定目标调用参数。

其中,代码直接调用请求用于指示进行代码的直接调用。补丁文件具备在执行时与目标应用进行代码直接调用的能力,一方面补丁文件在执行时可以直接调用目标应用对应的代码,另一方面,目标应用也可以直接调用补丁文件中的代码,而不需要进行复杂的代码及参数转换。在目标应用需要调用补丁文件中的代码时,如目标应用需要由补丁文件对某界面中的异常模块进行修复时,可以由目标应用向虚拟运行环境发送代码直接调用请求,以指示虚拟运行环境将调用补丁文件对应代码以对异常模块进行修复。目标调用参数为目标应用调用补丁文件的代码对应的调用参数,虚拟运行环境按照该目标调用参数调用相应代码进行执行,并将执行结果返回至目标应用以实现对目标应用的更新。

具体地,在虚拟运行环境中执行补丁文件时,若虚拟运行环境接收到目标应用的代码直接调用请求,表明在执行补丁文件过程中,目标应用需要调用补丁文件代码,则终端确定目标调用参数。目标调用参数可以根据目标应用的代码直接调用请求确定,具体可以从代码直接调用请求中提取获得。目标调用参数可以包括需要调用补丁文件的代码所对应的调用参数,如可以包括函数名和函数参数,以通过调用函数名对应的方法实现对目标应用的更新。

步骤304,在虚拟运行环境中,根据目标调用参数执行补丁文件,获得目标执行结果。

其中,目标执行结果为虚拟运行环境中根据目标调用参数执行补丁文件得到的执行结果,目标应用可以通过该目标执行结果进行更新。例如,对于应用A中界面M,包括活动展示模块,更新前活动展示模块展示的为中秋节的活动信息;而在中秋节后,应用A又推出国庆节的活动信息,也需要展示在活动展示模块,则目标应用可以通过目标调用参数执行补丁文件,得到的目标执行结果包括了国庆节的活动信息,目标应用可以将目标执行结果替换展示到界面M的活动展示模块中,从而实现对界面M的更新。

具体地,确定目标调用参数后,终端在虚拟环境中,根据目标调用参数执行补丁文件,如可以根据目标调用参数指定的参数,执行补丁文件中对应的代码,得到目标执行结果。

步骤306,通过虚拟运行环境将目标执行结果返回至目标应用,以对目标应用进行更新。

具体地,在通过虚拟运行环境执行补丁文件得到目标执行结果后,终端通过虚拟运行环境将目标执行结果返回至目标应用,目标应用根据目标执行结果进行更新。例如,目标应用可以根据目标执行结果对应用功能进行更新,从而实现对目标应用的更新。

本实施例中,目标应用可以通过虚拟运行环境直接调用补丁文件进行更新。具体在虚拟运行环境接收到目标应用的代码直接调用请求时,根据目标调用参数执行补丁文件,并通过虚拟运行环境将获得的目标执行结果返回至目标应用,由目标应用基于目标执行结果进行更新,补丁文件具备在执行时与目标应用进行代码直接调用的能力,目标应用直接调用补丁文件的代码时不需要进行代码和参数的转换,有效提高了应用的更新处理效率。

在一个实施例中,目标调用参数包括函数名和函数参数;在虚拟运行环境中,根据目标调用参数执行补丁文件,获得目标执行结果,包括:通过虚拟运行环境,根据补丁文件中的补丁关联数据,确定补丁文件关联的方法地址映射关系;根据方法地址映射关系,从补丁文件中获取函数名对应的方法和地址;在虚拟运行环境中,根据函数参数和地址执行方法对应的指令,获得目标执行结果。

其中,目标调用参数包括函数名和函数参数,函数名为目标应用需要调用的函数的名称,函数参数作为函数名对应函数的输入,即需要调用函数名对应的函数执行函数参数获得相应执行结果。补丁文件可以包括补丁指令文件和补丁关联数据,补丁指令文件为针对目标应用进行更新处理的指令代码文件,补丁关联数据为辅助补丁指令文件对目标应用进行更新的数据,如可以包括描述补丁指令文件大小的数据、补丁指令文件中的常量数据、补丁文件的支持的架构数据、函数表等各种数据。方法地址映射关系记录了补丁文件中所定义的各种方法与相应地址的关系。其中,方法指可用来完成解决某件事情或实现某个功能的办法,具体可以为能够被重复调用的代码块;地址为方法对应代码的位置,通过地址可以寻得对应的方法,从而进行执行。

具体地,确定的目标调用参数包括函数名和函数参数,需要通过调用函数名对应的函数,通过函数参数进行执行,以通过目标应用对补丁文件进行代码直接调用。终端通过虚拟运行环境,获取补丁文件中的补丁关联数据,补丁关联数据可以包括但不限于包括描述补丁指令文件大小的数据、补丁指令文件中的常量数据、补丁文件的支持的架构数据、函数表等各种数据,具体可以直接从补丁文件提取得到补丁关联数据,进一步根据补丁关联数据确定补丁文件关联的方法地址映射关系,方法地址映射关系记录了补丁文件中所定义的各种方法与相应地址的关系。获得方法地址映射关系后,终端根据该方法地址映射关系,从补丁文件中获取函数名对应的方法和地址。例如,终端可以通过虚拟运行环境,将目标调用参数中的函数名在方法地址映射关系中匹配,根据匹配结果确定补丁文件中函数名对应的方法和地址。终端在虚拟运行环境中,按照函数参数和地址执行方法对应的指令,获得目标执行结果。具体可以由终端将函数参数导入操作栈中,并根据方法对应的地址,执行方法对应的指令,如可以为汇编指令,以通过目标应用调用执行补丁文件的代码,获得目标执行结果。

本实施例中,根据补丁文件对应的方法地址映射关系,确定目标调用参数包括的函数名所对应的方法和地址,并在虚拟运行环境中根据目标调用参数中的函数参数和地址执行方法对应的指令,获得目标执行结果,从而实现了目标应用对补丁文件的代码直接调用,提高了应用更新的效率。

在一个实施例中,如图4所示,对目标应用进行更新的处理,即在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新,包括:

步骤402,通过虚拟运行环境向目标应用发送代码直接调用请求;代码直接调用请求,用于指示目标应用执行代码直接调用请求相应的指令。

其中,代码直接调用请求用于指示目标应用执行代码直接调用请求相应的指令,从而实现虚拟运行环境中补丁文件执行时对目标应用的代码直接调用。补丁文件具备在执行时与目标应用进行代码直接调用的能力,补丁文件在执行时可以直接调用目标应用对应的代码,而不需要进行复杂的代码及参数转换。在执行补丁文件时,若需要调用目标应用的代码,则可以通过虚拟运行环境向目标应用发送代码直接调用请求,以指示目标应用执行代码直接调用请求相应的指令,如执行相应方法对应的指令,从而实现对目标应用的代码直接调用。

具体地,终端上虚拟运行环境执行补丁文件时,若需要调用目标应用的代码,例如,补丁文件中仅包括界面B中活动模块的更新内容,则在虚拟运行环境中执行展示整个界面B时,需要调用目标应用中界面B的其他代码,从而在虚拟运行环境中展示完整的更新后的界面B。此时,需要通过虚拟运行环境调用目标应用的代码,由终端通过虚拟运行环境向目标应用发送代码直接调用请求。

步骤404,获取目标应用执行代码直接调用请求相应的指令所获得的目标执行结果。

其中,目标执行结果为目标应用执行代码直接调用请求相应的指令得到的执行结果,目标应用可以通过该目标执行结果进行更新。具体可以由目标应用执行代码直接调用请求相应的指令后,将得到的目标执行结果返回至虚拟运行环境,以对目标应用进行更新。

具体地,终端通过虚拟运行环境获得目标应用执行代码直接调用请求相应的指令所获得的目标执行结果。在具体实现时,终端通过虚拟运行环境向目标应用发送代码直接调用请求后,目标应用可以确定调用参数,调用参数为在补丁文件执行过程中,虚拟运行环境需要调用的目标应用的代码对应的参数,目标应用按照该调用参数调用相应代码进行执行,并将执行结果返回至虚拟运行环境以实现对目标应用进行更新。

步骤406,在虚拟运行环境中,基于目标执行结果执行补丁文件,以对目标应用进行更新。

具体地,获得目标应用返回的目标执行结果后,终端在虚拟运行环境中基于目标执行结果执行补丁文件,从而对目标应用进行更新。例如,补丁文件用于对目标应用A中功能K中的子功能k2进行更新,则目标应用可以执行功能K中除功能k2的其他功能,并将执行结果K’返回至虚拟运行环境,虚拟运行环境基于K’执行补丁文件,从而将补丁文件中的子功能k2添加至执行结果K’中,得到更新后的K,并将更新后K返回至目标应用进行功能展示,也可以直接在虚拟运行环境中进行功能展示,从而实现了对目标应用的更新处理。

本实施例中,在执行补丁文件时,虚拟运行环境可以直接调用目标应用的代码以进行更新。具体在虚拟运行环境需要调用目标应用的代码时,向目标应用发送代码直接调用请求,获得目标应用返回的执行代码直接调用请求相应的指令所获得的目标执行结果,并基于目标执行结果执行补丁文件,以对目标应用进行更新,补丁文件具备在执行时与目标应用进行代码直接调用的能力,虚拟运行环境在执行补丁文件时,直接调用目标应用的代码,不需要进行代码和参数的转换,有效提高了应用的更新处理效率。

在一个实施例中,在通过虚拟运行环境向目标应用发送代码直接调用请求之前,应用更新方法还包括:通过虚拟运行环境,根据补丁文件中的补丁关联数据,确定补丁文件关联的方法地址映射关系;当方法地址映射关系不包括当前调用方法时,确定当前调用方法对应的函数名和函数参数;基于函数名和函数参数生成代码直接调用请求;代码直接调用请求,用于指示目标应用根据函数名和函数参数执行当前调用方法对应的指令。

其中,补丁文件可以包括补丁指令文件和补丁关联数据,补丁指令文件为针对目标应用进行更新处理的指令代码文件,补丁关联数据为辅助补丁指令文件对目标应用进行更新的数据,如可以包括描述补丁指令文件大小的数据、补丁指令文件中的常量数据、补丁文件的支持的架构数据、函数表等各种数据。方法地址映射关系记录了补丁文件中所定义的各种方法与相应地址的关系。其中,方法指可用来完成解决某件事情或实现某个功能的办法,具体可以为能够被重复调用的代码块;地址为方法对应代码的位置,通过地址可以寻得对应的方法,从而进行执行。

当前调用方法为执行补丁文件时,当前需要调用的方法,若方法地址映射关系不包括当前调用方法,表明当前需要调用的方法不可以由虚拟运行环境通过执行补丁文件实现,需要调用目标应用进行执行。函数名为目标应用需要调用的函数的名称,函数参数作为函数名对应函数的输入,即需要调用函数名对应的函数执行函数参数获得相应执行结果。

具体地,终端通过虚拟运行环境,获取补丁文件中的补丁关联数据,补丁关联数据可以包括但不限于包括描述补丁指令文件大小的数据、补丁指令文件中的常量数据、补丁文件的支持的架构数据、函数表等各种数据,具体可以直接从补丁文件提取得到补丁关联数据,进一步根据补丁关联数据确定补丁文件关联的方法地址映射关系,方法地址映射关系记录了补丁文件中所定义的各种方法与相应地址的关系。获得方法地址映射关系后,终端根据该方法地址映射关系,确定当前调用方法是否可同执行补丁文件实现,即确定当前调用方法是否处于方法地址映射关系中,若方法地址映射关系不包括当前调用方法,则确定当前调用方法对应的函数名和函数参数,具体可以通过对当前调用方法进行分析得到。得到当前调用方法对应的函数名和函数参数后,终端基于函数名和函数参数生成代码直接调用请求,以将生成的代码直接调用请求发送至目标应用,指示目标应用根据函数名和函数参数执行当前调用方法对应的指令,得到目标执行结果。

本实施例中,在执行补丁文件,通过虚拟运行环境直接调用目标应用的代码进行更新时,根据补丁文件对应的方法地址映射关系,若方法地址映射关系不包括当前调用方法,则确定当前调用方法对应的函数名和函数参数,并基于函数名和函数参数生成代码直接调用请求,以将生成的代码直接调用请求发送至目标应用,从而实现了执行补丁文件时对目标应用的代码直接调用,对目标应用进行更新,补丁文件具备在执行时与目标应用进行代码直接调用的能力,提高了应用更新的效率。

在一个实施例中,应用更新方法还包括:在虚拟运行环境中执行补丁文件、且补丁文件关联的方法地址映射关系中包括当前调用方法时,确定当前调用方法对应的函数名和函数参数;根据方法地址映射关系,从补丁文件中获取函数名对应的方法和地址;在虚拟运行环境中,根据函数参数和地址执行方法对应的指令,以对目标应用进行更新。

其中,方法地址映射关系记录了补丁文件中所定义的各种方法与相应地址的关系。其中,方法指可用来完成解决某件事情或实现某个功能的办法,具体可以为能够被重复调用的代码块;地址为方法对应代码的位置,通过地址可以寻得对应的方法,从而进行执行。方法地址映射关系可以根据补丁文件中包括的补丁关联数据确定,补丁关联数据为辅助补丁文件中的补丁指令文件对目标应用进行更新的数据。当前调用方法为执行补丁文件时,当前需要调用的方法,若方法地址映射关系不包括当前调用方法,表明当前需要调用的方法不可以由虚拟运行环境通过执行补丁文件实现,需要调用目标应用进行执行。函数名为当前调用方法需要调用的函数的名称,函数参数作为函数名对应函数的输入,即需要调用函数名对应的函数执行函数参数获得相应执行结果。

具体地,在虚拟运行环境中执行补丁文件时,终端确定补丁文件关联的方法地址映射关系中是否包括当前调用方法,具体可以由终端获取补丁文件关联的方法地址映射关系,并将当前调用方法在方法地址映射关系进行匹配,若匹配成功,则表明当前调用方法存在于方法地址映射关系中,即补丁文件关联的方法地址映射关系中包括当前调用方法,可以通过虚拟运行环境执行补丁文件对应用进行更新。终端确定当前调用方法对应的函数名和函数参数,具体可以通过当前调用方法进行函数分析得到。终端根据方法地址映射关系,从补丁文件中获取函数名对应的方法和地址,得到方法和地址后,终端在虚拟运行环境中,根据函数参数和地址执行方法对应的指令,从而对目标应用进行更新。

本实施例中,在当前调用方法存在于方法地址映射关系中时,在虚拟运行环境中,根据基于当前调用方法确定的函数参数,执行基于方法地址映射关系确定方法对应的指令,从而实现了通过虚拟运行环境直接执行补丁文件,以对目标应用进行更新。

在一个实施例中,应用更新方法还包括:在虚拟运行环境中执行补丁文件、且补丁文件关联的方法地址映射关系中包括目标替换调用方法时,确定目标替换调用方法对应的替换函数名和函数参数;根据方法地址映射关系,从补丁文件中获取替换函数名对应的替换方法和替换地址;在虚拟运行环境中,根据函数参数和替换地址执行替换方法对应的指令,得到替换执行结果;将替换执行结果返回至目标替换调用方法对应的替换请求端,以对目标应用进行更新。

其中,方法地址映射关系记录了补丁文件中所定义的各种方法与相应地址的关系。其中,方法指可用来完成解决某件事情或实现某个功能的办法,具体可以为能够被重复调用的代码块;地址为方法对应代码的位置,通过地址可以寻得对应的方法,从而进行执行。方法地址映射关系可以根据补丁文件中包括的补丁关联数据确定,补丁关联数据为辅助补丁文件中的补丁指令文件对目标应用进行更新的数据。目标替换调用方法为执行补丁文件时,当前需要替换的调用方法,即需要通过虚拟运行环境替换进行替代调用的方法,被替换的方法可以是目标应用的方法,也可以是虚拟运行环境中执行的补丁文件的方法。替换函数名为目标替换调用方法需要调用的函数的名称,函数参数作为替换函数名对应函数的输入,即需要调用替换函数名对应的函数执行函数参数获得相应执行结果。替换方法和替换地址与替换函数名对应,通过替换方法和替换地址执行替换函数名对应的函数,以实现调用方法的替换。替换执行结果为通过目标替换调用方法替换被替换的调用方法执行获得的结果。替换请求端为被替换的调用方法的归属方,如可以为目标应用或补丁文件。通过将替换执行结果返回目标替换调用方法对应的替换请求端,从而实现通过补丁文件对目标应用进行更新处理。

具体地,在虚拟运行环境中执行补丁文件时,若需要对调用的方法进行替换,即通过补丁文件中的方法替换其他调用的方法时,则终端可以确定补丁文件关联的方法地址映射关系中是否包括目标替换调用方法,具体可以由终端获取补丁文件关联的方法地址映射关系,并将目标替换调用方法在方法地址映射关系进行匹配,若匹配成功,则表明目标替换调用方法存在于方法地址映射关系中,即补丁文件关联的方法地址映射关系中包括目标替换调用方法,可以通过虚拟运行环境执行补丁文件对应用进行更新。具体实现时,可以在虚拟运行环境中执行补丁文件时,若获得替换调用方法的请求,具体可以为目标应用发出的替换调用方法的请求,也可以为虚拟运行环境在执行补丁文件时获得的替换调用方法的请求,则确定需要对调用方法进行替换,终端可以根据替换调用方法的请求确定对应待替换的调用方法及相应的目标替换调用方法,通过目标替换调用方法对待替换的调用方法进行替换执行。

在补丁文件关联的方法地址映射关系中包括目标替换调用方法时,终端确定目标替换调用方法对应的替换函数名和函数参数,具体可以通过对目标替换调用方法进行函数分析得到。终端根据方法地址映射关系,从补丁文件中获取替换函数名对应的替换方法和替换地址,得到替换方法和替换地址后,终端在虚拟运行环境中,根据函数参数和替换地址执行方法对应的指令,得到替换执行结果。终端将获得的替换执行结果返回至目标替换调用方法对应的替换请求端,如返回目标应用或执行补丁文件的虚拟运行环境,以通过替换执行结果对目标应用进行更新。

本实施例中,在目标替换调用方法存在于方法地址映射关系中时,在虚拟运行环境中,根据基于目标替换调用方法确定的函数参数,执行基于方法地址映射关系确定替换方法对应的指令,从而实现了在虚拟运行环境中通过补丁文件的方法对调用方法进行替换执行,以对目标应用进行更新。

在一个实施例中,在通过目标应用创建虚拟运行环境之后,应用更新方法还包括:将补丁文件中的补丁指令文件加载至虚拟运行环境中;确定补丁文件对应的架构参数;当架构参数与操作平台对应的平台架构参数匹配时,将补丁文件中的补丁关联数据加载至虚拟运行环境中。

其中,补丁文件包括补丁指令文件和补丁关联数据,补丁指令文件为针对目标应用进行更新处理的指令代码文件,补丁关联数据为辅助补丁指令文件对目标应用进行更新的数据,如可以包括描述补丁指令文件大小的数据、补丁指令文件中的常量数据、补丁文件的支持的架构数据、函数表等各种数据。架构参数用于表示补丁文件所匹配的架构类型,具体可以为指令集所匹配的架构类型,不同的架构类型支持不同的指令集,即不同架构类型可以对应于不同的补丁文件。补丁文件对应的架构参数可以根据补丁文件中的补丁关联数据确定。平台架构参数为运行目标应用的操作平台所对应的架构参数。

具体地,在通过目标应用创建虚拟运行环境之后,终端将补丁文件加载至虚拟运行环境中,以在虚拟运行环境中执行补丁文件。补丁文件包括补丁指令文件和补丁关联数据,终端可以将补丁文件中的补丁指令文件加载至虚拟运行环境中,具体可以映射至虚拟运行环境的内存中。终端确定补丁文件对应的架构参数,具体可以根据补丁文件中的补丁关联数据确定补丁文件对应的架构参数。终端确定运行目标应用的操作平台所对应的平台架构参数,比较补丁文件对应的架构参数和平台架构参数,若补丁文件对应的架构参数和平台架构参数匹配,表明补丁文件与操作平台匹配,终端将补丁文件中的补丁关联数据加载至虚拟运行环境中,以便在虚拟运行环境中基于补丁关联数据执行补丁指令文件,从而通过补丁文件实现对应用的更新处理。

本实施例中,在虚拟运行环境中执行补丁文件前,将补丁文件中的补丁指令文件和补丁关联数据加载至虚拟运行环境中,以在便在虚拟运行环境中基于补丁关联数据执行补丁指令文件,从而通过补丁文件实现对应用的更新处理。

在一个实施例中,补丁文件通过补丁编制步骤获得,补丁编制步骤包括:获取通过目标编程语言编制的针对目标应用的补丁代码;目标编程语言编制的代码具备在执行时与目标应用进行代码直接调用的能力;基于指令集对补丁代码进行编译处理,得到补丁指令文件;根据补丁指令文件生成针对目标应用的补丁文件。

其中,编程语言为编写程序代码的语言,目标编程语言为编写补丁文件对应代码的语言。目标编程语言编制的代码具备在执行时与目标应用进行代码直接调用的能力,从而确保通过目标编程语言编制补丁代码在执行时与目标应用进行代码直接调用的能力。补丁代码为通过目标编程语言针对目标应用编写的补丁的代码文件。例如,目标编程语言为Objective-C语言,补丁代码可以为通过Objective-C语言编写的针对目标应用进行更新的Objective-C代码文件。

指令为指示计算机硬件执行某种运算、处理功能的命令,指令集是计算机的中央处理单元用来计算和控制计算机系统的一套指令的集合。不同硬件具有不同的指令集架构,指令集与硬件之间的匹配,可以有效确保指令的处理效率。具体实现时,指令集需要提供足够的功能支持,让补丁代码通过编译可以生成相应的汇编指令组合,确保补丁代码能够实现所需功能。指令集设计的核心思想为需要让虚拟运行环境能够尽可能快地运行,所以每一个指令越短越好,这不仅能够减少程序的大小,也能够使虚拟运行环境可以更快的取出指令。指令集中指令可以根据立即数指令、移动指令、加减运算指令、跳转指令、位运算指令、调用指令、空指令、程序结束指令等各种类型指令构建得到。

具体地,补丁文件通过补丁编制步骤获得,补丁编制步骤可以在编制终端执行,以将获得的补丁文件通过服务器下发至终端。在生成补丁文件时,编制终端可以获取通过目标编程语言编制的针对目标应用的补丁代码,补丁文件的编制人员可以在编制终端通过目标编程语言编制得到针对目标应用的补丁代码。目标编程语言编制的代码具备在执行时与目标应用进行代码直接调用的能力,具体可以由编制终端确定目标应用对应的编程语言,并通过与编程语言相匹配的目标编程语言编写补丁代码,确保补丁文件具备在执行时与目标应用进行代码直接调用的能力。例如,目标编程语言可以与目标应用对应的编程语言相同,即通过目标应用对应的编程语言编写补丁代码,可以确保补丁文件具备在执行时与目标应用进行代码直接调用的能力。

编制终端确定预先设定的指令集,通过该指令集对补丁代码进行编译处理,得到补丁指令文件,补丁指令文件为针对目标应用进行更新处理的指令代码文件。通过对补丁代码进行编译处理,可以基于补丁代码生成相应指令组合,如可以生成汇编指令组合。终端基于补丁指令文件生成针对目标应用的补丁文件,具体可以确定补丁指令文件对应的补丁关联数据,并根据补丁指令文件和对应的补丁关联数据生成目标应用对应的补丁文件。具体实现时,可以在获得补丁指令文件对应的补丁关联数据后,将补丁指令文件和对应的补丁关联数据进行打包,得到目标应用对应的补丁文件。

本实施例中,由执行补丁编制步骤的编制终端基于指令集,对通过目标编程语言编制的补丁代码进行编译处理,并根据补丁指令文件生成针对目标应用的补丁文件,从而得到具备在执行时与目标应用进行代码直接调用能力的补丁文件,通过该补丁文件对目标应用进行更新,可以提高目标应用的更新效率。

在一个实施例中,基于指令集对补丁代码进行编译处理,得到补丁指令文件,包括:对补丁代码进行预编译处理,得到预编译结果;基于预编译结果依次进行词法分析和语法分析;获得分析结果;当分析结果为通过时,通过指令集对预编译结果进行编译处理,得到补丁指令文件。

其中,预编译处理为在对补丁代码进行编译前的预处理,具体可以包括但不限于包括头文件导入、宏替换等预处理。预编译结果为对补丁代码进行预编译处理的预处理结果。词法分析通过将输入的代码转换为符合相应编程语言的词法单元,可以包括关键字、操作符、变量等,输入的代码被标记分割为不同的符号,以及各代码对应的位置。语法分析则将词法分析完成后的代码转化为语法树,转化完成后将进行静态分析,找出非语法性错误,以确保代码的准确性。分析结果为对预编译结果依次进行词法分析和语法分析的处理结果,若分析结果为通过,则表明补丁代码中无词法错误和语法错误,可以对补丁代码进行编译处理。

具体地,编制终端对补丁代码进行预编译处理,如进行宏替换、头文件替换等预处理,得到预编译结果。编制终端对预编译结果依次进行词法分析和语法分析,以确保补丁代码的准确无误,得到分析结果。若获得的分析结果为通过,表明补丁代码中无词法错误和语法错误,由编制终端通过预设的指令集对预编译结果进行编译处理,即将预编译结果中的各代码转换为预设的指令集中相应的指令,得到补丁指令文件。补丁指令文件包括补丁代码中各代码与预设的指令集中对应的指令。

本实施例中,对补丁代码进行预编译处理,并对预编译结果依次进行词法分析和语法分析,在分析结果为通过时,通过预设的指令集对预编译结果进行编译处理,得到补丁指令文件,从而确保将补丁代码编译生成准确无误的指令集合,以便对目标应用进行更新处理。

在一个实施例中,根据补丁指令文件生成针对目标应用的补丁文件,包括:确定补丁指令文件对应的补丁关联数据;根据补丁指令文件和补丁关联数据,生成针对目标应用的补丁文件。

其中,补丁关联数据为辅助补丁指令文件对目标应用进行更新的数据,如可以包括描述补丁指令文件大小的数据、补丁指令文件中的常量数据、补丁文件的支持的架构数据、函数表等各种数据。具体地,在编译得到补丁指令文件后,编制终端可以确定补丁指令文件对应的补丁关联数据,具体可以对补丁指令文件进行解析,以确定补丁指令文件对应的补丁关联数据,如确定补丁指令文件大小的数据、补丁指令文件中的常量数据、补丁文件的支持的架构数据、函数表等各种数据。得到补丁指令文件对应的补丁关联数据后,编制终端根据补丁指令文件和补丁关联数据生成针对目标应用的补丁文件,具体可以将补丁指令文件和补丁关联数据进行打包,得到针对目标应用的补丁文件。

本实施例中,根据补丁指令文件和对应关联的补丁关联数据生成针对目标应用的补丁文件,从而可以在虚拟运行环境中基于补丁关联数据执行补丁指令文件,以实现通过补丁文件对目标应用的更新。

在一个实施例中,当满足目标应用的更新条件时,获取针对目标应用的补丁文件,包括:当检测到针对目标应用的更新任务时,从服务器获取针对目标应用且与操作平台的平台架构参数匹配的补丁文件。

其中,满足目标应用的更新条件可以为检测到针对目标应用进行更新的更新任务。在具体实现时,在操作平台上运行目标应用后,终端可以通过目标应用检测服务器是否存在补丁文件,进一步确定补丁文件是否适用于当前操作平台对应的版本以及目标应用对应的版本,补丁文件是否超期,若均通过,则认为检测到针对目标应用的更新任务,需要对目标应用进行更新处理。具体地,终端监测是否满足目标应用的更新条件,具体监测是否存在针对目标应用的更新任务,如监测服务器是否存在补丁文件、存在的补丁文件是否适用于当前操作平台的版本及目标应用的版本、补丁文件是否有效,若均通过检测,则确定存在目标应用的更新任务。终端从服务器获取针对目标应用且与操作平台的平台架构参数匹配的补丁文件,具体可以为终端从服务器下载补丁文件,补丁文件与操作平台的平台架构参数匹配,从而可以通过该补丁文件对目标应用进行更新。具体实现时,终端在从服务器获取补丁文件时,服务器可以确定终端上操作平台的平台架构参数,基于平台架构参数确定终端上操作平台的架构类型,从而将与终端上操作平台的架构类型匹配的补丁文件下发至终端进行应用更新。

进一步地,在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新之前,应用更新方法还包括:对补丁文件进行校验,当校验结果为校验通过时,执行在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新的步骤。

具体地,在从服务器获得补丁文件后,终端可以对获得的补丁文件进行校验,如通过哈希算法进行校验,若校验结果为校验通过,表明获得的补丁文件为正常文件,可以基于补丁文件进行应用更新处理,则终端执行在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新的步骤,从而通过补丁文件对目标应用进行更新。在具体实现时,若补丁文件的校验结果为校验不通过,则可以重新向服务器获取补丁文件,直至校验通过后执行相应的补丁文件,以对目标应用进行更新。

本实施例中,在检测到针对目标应用的更新任务时从服务器获取补丁文件,并对补丁文件进行校验,在校验通过后在虚拟运行环境中执行补丁文件,以通过与目标应用进行代码直接调用,对目标应用进行更新。

本申请还提供一种应用场景,该应用场景应用上述的应用更新方法。具体地,该应用更新方法在该应用场景的应用如下:

在应用的运营中,需要不断对应用进行更新,以满足用户日益增长的需求。在iOS系统上,应用发布后无法再通过下发新的代码,对已经发布的应用进行修改,任何修改都需要通过应用商店AppStore进行审核、发布后,再上线新版本,用户才能对终端的应用进行更新。所以,在应用遇到严重问题时,对应用的问题进行更新修复的时间成本十分大,应用的更新下效率低。

应用的动态化是指通过服务器下发可执行文件,绕过应用发布、审核阶段,直接在应用中运行可执行代码,从而达到实现新增需求或修复紧急问题的方案。通过动态化可以不通过重新下载的方式实现对应用的更新。而在iOS系统上,目前实现动态化,是利用iOS系统内置的JavaScriptCore引擎,利用Objective-CRuntime的运行时特性,利用JS(JavaScript)编写补丁文件,服务器下发补丁文件后,应用对补丁文件进行加载,并对应用内OC(Objective-C语言)方法进行增加、替换,从而实现对应用的更新。其中,Objective-C语言为用于在iOS上开发使用的编程语言。OC-Runtime,即Objective-C语言所提供的运行时特性,指OC的方法调用并不是在编译时就确定的,而是在运行时才确定,利用该特性可以实现消息转发、重定向、动态方法解析等操作。JavaScript为脚本编程语言。

具体地,应用读取到补丁文件后,会从JS代码中传递要调用的类名、函数名到OC,再使用OC中动态调用的方法,调用到对应的代码,从而实现动态化需求的能力。如图5所示,在应用根据补丁文件对应用进行更新的处理过程中,需要依次转换元函数、转换JS参数、将字符串转换成类、方法调用、将获取的OC参数转换为JS参数,调用JS方法,获取并转换OC返回值,通过JS获取返回值的处理,即需要在JS与OC之间不断进行来回通信,不断地进行参数转换,调用一个方法需要经历8步才能成功调用,调用的效率低。

同时,在调试补丁代码时,由于每个方法的调用过程十分复杂,当出现问题需要定位时,冗长的调用栈会使得代码难以调试。而且,JS的垃圾回收机制采用的是GC(GarbageCollection,垃圾回收)机制,垃圾收集器会定期找出不再使用的变量,并释放其内存,而iOS本身使用的是ARC(automatic reference count,自动引用计数)的内存管理,当一个对象引用计数为0时即释放该对象。两者的回收机制并不相同,容易造成内存不能及时释放或被提前释放的问题,导致出现一些诡异的崩溃,难以定位和解决。另外,iOS开发者在编写补丁文件时,需要使用JavaScript语言,而非使用日常用于开发iOS应用的Objective-C语言,在开发阶段也有一定的障碍,容易导致开发出现编程问题,影响应用更新处理效率。

基于此,本实施例中的应用更新方法,采用直接使用OC编写补丁文件,通过特定的编译模块,具体同自定义的Clang编译器将文件编译成特定的补丁文件,并通过应用创建一虚拟机以解析与执行补丁文件中的指令,从而实现应用的动态化更新。其中,Clang编译器是C、C++、Objective-C和Objective-C++等程序语言的编译器前端。

具体地,在开发侧,需要生成补丁文件,以由服务器将补丁文件发送至终端对应用进行更新。如图6所示,补丁文件的编译过程包括输入步骤、预处理步骤、编译步骤和补丁文件生成步骤。其中,在输入步骤中,补丁文件的编制端获取代码文件,代码文件OC语言编写得到,具体在编写完OC文件后,将OC文件进行编译。在预处理步骤中,对OC文件中的宏进行替换,并导入相关头文件,以及处理其他预编译指令,生成中间代码。在编译步骤中,需要将OC文件编译生成中间文件代码,并进行词法分析与语法分析。词法分析将输入的代码转换为一系列符合OC语言的词法单元,这些词法包括了关键字、操作符、变量等,代码被标记分割为不同的符号,以及其对应的位置。语法分析则将词法分析完成后的代码转化为语法树,转化完成后将会进行静态分析,找出非语法性错误,如果没有错误则继续执行生成汇编代码;若发生错误则编译错误。

为使OC代码能够在客户端运行的虚拟机中顺利连接与执行,需要定义一套完整的汇编指令集。指令集需要提供足够的功能支持,让OC代码能够通过编译生成相应的汇编指令组合,确保OC代码能够实现所需功能。汇编指令集设计的核心思想为让虚拟机能够尽可能快地运行,所以每一个指令越短越好,如此不仅能够减少程序的大小,也能够使虚拟机可以更快的取出指令。

具体的指令可以有6大类:立即数指令、移动指令、加减运算指令、跳转指令、位运算指令和调用指令。此外还可以设置有两个特殊的指令:空指令,代表什么都不做;程序结束指令,代表虚拟机程序结束。指令集的总指令数为180个,包括了浮点数操作和栈指令。对于汇编指令集,还可以进一步做相关优化,具体可以将这些指令的字节码都设置更规整,以避免读取译码的额外操作。例如,1字节的操作码,在两个寄存器各4bit拼一起也是1字节。区别于精简指令集,指令集中的指令设计并不是定长的,而是在1-6字节之间,如此可以节省大量的空间,由于短的指令不需要占用额外的空间,长的指令也可以与短的指令一同存放,从而减少空间的浪费。

另外,iOS目前使用的是armv7+arm64的架构,armv7+arm64的架构均是基于arm的架构,arm架构可以向下兼容,例如arm64可以兼容armv7的架构,但armv7上无法使用一些arm64的特性,导致无法发挥出所有arm64指令集的性能。所以,考虑到虚拟机最核心的要素就是性能,可以设计两套的指令集,一套针对arm64,一套针对armv7,确保所有补丁文件都能在对应架构上发挥到最大的性能。同时也可以设有两套虚拟机,一套支持armv7,一套支持arm64系统,二者在设计上理论上是没有实际上的区别,有区别的只是汇编指令集的设计上的部分区别。因为armv7代表的32位架构一次只能处理32位,也就是4个字节的数据,arm64代表的64位能够处理64位,也就是8个字节的数据。

当一个组件包含了两种架构的时候,无可避免会导致包大小的增加,但是基于iOS系统的xcode提供的xcframework,能够根据当前设备不同的架构去下发不同的架构包,从而可以解决在arm64上依然持有armv7架构的虚拟机,导致包大小增加的问题。

在具体应用中,arm64的指令可以包括Push与pop指令,用于虚拟机的栈操作。具体的操作如下:

push value 5

push value 7

add

其具体处理为将5和7依次push进栈,再执行add求和操作,add求和操作则是把对应数字先pop出栈,经过加法计算后再将结果push进入栈,最后栈顶就留下了最后的操作结果12。

又如Jump指令,用于实现if/else等流程控制语法,可以跳转到对应指令;加减乘除指令,用于实现基本运算;逻辑运算指令,用于实现基本运算;移位指令,用于实现基本运算;OC方法call指令,用于调用OC的方法,虚拟机可以根据该指令利用OC Rumtine来实现调用。

进一步地,OC代码经过编译后将会生成汇编程序,汇编程序中则是汇编指令组合,在一个实施例中汇编程序内容如下:

address1:push value 1

address2:push value 2

address3:add

address4:jump address6

address6:call“someOCMethod”

……

Address100:end

通过该汇编程序,可以执行补丁文件对应的代码。

进一步地,在生成补丁汇编代码后,将关联的补丁关联数据写入内存数据段,并将补丁对应内存中的数据转换为二进制文件,从而获得二级制的补丁文件。具体地,生成补丁文件时,需要将文本指令转化为二进制指令code_data;需要一个函数表a_map记录补丁代码中定义的方法和地址的关系;需要记录数据段的大小data_size;需要全局区的大小zone_size;需要记录使用的架构arch;需要记录常量数据const,从而获得补丁关联数据。将补丁关联数据中的各个数据存入内存中相应的数据段,再将整一段内存转换为二进制文件,该文件则为最终需要的补丁文件,该文件可以上传到部署的服务器中,并提供给客户端下载,以根据补丁文件进行应用更新。

在客户端通过补丁文件对应用进行更新时,如图7所示,在加载补丁文件时,运行目标应用后,检测网络是否连接,若网络连接则从服务器获取补丁文件,在补丁文件下载成功后将补丁文件中的补丁汇编代码映射至虚拟机的内存中,确定架构是否正确,若是,则将补丁文件中的补丁关联数据加载至内存,从而实现将补丁文件加载至虚拟机中,以在虚拟机中执行补丁文件。具体地,目标应用运行后,检查服务器是否存在补丁,且补丁是否适用于当前系统版本与应用版本,且补丁是否已过期,当检查都通过时,则直接下载补丁,并在下载完成后对补丁进行哈希算法校验,如进行MD5(MD5 Message-Digest Algorithm,MD5信息摘要算法)校验,校验成功后将会对补丁进行加载。

通过应用创建虚拟机,创建的虚拟机用于给补丁文件创建运行环境,具体可以在应用直接创建虚拟机。由于在iOS系统上,代码无法随意标记为可执行,所以动态下发的代码因为没有执行权限导致无法iOS系统上直接运行。通过构建虚拟机,提供了一个虚拟环境,在其中能够运行OC代码,当补丁文件加载到虚拟机后,就能够拥有执行权限,进而执行补丁代码,实现对应用进行更新。在开始加载时,应用内内置的虚拟机会先将补丁文件中的补丁汇编代码映射到内存中,进一步获取补丁文件的arch字段,与当前系统架构进行匹配,如果匹配成功则继续加载。再获取补丁文件的zone_size字段,并申请一段对应大小的内存,以将各个数据段加载进内存,包括const、a_map、code_data等字段数据,从而实现对补丁文件的加载,虚拟机可以对补丁文件进行执行操作。

当需要执行补丁文件时,例如当某一模块出现错误(如数组越界等问题)时,应用进入到该模块相关页面时会闪退,这时则需要下发补丁文件,针对该模块进行修复(如修复数组越界的问题),当应用拉取并加载到补丁文件后,再进入该模块相关页面时将能正常使用,不会出现闪退,从而应用闪退问题,实现了应用的热修复能力。又如,当需要下发紧急的动态运营活动时,可以利用补丁文件,新增相关需求代码,用户无需更新应用,就可以在对应页面中查看到新增的动态运营需求。如图8所示,对于应用中开场白的界面,通过补丁文件可以实现页面布局的更新,以及页面资源内容的更新。图8中,更新前的开场白设置界面,包括个人录音、助理语音的开场白功能;而更新后页面的布局发生对应改变,开场白设置界面包括明显开场白、个人录音等开场白功能。

具体地,执行补丁文件时,若需要通过原生侧的原OC代码调用虚拟机方法时,如图9所示,OC代码通过一个虚拟机方法,向虚拟机传入需要调用的函数名称与参数,虚拟机能够执行并返回结果。具体地,虚拟机接收到函数名时,会查找补丁文件中的a_map(记录了补丁代码中定义的方法与地址),找到对应函数名的方法与地址,并将传入的参数地址对应的数据加入操作栈中,开始执行该方法的汇编指令。虚拟机执行完该方法所有的汇编指令后,将会把操作栈中的返回值拷贝到调用者的返回值地址处,从而实现了OC调用虚拟机方法的操作。其中,原生侧为运行目标应用的操作平台侧。

若需要通过虚拟机调用OC方法时,如图10所示,虚拟机收到类的一个方法调用,会先去a_map中查找是否为虚拟机定义的方法,如果不是,则在查找该类,并执行该类中对应的函数,并将参数传入,在原生侧开始执行原生的OC代码,原生OC代码执行完毕后,将结果返回到虚拟机,并交由对应代码执行。

若需要实现虚拟机方法中的相互调用,如图11所示,在虚拟机之前调用,先在方法调用时在a_map中进行查找,查找到函数后进行执行,并获取返回结果即可。若需要通过虚拟机替代OC方法,如图12所示,如果某个类的某个方法需要替换,其本质上也是OC/虚拟机来调用虚拟机方法,当需要调用时,将先去查找a_map中是否存在对应函数,如果存在,则将该方法的调用利用OC Runtime的运行时特性进行转向,虚拟机中取出其中参数,并调用到相应的虚拟机方法,最后将返回值返回给OC Runtime,再把结果返回复制到原方法的返回结果中,从而实现了调用方法的替代过程。

本实施例中,采用直接使用OC编写补丁文件,通过自定义的Clang编译器,将文件编译成特定的补丁文件,并在应用内创建的虚拟机解析与执行补丁文件中的指令,利用Objective-C语言的运行时特性,执行相关补丁代码,从而达到iOS上实现动态化更新与修复管理的功能。在应用更新过程中,避免了JS与OC之间的频繁代码转换,可以直接操作内存地址,调用效率十分高,近似于原生代码调用,而且开发者基于OC编写补丁文件,能够提高补丁文件生成效率。此外,应用更新过程中减少了补丁的调用链路,能够准确定位问题,且采用ARC内存管理,与原生的内存管理机制一致,减少由于内存问题导致的崩溃问题。

应该理解的是,虽然图2、图3、图4、图6和图7的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、图3、图4、图6和图7中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图13所示,提供了一种应用更新装置1300,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:应用运行模块1302、补丁文件获取模块1304、虚拟运行环境创建模块1306和补丁文件执行模块1308,其中:

应用运行模块1302,用于在操作平台上运行目标应用;

补丁文件获取模块1304,用于当满足目标应用的更新条件时,获取针对目标应用的补丁文件;其中,补丁文件具备在执行时与目标应用进行代码直接调用的能力;

虚拟运行环境创建模块1306,用于当补丁文件不具有在操作平台执行的执行权限时,通过目标应用创建虚拟运行环境;

补丁文件执行模块1308,用于在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。

上述应用更新装置,在满足操作平台上运行的目标应用的更新条件时,获取具备在执行时与目标应用进行代码直接调用的能力的补丁文件,在补丁文件不具有在操作平台执行的执行权限时,在通过目标应用创建的虚拟运行环境中执行补丁文件,并在执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。在应用更新过程中,通过创建虚拟运行环境执行不具有在操作平台执行的执行权限的补丁文件,且补丁文件具备在执行时与目标应用进行代码直接调用的能力,可以与目标应用进行代码直接调用,不需要进行代码转换,从而利用补丁文件实现了在不具有执行权限的操作平台上应用的动态化更新,提高了应用的更新效率。

在一个实施例中,补丁文件执行模块1308包括目标调用参数确定模块、目标执行结果获取模块和目标执行结果处理模块;其中:目标调用参数确定模块,用于当通过虚拟运行环境接收到目标应用的代码直接调用请求时,确定目标调用参数;目标执行结果获取模块,用于在虚拟运行环境中,根据目标调用参数执行补丁文件,获得目标执行结果;目标执行结果处理模块,用于通过虚拟运行环境将目标执行结果返回至目标应用,以对目标应用进行更新。

在一个实施例中,目标调用参数包括函数名和函数参数;目标执行结果获取模块包括方法地址映射关系确定模块、方法地址获取模块和方法指令执行模块;其中:方法地址映射关系确定模块,用于通过虚拟运行环境,根据补丁文件中的补丁关联数据,确定补丁文件关联的方法地址映射关系;方法地址获取模块,用于根据方法地址映射关系,从补丁文件中获取函数名对应的方法和地址;方法指令执行模块,用于在虚拟运行环境中,根据函数参数和地址执行方法对应的指令,获得目标执行结果。

在一个实施例中,补丁文件执行模块1308包括直接调用请求发送模块、目标执行结果获取模块和目标执行结果执行模块;其中:直接调用请求发送模块,用于通过虚拟运行环境向目标应用发送代码直接调用请求;代码直接调用请求,用于指示目标应用执行代码直接调用请求相应的指令;目标执行结果获取模块,用于获取目标应用执行代码直接调用请求相应的指令所获得的目标执行结果;目标执行结果执行模块,用于在虚拟运行环境中,基于目标执行结果执行补丁文件,以对目标应用进行更新。

在一个实施例中,还包括补丁关联数据处理模块、函数确定模块和请求生成模块;其中:补丁关联数据处理模块,用于通过虚拟运行环境,根据补丁文件中的补丁关联数据,确定补丁文件关联的方法地址映射关系;函数确定模块,用于当方法地址映射关系不包括当前调用方法时,确定当前调用方法对应的函数名和函数参数;请求生成模块,用于基于函数名和函数参数生成代码直接调用请求;代码直接调用请求,用于指示目标应用根据函数名和函数参数执行当前调用方法对应的指令。

在一个实施例中,还包括方法函数确定模块、目标方法地址获取模块和目标方法地址处理模块;其中:方法函数确定模块,用于在虚拟运行环境中执行补丁文件、且补丁文件关联的方法地址映射关系中包括当前调用方法时,确定当前调用方法对应的函数名和函数参数;目标方法地址获取模块,用于根据方法地址映射关系,从补丁文件中获取函数名对应的方法和地址;目标方法地址处理模块,用于在虚拟运行环境中,根据函数参数和地址执行方法对应的指令,以对目标应用进行更新。

在一个实施例中,还包括替换函数确定模块、替换方法确定模块、替换执行结果获得模块和替换执行结果处理模块;其中:替换函数确定模块,用于在虚拟运行环境中执行补丁文件、且补丁文件关联的方法地址映射关系中包括目标替换调用方法时,确定目标替换调用方法对应的替换函数名和函数参数;替换方法确定模块,用于根据方法地址映射关系,从补丁文件中获取替换函数名对应的替换方法和替换地址;替换执行结果获得模块,用于在虚拟运行环境中,根据函数参数和替换地址执行替换方法对应的指令,得到替换执行结果;替换执行结果处理模块,用于将替换执行结果返回至目标替换调用方法对应的替换请求端,以对目标应用进行更新。

在一个实施例中,还包括指令文件加载模块、架构参数确定模块和关联数据加载模块;其中:指令文件加载模块,用于将补丁文件中的补丁指令文件加载至虚拟运行环境中;架构参数确定模块,用于确定补丁文件对应的架构参数;关联数据加载模块,用于当架构参数与操作平台对应的平台架构参数匹配时,将补丁文件中的补丁关联数据加载至虚拟运行环境中。

在一个实施例中,还包括补丁代码获取模块、编译处理模块和补丁文件生成模块;其中:补丁代码获取模块,用于获取通过目标编程语言编制的针对目标应用的补丁代码;目标编程语言编制的代码具备在执行时与目标应用进行代码直接调用的能力;编译处理模块,用于基于指令集对补丁代码进行编译处理,得到补丁指令文件;补丁文件生成模块,用于根据补丁指令文件生成针对目标应用的补丁文件。

在一个实施例中,编译处理模块包括预编译模块、分析模块和指令集编译模块;其中:预编译模块,用于对补丁代码进行预编译处理,得到预编译结果;分析模块,用于基于预编译结果依次进行词法分析和语法分析;获得分析结果;指令集编译模块,用于当分析结果为通过时,通过指令集对预编译结果进行编译处理,得到补丁指令文件。

在一个实施例中,补丁文件生成模块包括关联数据确定模块和数据打包模块;其中:关联数据确定模块,用于确定补丁指令文件对应的补丁关联数据;数据打包模块,用于根据补丁指令文件和补丁关联数据,生成针对目标应用的补丁文件。

在一个实施例中,补丁文件获取模块1304,还用于当检测到针对目标应用的更新任务时,从服务器获取针对目标应用且与操作平台的平台架构参数匹配的补丁文件;还包括校验模块,用于对补丁文件进行校验,当校验结果为校验通过时,执行在虚拟运行环境中执行补丁文件时,通过与目标应用进行代码直接调用,对目标应用进行更新。

关于应用更新装置的具体限定可以参见上文中对于应用更新方法的限定,在此不再赘述。上述应用更新装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图14所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种应用更新方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图14中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

技术分类

06120115961871