应用程序更新方法和装置、电子设备、机器可读存储介质与流程

文档序号:29356867发布日期:2022-03-23 00:15阅读:79来源:国知局
应用程序更新方法和装置、电子设备、机器可读存储介质与流程

1.本发明属于处理终端设备应用程序的技术领域,具体地讲,涉及一种应用程序更新方法、应用程序更新装置、电子设备及机器可读存储介质。


背景技术:

2.在金融业,尤其是银行业,满足各种业务需求的各种交易系统(或称交易应用程序)往往是部署在具有linux操作系统的计算机上的,并且这些交易系统通常是用c/c++、java等多种语言混合开发的复杂系统。在这些交易系统的运行过程中,不可避免会对这些交易系统进行更新,传统的更新方法是通过文件拷贝和进程重启的方式来完成更新。这样的更新方式虽然容易实施,但是都需要重启交易系统,因此只能在无业务或交易低谷期间进行交易系统的更新,如此会影响业务的连续性以及交易的成功率,从而降低交易系统的可靠性。


技术实现要素:

3.为了解决上述现有技术存在的问题,本发明提供了一种在应用程序运行时实时对应用程序进行更新的应用程序更新方法和装置。
4.根据本发明的实施例的一方面提供的应用程序更新方法,其包括:在所述应用程序的运行过程中,在第一语言环境下开启更新进程;在所述更新进程中,通过预设的接口调用由第二语言实现的更新函数来对正在运行的所述应用程序进行更新。
5.在上述一方面提供的应用程序更新方法的一个示例中,所述第一语言为java,所述第二语言为c/c++,所述预设的接口为java本地接口。
6.在上述一方面提供的应用程序更新方法的一个示例中,所述在第一语言环境下开启更新进程,包括:利用代理进程连接java虚拟机;利用所述java虚拟机根据更新进程标识符寻找到更新进程;利用所述代理进程连接所述更新进程,以开启所述更新进程。
7.在上述一方面提供的应用程序更新方法的一个示例中,所述通过预设的接口调用由第二语言实现的更新函数,包括:在java类中加载指定c文件编译后生成的库文件,所述指定c文件包含由c/c++实现的更新函数且所述c文件中引入了头文件,所述java类负责所述应用程序的更新且所述java类中声明了所述更新函数;在所述java类的所述更新进程中,直接调用所述更新函数。
8.在上述一方面提供的应用程序更新方法的一个示例中,所述在java类中加载指定c文件编译后生成的库文件,包括:从父类加载器到子类加载器依次被调用,直至加载器检索到指定的所述java类,在指定的所述java类中加载指定c文件编译后生成的库文件。
9.在上述一方面提供的应用程序更新方法的一个示例中,所述java类中包含更新控制标志位,所述更新控制标志位用于使所述应用程序的更新仅被执行一次。
10.根据本发明的实施例的另一方面提供的应用程序更新装置,其包括:进程控制模块,用于在所述应用程序的运行过程中,在第一语言环境下开启更新进程;更新执行模块,
用于在所述更新进程中,通过预设的接口调用由第二语言实现的更新函数来对正在运行的所述应用程序进行更新。
11.在上述一方面提供的应用程序更新装置的一个示例中,所述第一语言为java,所述第二语言为c/c++,所述预设的接口为java本地接口。
12.根据本发明的实施例的再一方面提供了一种电子设备,其包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的应用程序的更新程序,所述应用程序的更新程序被所述处理器执行时实现如上所述的应用程序更新方法。
13.根据本发明的实施例的又一方面提供了一种机器可读存储介质,其中,所述机器可读存储介质上存储有应用程序的更新程序,所述应用程序的更新程序被处理器执行时实现如上所述的应用程序更新方法。
14.有益效果:在根据本发明的更新方法和更新装置中,可以在应用程序运行时实时对应用程序进行更新,从而应用程序的运行连续性得以保持,进而提高应用程序的可靠性。
附图说明
15.通过结合附图进行的以下描述,本发明的实施例的上述和其它方面、特点和优点将变得更加清楚,附图中:
16.图1是根据本发明的实施例的应用程序更新方法的流程图;
17.图2是根据本发明的实施例的通过预设的接口调用由第二语言实现的更新函数的方法的流程图;
18.图3是根据本发明的实施例的应用程序更新装置的模块图;
19.图4是根据本发明的实施例的更新执行模块的单元图;
20.图5是根据本发明的实施例的电子设备的方框图。
具体实施方式
21.以下,将参照附图来详细描述本发明的具体实施例。然而,可以以许多不同的形式来实施本发明,并且本发明不应该被解释为限制于这里阐述的具体实施例。相反,提供这些实施例是为了解释本发明的原理及其实际应用,从而使本领域的其他技术人员能够理解本发明的各种实施例和适合于特定预期应用的各种修改。
22.如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”、“根据”等表示“至少部分地基于”、“至少部分地根据”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
23.如背景技术所述,现有的安装在计算机等上的应用程序在运行过程中,不可避免会对这些应用程序进行更新,传统的更新方法是通过文件拷贝和进程重启的方式来完成更新。这样的更新方式虽然容易实施,但是都需要重启应用程序,因此只能在特殊时期(例如不使用应用程序等)进行应用程序的更新,如此会影响应用程序的运行连续性,从而降低应用程序的可靠性。
24.以金融业的交易系统为例,在金融行业中满足各种业务需求的各种交易系统(或
称交易应用程序)往往是部署在具有linux操作系统的计算机上的,并且这些交易系统通常是用c/c++、java等多种语言混合开发的复杂系统。在这些交易系统的运行过程中,不可避免会对这些交易系统进行更新,传统的更新方法是通过文件拷贝和进程重启的方式来完成这些交易系统的更新。然而,这样的更新方式虽然容易实施,但是都需要重启交易系统,因此只能在无业务或交易低谷期间进行交易系统的更新,如此会影响业务的连续性以及交易的成功率,从而降低交易系统的可靠性。
25.为了实现随时更新应用程序时应用程序不停止运行,根据本发明的实施例提供了一种应用程序更新方法和应用程序更新装置。该更新方法包括:在应用程序的运行过程中,在第一语言环境下开启更新进程;在更新进程中,通过预设的接口调用由第二语言实现的更新函数来对正在运行的应用程序进行更新。
26.因此,在该更新方法中,可以在应用程序运行时实时对应用程序进行更新,从而应用程序的运行连续性得以保持,进而提高应用程序的可靠性。在这种情况下,对于应用于金融业的交易系统,这些交易系统在发布新功能或者修复bug等时,可以在交易系统正常运行过程中实时完成更新,从而交易系统可以不中断服务,保持服务的连续性和稳定性。
27.以下将结合附图来详细描述根据本发明的实施例的应用程序更新方法和应用程序更新装置。
28.根据本发明的实施例的应用程序更新方法可以由智能手机、平板电脑、个人计算机等终端设备执行,也可以由云服务器、服务器等服务端设备执行。
29.图1是根据本发明的实施例的应用程序更新方法的流程图。参照图1,根据本发明的实施例的应用程序更新方法包括:
30.在步骤s101中,在应用程序的运行过程中,在第一语言环境下开启该应用程序的更新进程。
31.在一个示例中,由java开发的交易系统从agentmain方法启动运行之后,首先,代理进程连接jvm(java虚拟机)。
32.其次,利用java虚拟机根据更新进程标识符查找到更新进程。
33.最后,利用代理进程连接(attach)更新进程后,调用redefineclass方法,触发并启动更新进程。
34.在步骤s103中,在所述更新进程中,通过预设的接口调用由第二语言实现的更新函数来对正在运行的所述应用程序进行更新。
35.在本实施例中,使用预设的接口实现两种语言环境的融合。对于预设的接口的具体实现形式本实施例并不进行具体限制。
36.在一个示例中,所述第一语言为java,所述第二语言为c/c++,所述预设的接口为java本地接口jni。
37.例如,在金融业,部署在具有linux操作系统的设备上的各种交易系统(或称交易应用程序)往往是由java开发的复杂系统。而由于某些原因,交易系统的更新的底层代码会使用native语言(例如c/c++语言,c/c++等语言相对于java来讲可称为native语言)来实现,所以交易应用程序的更新就会涉及到native语言层与java层之间的通信。
38.而jni(java native interface,java本地接口)是java提供的一个重要的功能,它使得用诸如c/c++等语言编写的代码可以与运行于jvm中的java代码集成。jni能满足开
发者在java代码中访问native模块的需求。jni的出现使得开发者既可以利用java语言跨平台、类库丰富、开发便捷等特点,又可以利用native语言的高效。
39.事实上,jni是jvm实现中的一部分,因此native语言和java代码都运行在jvm的宿主环境。此外,jni是一个双向的接口,开发者不仅可以通过jni在java代码中访问native模块,还可以在native代码中嵌入一个jvm,并通过jni访问运行于其中的java模块。可见,jni担任了一个桥梁的角色,它将jvm与native模块联系起来,从而实现了java代码与native代码的互访。
40.图2是根据本发明的实施例的通过预设的接口调用由第二语言实现的更新函数的方法的流程图。
41.参照图2,根据本发明的实施例的通过预设的接口调用由第二语言实现的更新函数,包括:
42.在步骤s202中,在java类中加载指定c文件编译后生成的库文件,所述指定c文件包含由c/c++实现的更新函数且所述c文件中引入了头文件,所述java类负责所述应用程序的更新且所述java类中声明了所述更新函数。
43.在一个示例中,首先,在用于进行应用程序更新的java类中声明一个native函数。
44.其次,使用c/c++语言实现上述native函数。该native函数用于完成对应用程序进行更新的具体工作。
45.再者,创建jni目录(如果已有可直接使用),在jni目录下创建一个c文件,并在该c文件中包含上述native函数,并引入jni.h头文件。
46.接着,使上述c文件可以被编译。编译会自动生成.so文件和.dll文件等库文件。
47.接着,在上述用于进行应用程序更新的java类中加载所述c文件。这样,可以直接调用上述native函数对应用程序进行更新。在一个示例中,从父类加载器到子类加载器依次被调用,直至加载器检索到指定的java类(即用于进行应用程序更新的java类),在指定的java类中加载所述c文件编译后生成的库文件。
48.在步骤s204中,在所述java类的所述更新进程中,直接调用所述更新函数。
49.衔接上述一个示例,最后,在该更新进程中,将相应应用程序的路径等信息作为参数,直接调用上述native函数,从而实现对应用程序的更新。
50.此外,在一个示例中,为了使应用程序的更新仅执行一次,所述java类中包含有更新控制标志位。此更新控制标志位初始值可以为true,而在执行载入库文件后值变为false,如此可以保障了应用程序的更新执行且仅执行一次。
51.图3是根据本发明的实施例的应用程序更新装置的模块图。根据本发明的实施例的应用程序更新装置可以应用于智能手机、平板电脑、个人计算机等终端设备中,也可以应用于云服务器、服务器等服务端设备中。
52.参照图3,根据本发明的实施例的应用程序更新装置包括:进程控制模块310、更新执行模块320。
53.进程控制模块310被配置为在应用程序的运行过程中,在第一语言环境下开启该应用程序的更新进程。进一步地,进程控制模块310可以包括:连接单元、查找单元以及触发启动单元。
54.在一个示例中,由java开发的交易系统从agentmain方法启动运行之后,该连接单
元用于利用代理进程连接jvm(java虚拟机);该查找单元用于利用java虚拟机根据更新进程标识符查找到更新进程;该触发启动单元用于利用代理进程连接(attach)更新进程后,调用redefineclass方法,触发并启动更新进程。
55.更新执行模块320被配置为在所述更新进程中,通过预设的接口调用由第二语言实现的更新函数来对正在运行的所述应用程序进行更新。
56.这里,使用预设的接口实现两种语言环境的融合。因此,对于预设的接口的具体实现形式本实施例并不进行具体限制。
57.在一个示例中,所述第一语言为java,所述第二语言为c/c++,所述预设的接口为java本地接口jni。
58.图4是根据本发明的实施例的更新执行模块的单元图。
59.参照图4,根据本发明的实施例的更新执行模块320包括:加载单元321、调用更新单元322。
60.加载单元321被配置为在java类中加载指定c文件编译后生成的库文件,所述指定c文件包含由c/c++实现的更新函数且所述c文件中引入了头文件,所述java类负责所述应用程序的更新且所述java类中声明了所述更新函数。
61.在一个示例中,首先,加载单元321在用于进行应用程序更新的java类中声明一个native函数。
62.其次,加载单元321使用c/c++语言实现上述native函数。该native函数用于完成对应用程序进行更新的具体工作。
63.再者,加载单元321创建jni目录(如果已有可直接使用),并在jni目录下创建一个c文件,并在该c文件中包含上述native函数,并引入jni.h头文件。
64.接着,加载单元321编译上述c文件,以自动生成.so文件和.dll文件等库文件。
65.接着,加载单元321在上述用于进行应用程序更新的java类中加载所述c文件。这样,上述native函数可以直接被调用以对应用程序进行更新。
66.调用更新单元322被配置为在所述java类的所述更新进程中,直接调用所述更新函数。
67.衔接上述一个示例,最后,在该更新进程中,调用更新单元322将相应应用程序的路径等信息作为参数,直接调用上述native函数,从而实现对应用程序的更新。
68.以上参照图1到图4对根据本发明的实施例的应用程序更新方法和应用程序更新装置进行了描述。
69.根据本发明的实施例的应用程序更新装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将存储器中对应的计算机程序指令读取到内存中运行形成的。在本发明的实施例中,使用进行应用程序更新的装置例如可以利用电子设备来实现。在本发明的实施例中,电子设备例如可以是智能手机、平板电脑、个人计算机等终端设备中,也可以是云服务器、服务器等服务端设备中。
70.图5是根据本发明的实施例的电子设备的方框图。
71.参照图5,电子设备500可以包括至少一个处理器510、存储器(例如,非易失性存储器)520、内存530和通信接口540,并且至少一个处理器510、存储器520、内存530和通信接口
540经由总线550连接在一起。至少一个处理器510执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
72.在一个示例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器510执行以下过程:在应用程序的运行过程中,在第一语言环境下开启更新进程;在更新进程中,通过预设的接口调用由第二语言实现的更新函数来对正在运行的应用程序进行更新。
73.应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器510在进行根据本发明的各实施例中结合以上图1至图4描述的各种操作和功能。
74.在示例性实施例中,上述装置和/或设备可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件是瞎inn,用于执行上述方法。
75.根据一个实施例,提供了一种例如机器可读介质的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本发明的各实施例中结合以上图1至图4描述的各种操作和功能。
76.具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任何一个实施例的功能的软件程序代码,且使该系统或者装置的机器或处理器读出并执行存储在该可读存储介质中的指令。
77.在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的实施例的一部分。
78.可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-ram、dvd-rw、dvd-rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
79.上述对本发明的特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
80.上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
81.在整个本说明书中使用的术语“示例性”、“示例”等意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
82.以上结合附图详细描述了本发明的实施例的可选实施方式,但是,本发明的实施例并不限于上述实施方式中的具体细节,在本发明的实施例的技术构思范围内,可以对本发明的实施例的技术方案进行多种简单变型,这些简单变型均属于本发明的实施例的保护范围。
83.本说明书内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本说明书内容。对于本领域普通技术人员来说,对本说明书内容进行的各种修改是显而易见的,并且,也可以在不脱离本说明书内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本说明书内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1