本申请涉及计算机,具体涉及一种基于安卓系统的应用程序热更新方法及装置。
背景技术:
1、应用程序(app)热更新是指:在app上线以后发现有缺陷了,如果重新走发布流程可能时间比较长,重新安装app用户体验也不会太好,此时可以通过发布一个更新包,使app运行的时候加载更新包里面的代码,从而解决缺陷,并且对于用户来说是无感的。
2、目前,基于安卓系统的应用程序热更新采用类加载方案的主要是以腾讯系为主,包括微信的tinker、饿了么的amigo等;采用底层替换方案的主要是阿里系的andfix等,还有就是兼顾底层替换与类加载模式的sophix方案。
3、但是,sophix不支持对四大组件的修复,amigo虽然支持四大组件新增修复,但是需要引入全量包补丁,比较消耗资源,其他方案相比较问题更为严重。
技术实现思路
1、针对现有技术中的问题,本申请实施例提供一种基于安卓系统的应用程序热更新方法及装置,能够至少部分地解决现有技术中存在的问题。
2、一方面,本申请提出一种基于安卓系统的应用程序热更新方法,包括:
3、在本地运行第一版本的目标应用程序时,获取目标差分包,所述目标差分包是根据第一版本的目标应用程序的安装包和第二版本的目标应用程序的安装包生成的;
4、根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包;
5、根据所述目标差分包和所述第二版本的目标应用程序的安装包,获取所述第二版本的目标应用程序中的预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系;
6、将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中。
7、在一些实施例中,所述目标差分包是利用目标差分算法工具对所述第一版本的目标应用程序的安装包和所述第二版本的目标应用程序的安装包进行对比后,生成控制文件、差异文件和新增文件,然后将控制文件、差异文件和新增文件进行压缩后生成的。
8、在一些实施例中,所述根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包包括:
9、根据所述目标差分包中的控制文件和差异文件在所述第一版本的目标应用程序的安装包中添加差异信息,根据所述差分包中的控制文件和新增文件在所述第一版本的目标应用程序的安装包中添加新增信息,生成第二版本的目标应用程序的安装包;
10、将所述第二版本的目标应用程序的安装包保存在所述目标应用程序的私有目录下。
11、在一些实施例中,在根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包之后,所述方法还包括:
12、将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下。
13、在一些实施例中,将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下之后,所述方法还包括:
14、对所述第二版本的目标应用程序的安装包进行编译,生成安卓虚拟机art可直接执行的oat文件;
15、将所述oat文件保存在所述目标应用程序的私有目录下。
16、在一些实施例中,在将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中之后,所述方法还包括:
17、在本地缓存中写入一用于记录目标应用程序热更新安装已完成并激活的标记信息。
18、在一些实施例中,在将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在本地之后,所述方法还包括:
19、根据针对所述目标应用程序的启动请求,校验本地缓存中是否具有所述标记信息;
20、若本地缓存中具有所述标记信息,则加载所述第二版本的目标应用程序的安装包。
21、在一些实施例中,所述方法还包括:
22、在启动所述第二版本的目标应用程序中的预埋桩组件时,判断所述映射关系文件中是否具有与所述预埋桩组件具有映射关系的新增组件;
23、若所述映射关系文件中具有与所述预埋桩组件具有映射关系的新增组件,则将所述预埋桩组件替换为所述新增组件进行启动;和/或
24、在启动所述第二版本的目标应用程序中的预埋桩组件时,判断所述映射关系文件中是否具有与所述预埋桩组件具有映射关系的新增组件;
25、若所述映射关系文件中具有与所述预埋桩进程具有映射关系的新增进程,则将所述预埋桩进程替换为所述新增进程进行启动。
26、另一方面,本申请提出一种基于安卓系统的应用程序热更新装置,包括:
27、第一获取模块,用于在本地运行第一版本的目标应用程序时,获取目标差分包,所述目标差分包是根据第一版本的目标应用程序的安装包和第二版本的目标应用程序的安装包生成的;
28、生成模块,用于根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包;
29、第二获取模块,用于根据所述目标差分包和所述第二版本的目标应用程序的安装包,获取所述第二版本的目标应用程序中的预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系;
30、保存模块,用于将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中。
31、本申请实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述的基于安卓系统的应用程序热更新方法的步骤。
32、本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一实施例所述的基于安卓系统的应用程序热更新方法的步骤。
33、本申请实施例提供的基于安卓系统的应用程序热更新方法及装置,首先获取目标差分包,然后根据目标差分包及第一版本的安装包在本地合成第二版本的安装包,最后静默安装第二版本的安装包并保存所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系,这样,在保证补丁较小的前提下还能够完成对安卓四大组件的新增、修改,同时保证资源消耗较小。对于终端设备app更新来说,相比应用市场更新,可提供用户无需下载安装的无痕快捷app更新,同时减少更新带来的流量和内存消耗。
1.一种基于安卓系统的应用程序热更新方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述目标差分包是利用目标差分算法工具对所述第一版本的目标应用程序的安装包和所述第二版本的目标应用程序的安装包进行对比后,生成控制文件、差异文件和新增文件,然后将控制文件、差异文件和新增文件进行压缩后生成的。
3.根据权利要求2所述的方法,其特征在于,所述根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包包括:
4.根据权利要求1至3任一项所述的方法,其特征在于,在根据所述目标差分包和本地保存的第一版本的目标应用程序的安装包,生成并保存第二版本的目标应用程序的安装包之后,所述方法还包括:
5.根据权利要求4所述的方法,其特征在于,将所述第二版本的目标应用程序的安装包中的动态链接库文件复制到所述目标应用程序的私有目录下之后,所述方法还包括:
6.根据权利要求1至3任一项所述的方法,其特征在于,在将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在目标映射关系文件中之后,所述方法还包括:
7.根据权利要求6所述的方法,其特征在于,在将所述预埋桩组件与新增组件之间的映射关系和/或预埋桩进程与新增进程之间的映射关系保存在本地之后,所述方法还包括:
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
9.一种基于安卓系统的应用程序热更新装置,其特征在于,包括:
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述方法的步骤。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述方法的步骤。