基于安卓系统的应用程序热更新方法及装置与流程

未命名 08-18 阅读:108 评论:0


1.本技术涉及计算机技术领域,具体涉及一种基于安卓系统的应用程序热更新方法及装置。


背景技术:

2.应用程序(app)热更新是指:在app上线以后发现有缺陷了,如果重新走发布流程可能时间比较长,重新安装app用户体验也不会太好,此时可以通过发布一个更新包,使app运行的时候加载更新包里面的代码,从而解决缺陷,并且对于用户来说是无感的。
3.目前,基于安卓系统的应用程序热更新采用类加载方案的主要是以腾讯系为主,包括微信的tinker、饿了么的amigo等;采用底层替换方案的主要是阿里系的andfix等,还有就是兼顾底层替换与类加载模式的sophix方案。
4.但是,sophix不支持对四大组件的修复,amigo虽然支持四大组件新增修复,但是需要引入全量包补丁,比较消耗资源,其他方案相比较问题更为严重。


技术实现要素:

5.针对现有技术中的问题,本技术实施例提供一种基于安卓系统的应用程序热更新方法及装置,能够至少部分地解决现有技术中存在的问题。
6.一方面,本技术提出一种基于安卓系统的应用程序热更新方法,包括:
7.在本地运行第一版本的目标应用程序时,获取目标差分包,所述目标差分包是根据第一版本的目标应用程序的安装包和第二版本的目标应用程序的安装包生成的;
8.根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包;
9.根据所述目标差分包和所述第二版本的目标应用程序的安装包,获取所述第二版本的目标应用程序中的预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系;
10.将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中。
11.在一些实施例中,所述目标差分包是利用目标差分算法工具对所述第一版本的目标应用程序的安装包和所述第二版本的目标应用程序的安装包进行对比后,生成控制文件、差异文件和新增文件,然后将控制文件、差异文件和新增文件进行压缩后生成的。
12.在一些实施例中,所述根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包包括:
13.根据所述目标差分包中的控制文件和差异文件在所述第一版本的目标应用程序的安装包中添加差异信息,根据所述差分包中的控制文件和新增文件在所述第一版本的目标应用程序的安装包中添加新增信息,生成第二版本的目标应用程序的安装包;
14.将所述第二版本的目标应用程序的安装包保存在所述目标应用程序的私有目录
下。
15.在一些实施例中,在根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包之后,所述方法还包括:
16.将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下。
17.在一些实施例中,将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下之后,所述方法还包括:
18.对所述第二版本的目标应用程序的安装包进行编译,生成安卓虚拟机art可直接执行的oat文件;
19.将所述oat文件保存在所述目标应用程序的私有目录下。
20.在一些实施例中,在将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中之后,所述方法还包括:
21.在本地缓存中写入一用于记录目标应用程序热更新安装已完成并激活的标记信息。
22.在一些实施例中,在将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在本地之后,所述方法还包括:
23.根据针对所述目标应用程序的启动请求,校验本地缓存中是否具有所述标记信息;
24.若本地缓存中具有所述标记信息,则加载所述第二版本的目标应用程序的安装包。
25.在一些实施例中,所述方法还包括:
26.在启动所述第二版本的目标应用程序中的预埋桩组件时,判断所述映射关系文件中是否具有与所述预埋桩组件具有映射关系的新增组件;
27.若所述映射关系文件中具有与所述预埋桩组件具有映射关系的新增组件,则将所述预埋桩组件替换为所述新增组件进行启动;和/或
28.在启动所述第二版本的目标应用程序中的预埋桩组件时,判断所述映射关系文件中是否具有与所述预埋桩组件具有映射关系的新增组件;
29.若所述映射关系文件中具有与所述预埋桩进程具有映射关系的新增进程,则将所述预埋桩进程替换为所述新增进程进行启动。
30.另一方面,本技术提出一种基于安卓系统的应用程序热更新装置,包括:
31.第一获取模块,用于在本地运行第一版本的目标应用程序时,获取目标差分包,所述目标差分包是根据第一版本的目标应用程序的安装包和第二版本的目标应用程序的安装包生成的;
32.生成模块,用于根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包;
33.第二获取模块,用于根据所述目标差分包和所述第二版本的目标应用程序的安装包,获取所述第二版本的目标应用程序中的预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系;
34.保存模块,用于将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程
与新增进程之间的映射关系保存在目标映射关系文件中。
35.本技术实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述的基于安卓系统的应用程序热更新方法的步骤。
36.本技术实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一实施例所述的基于安卓系统的应用程序热更新方法的步骤。
37.本技术实施例提供的基于安卓系统的应用程序热更新方法及装置,首先获取目标差分包,然后根据目标差分包及第一版本的安装包在本地合成第二版本的安装包,最后静默安装第二版本的安装包并保存所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系,这样,在保证补丁较小的前提下还能够完成对安卓四大组件的新增、修改,同时保证资源消耗较小。对于终端设备app更新来说,相比应用市场更新,可提供用户无需下载安装的无痕快捷app更新,同时减少更新带来的流量和内存消耗。
附图说明
38.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
39.图1是本技术一实施例提供的基于安卓系统的应用程序热更新方法的整体流程示意图。
40.图2是本技术一实施例提供的基于安卓系统的应用程序热更新方法的流程示意图。
41.图3是本技术一实施例提供的新版本apk和旧版本apk文件的结构图。
42.图4是本技术一实施例提供的基于安卓系统的应用程序热更新方法的部分流程示意图。
43.图5是本技术一实施例提供的基于安卓系统的应用程序热更新方法的部分流程示意图。
44.图6是本技术一实施例提供的基于安卓系统的应用程序热更新方法的部分流程示意图。
45.图7是本技术一实施例提供的新增活动的加载流程示意图。
46.图8是本技术一实施例提供的基于安卓系统的应用程序热更新装置的结构示意图。
47.图9是本技术一实施例提供的电子设备的实体结构示意图。
具体实施方式
48.为使本技术实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本技术实施例做进一步详细说明。在此,本技术的示意性实施例及其说明用于解释本技术,但并不作为对本技术的限定。需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中
的特征可以相互任意排序。
49.关于本文中所使用的“第一”、“第二”、
……
等,并非特别指称次序或顺位的意思,亦非用以限定本技术,其仅为了区别以相同技术用语描述的元件或操作。
50.关于本文中所使用的“包含”、“包括”、“具有”、“含有”等等,均为开放性的用语,即意指包含但不限于。
51.关于本文中所使用的“及/或”,包括所述事物的任一或全部排序。
52.组件:应用程序组件是一个android应用程序的基本构建块。这些组件由应用清单文件松耦合的组织。androidmanifest.xml描述了应用程序的每个组件,以及他们如何交互。android包含四类组件,分别是activity、service、contentprovider、broadcastreceiver。
53.继承:是面向对象软件技术当中的一个概念。如果一个类b“继承自”另一个类a,就把这个b称为“a的子类”,而把a称为“b的父类”也可以称“a是b的超类”。继承可以使得子类具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。另外,为子类追加新的属性和方法也是常见的做法。一般静态的面向对象编程语言,继承属于静态的,意即在子类的行为在编译期就已经决定,无法在执行期扩展。
54.父类:存在继承关系的两个类中,被继承的类即是父类,继承的类即是子类。
55.函数插桩:向目标程序代码中某些位置插入或修改成一些代码,从而在目标程序运行过程中获取某些程序状态并加以分析。简单来说就是在代码中插入代码。
56.hook:函数钩子,目的就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件。而代理模式正好可以做到这种效果。
57.dex2oat:dex2oat是一个可执行程序,作用是编译dex文件,生成安卓虚拟机art可以直接执行的oat文件。
58.androidmanifest.xml:应用清单,每个应用的根目录中都必须包含一个。这个文件中包含了app的配置信息,系统需要根据里面的内容运行app的代码,显示界面。
59.application:android框架的一个系统组件,当android程序启动时系统会创建一个application对象,用来存储系统的一些信息。通常我们是不需要指定一个application的,这时系统会自动帮我们创建,如果需要创建自己的application,也很简单创建一个类继承application并在manifest的application标签中进行注册(只需要给application标签增加个name属性把自己的application的名字定入即可)。android系统会为每个程序运行时创建一个application类的对象且仅创建一个,所以application可以说是单例(singleton)模式的一个类.且application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。通过application可以来进行一些数据传递、数据共享、数据缓存等操作。
60.loadedapk:apk文件在内存中的表示。apk文件的相关信息,诸如apk文件的代码和资源,甚至代码里面的activity等组件的信息我们都可以通过此对象获取。
61.activity:android四大组件之一,用于显示界面元素和相关逻辑流程。
62.activitymanager:android框架的一个重要部分。它负责一新activitythread进程创建,activity生命周期的维护,管理系统中的acitvity的状态切换。
63.activitythread:android app进程的初始类,它的main函数是这个app进程的入口。app进程中ui事件的执行代码段都是由activitythread提供的。
64.为更好的理解本技术,以下先对本技术提供的基于安卓系统的应用程序热更新方法的整体流程进行介绍。
65.应用程序热更新首先需要生成差分包,把差分包上传到服务器,终端设备运行旧版本app时会检查下载差分包并在本地合成新版本apk,然后静默安装新apk,待用户重启app时加载新apk信息。整体流程如图1所示。本技术提供的方案可以完成对android四大组件的增加和修改,而实现成本较低,对应用工程的改造较小,在app小版本更新或修复已知问题时,可采用此技术方案来更新app,而不需要上传应用市场全量的安装包,实现无痕快捷的app更新。
66.图2是本技术一实施例提供的基于安卓系统的应用程序热更新方法的流程示意图,如图2所示,本技术实施例提供的基于安卓系统的应用程序热更新方法,包括:
67.s101、在本地运行第一版本的目标应用程序时,获取目标差分包,所述目标差分包是根据第一版本的目标应用程序的安装包和第二版本的目标应用程序的安装包生成的;
68.步骤s101中,对于所述目标应用程序而言,第二版本的目标应用程序可以是指新版本的目标应用程序,第一版本的目标应用程序可以是指旧版本的目标应用程序。具有安卓操作系统的终端设备在本地运行第一版本的目标应用程序时,检查存在可以更新的新版本,然后从服务器下载目标差分包。所述目标差分包可以是使用差分算法工具对比第一版本的目标应用程序的安装包和第二版本的目标应用程序的安装包后生成的。
69.s102、根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包;
70.步骤s102中,以第一版本的目标应用程序的安装包和所述目标差分包为原料,合成第二版本安装包,并将所述第二版本的安装包保存在本地,例如保存在该目标应用程序的私有目录/data/data/包名/files/.newapk文件夹中。
71.s103、根据所述目标差分包和所述第二版本的目标应用程序的安装包,获取所述第二版本的目标应用程序中的预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系;
72.步骤s103中,所述目标应用程序的应用工程代码中预先添加(预埋)一些四大组件桩进行预先占位,用于在有新增组件和进程的情况下将其替换到预埋桩中。在本地保存所述第二版本的目标应用程序的安装包之后,在所述目标差分包获取新增组件以及新增进程,在所述第二版本的目标应用程序的安装包获取预埋桩组件以及预埋桩进程,并为新增组件以及新增进程分别分配相应的预埋桩组件以及预埋桩进程,得到预埋桩组件与新增组件之间的映射关系以及预埋桩进程与新增进程之间的映射关系。
73.如图3所示,比如应用工程代码中已经预埋了占位活动组件(activity)b,实际添加了一个活动组件a,那么就记录一下a与b的联系关系,以保证在后续的加载过程中能将a替换b来实际使用。
74.s104、将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进
程之间的映射关系保存在目标映射关系文件中。
75.步骤s104中,将映射关系保存至一目标映射关系文件中,例如在所述第二版本的目标应用程序的安装包保存在该目标应用程序的私有目录/data/data/包名/files/.newapk文件夹中时,将所述映射关系保存至/data/data/包名/files/.newapk目录下的目标映射关系文件中。
76.本技术实施例提供的基于安卓系统的应用程序热更新方法,首先获取目标差分包,然后根据目标差分包及第一版本的安装包在本地合成第二版本的安装包,最后静默安装第二版本的安装包并保存所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系,这样,在保证补丁较小的前提下还能够完成对安卓四大组件的新增、修改,同时保证资源消耗较小。对于终端设备app更新来说,相比应用市场更新,可提供用户无需下载安装的无痕快捷app更新,同时减少更新带来的流量和内存消耗。
77.在一些实施例中,所述目标差分包是利用目标差分算法工具对所述第一版本的目标应用程序的安装包和所述第二版本的目标应用程序的安装包进行对比后,生成控制文件、差异文件和新增文件,然后将控制文件、差异文件和新增文件进行压缩后生成的。
78.具体来讲,可以使用开源的hdiffpatch差分算法工具对比第一版本和第二版本的安装包,生成控制文件、差异文件和新增文件,其中控制文件包含需要添加和插入二进制数据段的指引信息(“添加”是从差异文件中读取适当字节二进制数据,“插入”则是从新增文件中读取适当二进制数据),差异文件包含近似匹配字段的字节差异,新增文件包含无法近似匹配的完全不同的字段,将三类文件压缩生成差分包。
79.如图4所示,在一些实施例中,所述根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包包括:
80.s1021、根据所述目标差分包中的控制文件和差异文件在所述第一版本的目标应用程序的安装包中添加差异信息,根据所述差分包中的控制文件和新增文件在所述第一版本的目标应用程序的安装包中添加新增信息,生成第二版本的目标应用程序的安装包;
81.步骤s1021中,在将所述目标差分包下载到本地后,可以再次通过hdiffpatch工具,以第一版本安装包和目标差分包为原料,根据目标差分包中的控制文件“添加”差异部分、“插入”新增部分,合成第二版本apk。
82.s1022、将所述第二版本的目标应用程序的安装包保存在所述目标应用程序的私有目录下。
83.步骤s1022中,将第二版本的安装包保存在所述目标应用的私有目录下,例如保存至目标应用的私有目录/data/data/包名/files/.newapk文件夹中。
84.在一些实施例中,在根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包之后,所述方法还包括:将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下。
85.具体来讲,合并生成第二版本apk后,开始执行初始化静默安装:首先校验第一版本apk和第二版本apk的签名是否一致,一致则继续,否则终止;拷贝第二版本apk中的动态链接库文件(so)到所述目标应用程序的私有目录下,例如拷贝第二版本apk中的动态链接库文件(so)到所述目标应用程序的私有目录/data/data/包名/files/.newapk/so中。
86.如图5所述,在一些实施例中,将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下之后,所述方法还包括:
87.s105、对所述第二版本的目标应用程序的安装包进行编译,生成安卓虚拟机art可直接执行的oat文件;
88.s106、将所述oat文件保存在所述目标应用程序的私有目录下。
89.具体来讲,在将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下之后,自动触发系统对第二版本apk执行dex2oat生成编译产物—oat文件,以加速热更后的app启动性能。
90.在一些实施例中,在将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中之后,所述方法还包括:在本地缓存中写入一用于记录目标应用程序热更新安装已完成并激活的标记信息。
91.具体来讲,在完成热更新安装之后,向本地缓存写入一个标记,记录目标应用程序热更新安装已完成并激活,下一次app启动时将检查该标记以此判断是否执行热更新加载操作。
92.如图6所述,在一些实施例中,在将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在本地之后,所述方法还包括:
93.s107、根据针对所述目标应用程序的启动请求,校验本地缓存中是否具有所述标记信息;
94.s108、若本地缓存中具有所述标记信息,则加载所述第二版本的目标应用程序的安装包。
95.具体来讲,在完成上述安装过程后,app重启时检查本地缓存中是否具有所述标记信息,若具有,则加载所述第二版本的目标应用程序的安装包。
96.在一些实施例中,所述方法还包括:
97.在启动所述第二版本的目标应用程序中的预埋桩组件时,判断所述映射关系文件中是否具有与所述预埋桩组件具有映射关系的新增组件;若所述映射关系文件中具有与所述预埋桩组件具有映射关系的新增组件,则将所述预埋桩组件替换为所述新增组件进行启动;和/或
98.在启动所述第二版本的目标应用程序中的预埋桩组件时,判断所述映射关系文件中是否具有与所述预埋桩组件具有映射关系的新增组件;
99.若所述映射关系文件中具有与所述预埋桩进程具有映射关系的新增进程,则将所述预埋桩进程替换为所述新增进程进行启动。
100.具体来讲,目标应用程序的应用工程代码中添加了一个实现应用启动时进行热更新加载的应用类hotfixapplication,用于在app启动时加载第二版本的apk和执行额外的加载流程,第二版本的apk合成过程中的编译期利用函数插桩技术将hotfixapplication的父类修改为旧版本app的androidmanifest.xml中声明的application,然后替换androidmanifest.xml中声明的application为hotfixapplication。在热更新安装完成后,重启app时利用loadedapk.makeapplication方法生成新的hotfix application对象并替换掉原有的旧application对象;目标应用程序的应用工程代码中hook四大组件的启动流程,使得启动新增组件时在其启动方法内进行替桩操作。如图7所示,比如需要启动一个新
增的活动a,由于app在系统中注册的组件中不包括a,所以不能直接调用,首先hook activitymanager,通过预埋的活动b替换a来向系统提供需要启动的活动相关信息,待系统确定找到activity可以执行初始化流程时,再通过hook activitythread将b替换为a,执行a的初始化流程,从而实现启动a的目的。
101.由此可见,与现有的类加载方案和底层替换方案相比,本技术通过修改安卓app启动流程来初始化和加载新版本apk信息,从而实现app更新的效果,而现有方案均是利用不同技术在类级别上通过新类替换旧类来实现app更新的目的,实现原理不同。此外,本技术提供的方案由于是加载新版本apk,能够完成的更新范围和能力都比现有的类替换方案要强大。
102.图8是本技术一实施例提供的基于安卓系统的应用程序热更新装置的结构示意图,如图8所示,本技术实施例提供的基于安卓系统的应用程序热更新装置,包括:
103.第一获取模块21,用于在本地运行第一版本的目标应用程序时,获取目标差分包,所述目标差分包是根据第一版本的目标应用程序的安装包和第二版本的目标应用程序的安装包生成的;
104.生成模块22,用于根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包;
105.第二获取模块23,用于根据所述目标差分包和所述第二版本的目标应用程序的安装包,获取所述第二版本的目标应用程序中的预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系;
106.保存模块24,用于将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中。
107.本技术实施例提供的基于安卓系统的应用程序热更新装置,首先获取目标差分包,然后根据目标差分包及第一版本的安装包在本地合成第二版本的安装包,最后静默安装第二版本的安装包并保存所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系,这样,在保证补丁较小的前提下还能够完成对安卓四大组件的新增、修改,同时保证资源消耗较小。对于终端设备app更新来说,相比应用市场更新,可提供用户无需下载安装的无痕快捷app更新,同时减少更新带来的流量和内存消耗。
108.在一些实施例中,所述目标差分包是利用目标差分算法工具对所述第一版本的目标应用程序的安装包和所述第二版本的目标应用程序的安装包进行对比后,生成控制文件、差异文件和新增文件,然后将控制文件、差异文件和新增文件进行压缩后生成的。
109.在一些实施例中,所述生成模块具体用于:
110.根据所述目标差分包中的控制文件和差异文件在所述第一版本的目标应用程序的安装包中添加差异信息,根据所述差分包中的控制文件和新增文件在所述第一版本的目标应用程序的安装包中添加新增信息,生成第二版本的目标应用程序的安装包;
111.将所述第二版本的目标应用程序的安装包保存在所述目标应用程序的私有目录下。
112.在一些实施例中,所述装置还包括:
113.复制模块,用于将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下。
114.在一些实施例中,所述生成模块还用于对所述第二版本的目标应用程序的安装包进行编译,生成安卓虚拟机art可直接执行的oat文件;
115.所述保存模块还用于将所述oat文件保存在所述目标应用程序的私有目录下。
116.在一些实施例中,所述装置还包括:
117.写入模块,用于在本地缓存中写入一用于记录目标应用程序热更新安装已完成并激活的标记信息。
118.在一些实施例中,所述装置还包括:
119.校验模块,用于根据针对所述目标应用程序的启动请求,校验本地缓存中是否具有所述标记信息;
120.加载模块,用于若本地缓存中具有所述标记信息,则加载所述第二版本的目标应用程序的安装包。
121.在一些实施例中,所述装置还包括:
122.第一判断模块,用于在启动所述第二版本的目标应用程序中的预埋桩组件时,判断所述映射关系文件中是否具有与所述预埋桩组件具有映射关系的新增组件;
123.第一替换模块,用于若所述映射关系文件中具有与所述预埋桩组件具有映射关系的新增组件,则将所述预埋桩组件替换为所述新增组件进行启动;和/或
124.第二判断模块,用于在启动所述第二版本的目标应用程序中的预埋桩组件时,判断所述映射关系文件中是否具有与所述预埋桩组件具有映射关系的新增组件;
125.第二替换模块,用于若所述映射关系文件中具有与所述预埋桩进程具有映射关系的新增进程,则将所述预埋桩进程替换为所述新增进程进行启动。
126.本技术实施例提供的装置的实施例具体可以用于执行上述应用于各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。
127.需要说明的是,本技术实施例提供的基于安卓系统的应用程序热更新方法及装置可用于金融领域,也可用于除金融领域之外的任意技术领域,本技术实施例对基于安卓系统的应用程序热更新方法及装置的应用领域不做限定。
128.图9为本技术一实施例提供的电子设备的实体结构示意图,如图9所示,该电子设备可以包括:处理器(processor)301、通信接口(communications interface)302、存储器(memory)303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信。处理器301可以调用存储器303中的逻辑指令,以执行上述任一实施例所述的方法。
129.此外,上述的存储器303中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
130.本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算
机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法。
131.本实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述各方法实施例所提供的方法。
132.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
133.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
134.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
135.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
136.在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本技术的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
137.以上所述的具体实施例,对本技术的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本技术的具体实施例而已,并不用于限定本技术的保护范围,凡在本技术的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。

技术特征:
1.一种基于安卓系统的应用程序热更新方法,其特征在于,包括:在本地运行第一版本的目标应用程序时,获取目标差分包,所述目标差分包是根据第一版本的目标应用程序的安装包和第二版本的目标应用程序的安装包生成的;根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包;根据所述目标差分包和所述第二版本的目标应用程序的安装包,获取所述第二版本的目标应用程序中的预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系;将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中。2.根据权利要求1所述的方法,其特征在于,所述目标差分包是利用目标差分算法工具对所述第一版本的目标应用程序的安装包和所述第二版本的目标应用程序的安装包进行对比后,生成控制文件、差异文件和新增文件,然后将控制文件、差异文件和新增文件进行压缩后生成的。3.根据权利要求2所述的方法,其特征在于,所述根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包包括:根据所述目标差分包中的控制文件和差异文件在所述第一版本的目标应用程序的安装包中添加差异信息,根据所述差分包中的控制文件和新增文件在所述第一版本的目标应用程序的安装包中添加新增信息,生成第二版本的目标应用程序的安装包;将所述第二版本的目标应用程序的安装包保存在所述目标应用程序的私有目录下。4.根据权利要求1至3任一项所述的方法,其特征在于,在根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包之后,所述方法还包括:将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下。5.根据权利要求4所述的方法,其特征在于,将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下之后,所述方法还包括:对所述第二版本的目标应用程序的安装包进行编译,生成安卓虚拟机art可直接执行的oat文件;将所述oat文件保存在所述目标应用程序的私有目录下。6.根据权利要求1至3任一项所述的方法,其特征在于,在将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中之后,所述方法还包括:在本地缓存中写入一用于记录目标应用程序热更新安装已完成并激活的标记信息。7.根据权利要求6所述的方法,其特征在于,在将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在本地之后,所述方法还包括:根据针对所述目标应用程序的启动请求,校验本地缓存中是否具有所述标记信息;若本地缓存中具有所述标记信息,则加载所述第二版本的目标应用程序的安装包。8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
在启动所述第二版本的目标应用程序中的预埋桩组件时,判断所述映射关系文件中是否具有与所述预埋桩组件具有映射关系的新增组件;若所述映射关系文件中具有与所述预埋桩组件具有映射关系的新增组件,则将所述预埋桩组件替换为所述新增组件进行启动;和/或在启动所述第二版本的目标应用程序中的预埋桩组件时,判断所述映射关系文件中是否具有与所述预埋桩组件具有映射关系的新增组件;若所述映射关系文件中具有与所述预埋桩进程具有映射关系的新增进程,则将所述预埋桩进程替换为所述新增进程进行启动。9.一种基于安卓系统的应用程序热更新装置,其特征在于,包括:第一获取模块,用于在本地运行第一版本的目标应用程序时,获取目标差分包,所述目标差分包是根据第一版本的目标应用程序的安装包和第二版本的目标应用程序的安装包生成的;生成模块,用于根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包;第二获取模块,用于根据所述目标差分包和所述第二版本的目标应用程序的安装包,获取所述第二版本的目标应用程序中的预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系;保存模块,用于将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中。10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述方法的步骤。11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述方法的步骤。

技术总结
本申请提供一种基于安卓系统的应用程序热更新方法及装置,可用于金融领域或其他技术领域。所述方法包括:在本地运行第一版本的目标应用程序时,获取目标差分包;根据目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包;根据目标差分包和第二版本的目标应用程序的安装包,获取所述第二版本的目标应用程序中的预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系;将所述映射关系保存在目标映射关系文件中。本申请实施例提供的基于安卓系统的应用程序热更新方法及装置,在保证补丁较小的前提下还能够完成对安卓四大组件的新增、修改,同时保证资源消耗较小。消耗较小。消耗较小。


技术研发人员:张健 罗涛 李可 赵海强
受保护的技术使用者:中国工商银行股份有限公司
技术研发日:2023.05.05
技术公布日:2023/8/16
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐