CN107168733A - 差分文件包的生成及应用程序的更新方法、装置和系统 - Google Patents

差分文件包的生成及应用程序的更新方法、装置和系统 Download PDF

Info

Publication number
CN107168733A
CN107168733A CN201710279301.6A CN201710279301A CN107168733A CN 107168733 A CN107168733 A CN 107168733A CN 201710279301 A CN201710279301 A CN 201710279301A CN 107168733 A CN107168733 A CN 107168733A
Authority
CN
China
Prior art keywords
file
bag
installation kit
currently installed
application program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201710279301.6A
Other languages
English (en)
Other versions
CN107168733B (zh
Inventor
赵聪颖
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing 58 Information Technology Co Ltd
Original Assignee
Beijing 58 Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing 58 Information Technology Co Ltd filed Critical Beijing 58 Information Technology Co Ltd
Priority to CN201710279301.6A priority Critical patent/CN107168733B/zh
Publication of CN107168733A publication Critical patent/CN107168733A/zh
Application granted granted Critical
Publication of CN107168733B publication Critical patent/CN107168733B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明实施例提供一种差分文件包的生成及应用程序的更新方法、装置和系统,该方法包括:获取预先生成的用于应用程序更新到最新版本的最新安装包,最新安装包至少是根据应用程序当前版本所对应的当前安装包的分包规则生成的;其中,最新安装包的版本不同于当前安装包的版本;当前安装包中包括多个可执行DEX文件,当前安装包的分包规则至少用于指示当前安装包中可执行DEX文件与类文件的对应关系;依次比对当前安装包和最新安装包中对应的可执行DEX文件中包含的类文件,根据比对结果,生成用于指示应用程序更新到最新版本的差分文件包。用于提高应用程序热更新的速率和成功率。

Description

差分文件包的生成及应用程序的更新方法、装置和系统
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种差分文件包的生成及应用程序的更新方法、装置和系统。
背景技术
在终端设备(例如手机、电脑等)中可以安装多个应用程序,在实际应用过程中,为了对应用程序中的漏洞进行修复或对应用程序更新,研发人员可以开发更新包,以使用户可以根据更新包对应用程序进行更新。随着应用程序中所包含的类文件的数量的增加,研发人员还可以针对终端设备部署Multidex方案,用以解决类文件数量超过设备系统限制的问题。具体的,在生成用于更新应用程序的APK(AndroidPackage,安装包)文件时,单个APK文件中可以包含有多个可执行DEX文件(一个主可执行DEX文件和若干个非主可执行DEX文件),单个可执行DEX文件中可以包含有若干个类文件。
目前,热更新技术(或称为热修复技术)已经成为应用程序更新方式中被广泛应用的一种方式。利用热更新技术,只需要在项目中引入极小的引擎文件,就可以使用JavaScript(直译式脚本语言,简称JS)调用任何Objective-C(扩充C的面向对象编程语言)的原生接口,进而替换Objective-C原生方法,也就是说,可以利用热更新技术,下发JS脚本替换原生Objective-C代码,从而能够实时地修复应用程序的线上Bug(漏洞)。在实际应用过程中,首先在旧应用程序版本对应的旧APK的基础上,研发新应用程序版本对应的新APK;然后,当需要对应用程序进行热更新时,依次对比新APK和旧APK中相对应的每一对可执行DEX文件中所包含的类文件,逐一确定出新APK中的可执行DEX文件中与旧APK中对应可执行DEX文件中有变更或新增的类文件,根据确定出各可执行DEX文件中有变更或新增的类文件,生成差分文件包(Patch),进而利用已生成的差分文件包对应用程序进行热更新。
然而,在现有技术中,由于新APK和旧APK中的各可执行DEX文件中包括的类文件均为随机分配的,因此在对应用程序进行热更新时,生成的差分文件包体积较大,不仅造成下载差分文件包所需流量增加的问题,还会增加差分文件包的下载失败率,进而导致应用程序热更新失败。
发明内容
本发明实施例提供一种差分文件包的生成及应用程序的更新方法、装置和系统,提高应用程序热更新的速率和成功率。
第一方面,本发明实施例提供一种用于应用程序更新的差分文件包的生成方法,包括:
获取预先生成的用于应用程序更新到最新版本的最新安装包,所述最新安装包至少是根据所述应用程序当前版本所对应的当前安装包的分包规则生成的;其中,所述最新安装包的版本不同于所述当前安装包的版本;所述当前安装包中包括多个可执行DEX文件,所述当前安装包的分包规则至少用于指示所述当前安装包中可执行DEX文件与类文件的对应关系;
依次比对所述当前安装包和所述最新安装包中对应的可执行DEX文件中包含的类文件,根据比对结果,生成用于指示所述应用程序更新到最新版本的差分文件包。
在一种可能的实施方式中,在获取预先生成的用于应用程序更新到最新版本的最新安装包之前,还包括:
获取所述应用程序的当前安装包的分包规则和用于应用程序更新到最新版本的、根据随机分包规则生成的安装包,所述根据随机分包规则生成的安装包中的类文件被随机分配到可执行DEX文件中;
根据所述当前安装包的分包规则,将所述根据随机分包规则生成的安装包中的类文件分配到所述最新安装包中相应的可执行DEX文件中,得到所述最新安装包。
在另一种可能的实施方式中,根据所述当前安装包的分包规则,将所述根据随机分包规则生成的安装包中的类文件分配到所述最新安装包中相应的可执行DEX文件中,包括:
根据预先获取的配置文件,将所述根据随机分包规则生成的安装包中的主可执行DEX文件中的类文件分配到所述最新安装包中的主可执行DEX文件中;
获取所述当前安装包的非主可执行DEX文件中的第一类文件集合、所述根据随机分包规则生成的安装包的非主可执行DEX文件中的第二类文件集合;
根据所述第一类文件集合和所述第二类文件集合,在所述第二类文件集合中确定重合类文件和新增类文件;其中,所述第一类文件集合中包括所述重合类文件,所述第一类文件集合中不包括所述新增类文件;
将所述重合类文件按照所述分包规则分配到所述最新安装包中对应的可执行DEX文件中,并将所述新增类文件分配至所述最新安装包中的预设可执行DEX文件中。
在另一种可能的实施方式中,将所述重合类文件按照所述分包规则分配到所述最新安装包中对应的可执行DEX文件中,包括:
根据所述分包规则,在所述当前安装包中确定所述重合类文件所在的第一可执行DEX文件;
根据所述第一可执行DEX文件在所述当前安装包中的位置,在所述最新安装包中确定所述重合类文件对应的第二可执行DEX文件;
将所述重合类文件分配至所述第二可执行DEX文件中。
在另一种可能的实施方式中,所述预设可执行DEX文件为所述最新安装包中的最后一个可执行DEX文件。
在另一种可能的实施方式中,在获取预先生成的用于应用程序更新到最新版本的最新安装包之前,还包括:
获取所述应用程序的当前安装包的分包规则和所述最新版本应用程序所包含的类文件的集合,所述类文件的集合中包括多个类文件;
根据所述当前安装包的分包规则,将所述类文件的集合中的类文件分配至所述最新安装包中相应的可执行DEX文件中,得到所述最新安装包。
在另一种可能的实施方式中,生成差分文件包,包括:
根据对应的可执行DEX文件在所述当前安装包和所述最新安装包中的位置,在所述当前安装包和所述最新安装包中确定多个可执行DEX文件对,各所述可执行DEX文件对中包括所述当前安装包中的一个可执行DEX文件和所述最新安装包中的一个对应的可执行DEX文件;
获取各所述可执行DEX文件对中的两个可执行DEX文件的差别类文件;
根据各所述可执行DEX文件对的差别类文件,生成所述最新安装包相对于所述当前安装包的差分文件包。
第二方面,本发明实施例提供一种应用程序的更新方法,根据上述第一方面任一项生成的差分文件包,对应用程序进行更新。
第三方面,本发明实施例提供一种用于应用程序更新的差分文件包的生成装置,包括获取模块和生成模块,其中,
所述获取模块用于,获取预先生成的用于应用程序更新到最新版本的最新安装包,所述最新安装包至少是根据所述应用程序当前版本所对应的当前安装包的分包规则生成的;其中,所述最新安装包的版本不同于所述当前安装包的版本;所述当前安装包中包括多个可执行DEX文件,所述当前安装包的分包规则至少用于指示所述当前安装包中可执行DEX文件与类文件的对应关系;
所述生成模块用于,依次比对所述当前安装包和所述最新安装包中相对应的可执行DEX中包含的类文件,根据比对结果,生成用于指示所述应用程序更新到最新版本的差分文件包。
在一种可能的实施方式中,所述装置还包括分配模块,其中,
所述获取模块还用于,在所述获取模块获取预先生成的用于应用程序更新到最新版本的最新安装包之前,获取所述应用程序的当前安装包的分包规则和用于应用程序更新到最新版本的、根据随机分包规则生成的安装包,所述根据随机分包规则生成的安装包中的类文件被随机分配到可执行DEX文件中;
所述分配模块用于,根据所述当前安装包的分包规则,将所述根据随机分包规则生成的安装包中的类文件分配到所述最新安装包中相应的可执行DEX文件中,得到所述最新安装包。
在另一种可能的实施方式中,所述分配模块包括分配单元、获取单元和确定单元,其中,
所述分配单元用于,根据预先获取的配置文件,将所述根据随机分包规则生成的安装包中的主可执行DEX文件中的类文件分配到所述最新安装包中的主可执行DEX文件中;
所述获取单元用于,获取所述当前安装包的非主可执行DEX文件中的第一类文件集合、所述根据随机分包规则生成的安装包的非主可执行DEX文件中的第二类文件集合;
所述确定单元用于,根据所述第一类文件集合和所述第二类文件集合,在所述第二类文件集合中确定重合类文件和新增类文件;其中,所述第一类文件集合中包括所述重合类文件,所述第一类文件集合中不包括所述新增类文件;
所述分配单元还用于,将所述重合类文件按照所述分包规则分配到所述最新安装包中对应的可执行DEX文件中,并将所述新增类文件分配至所述最新安装包中的预设可执行DEX文件。
在另一种可能的实施方式中,所述分配单元具体用于:
根据所述分包规则,在所述当前安装包中确定所述重合类文件所在的第一可执行DEX文件;
根据所述第一可执行DEX文件在所述当前安装包中的位置,在所述最新安装包中确定所述重合类文件对应的第二可执行DEX文件;
将所述重合类文件分配至所述第二可执行DEX文件中。
在另一种可能的实施方式中,所述预设可执行DEX文件为所述最新安装包中的最后一个可执行DEX文件。
在另一种可能的实施方式中,所述获取模块还用于,在所述获取模块获取预先生成的用于应用程序更新到最新版本的最新安装包之前,获取所述应用程序的当前安装包的分包规则和所述最新版本应用程序所包含的类文件的集合,所述类文件的集合中包括多个类文件;
所述分配模块还用于,根据所述当前安装包的分包规则,将所述类文件的集合中的类文件分配至所述最新安装包中相应的可执行DEX文件中,得到所述最新安装包。
在另一种可能的实施方式中,所述生成模块具体用于:
根据对应的可执行DEX文件在所述当前安装包和所述最新安装包中的位置,在所述当前安装包和所述最新安装包中确定多个可执行DEX文件对,各所述可执行DEX文件对中包括所述当前安装包中的一个可执行DEX文件和所述最新安装包中的一个对应的可执行DEX文件;
获取各所述可执行DEX文件对中的两个可执行DEX文件的差别类文件;
根据各所述可执行DEX文件对的差别类文件,生成所述最新安装包相对于所述当前安装包的差分文件包。
第四方面,本发明实施例提供一种应用程序的更新系统,包括更新装置和上述第三方面任意一项所述的生成装置,其中,
所述更新装置用于,根据所述生成装置所生成的差分文件包,对应用程序进行更新。
本发明实施例提供的差分文件包的生成及应用程序的更新方法、装置和系统,当需要生成差分文件包时,先获取根据应用程序当前版本所对应的当前安装包的分包规则生成的最新安装包,再依次比对所述当前安装包和所述最新安装包中对应的可执行DEX文件中包含的类文件,根据比对结果,生成用于指示所述应用程序更新到最新版本的差分文件包。在上述过程中,由于最新安装包是根据当前安装包的分包规则生成的,因此,当前安装包中和最新安装包中相对应的可执行DEX文件的相似度较高,使得当前安装包和最新安装包中相对应的可执行DEX文件的差别类文件较小,进而使得确定得到的最新安装包文件相对于当前安装包文件的差分文件包较小,这样,当应用程序需要进行热更新或热修复时,可以快速下载得到差分文件包,进而提高应用程序热更新的效率,同时,由于差分文件包较小,进而可以减小应用程序下载差分文件包失败的概率,进而提高应用程序进行热更新的成功率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的用于应用程序更新的差分文件包的生成方法的应用场景示意图;
图2为本发明实施例提供的用于应用程序更新的差分文件包的生成方法的流程示意图;
图3为本申请提供的生成最新安装包方法的流程示意图一;
图4为本申请提供的生成最新安装包方法的流程示意图二;
图5为本发明实施例提供的用于应用程序更新的差分文件包的生成装置的结构示意图一;
图6为本发明实施例提供的用于应用程序更新的差分文件包的生成装置的结构示意图二;
图7为本发明实施例提供的应用程序的更新系统的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的用于应用程序更新的差分文件包的生成方法的应用场景示意图。请参见图1,包括当前安装包和最新安装包,其中,当前安装包为旧应用程序版本对应的APK,最新安装包为新应用程序版本对应的APK。在每一个安装包中均包括至少一个可执行DEX文件,每一个可执行DEX文件中可以包括至少一个类文件。
在本申请中,最新安装包是根据当前安装包的分包规则生成的,因此,当前安装包中和最新安装包中相对应的可执行DEX文件的相似度较高,使得当前安装包和最新安装包中相对应的可执行DEX文件的差别类文件包较小,进而使得确定得到的最新安装包文件相对于当前安装包文件的差分文件包较小,这样,当应用程序需要进行热更新或热修复时,可以快速下载得到差分文件包,进而提高应用程序热更新的效率,同时,由于差分文件包较小,进而可以减小应用程序下载差分文件包失败的概率,进而提高应用程序进行热更新的成功率。
下面,通过具体实施例,对本申请所示的技术方案进行详细说明。需要说明的是,下面几个具体实施例可以相互结合,对于相同或相似的内容,在不同的实施例中不再进行赘述。
图2为本发明实施例提供的用于应用程序更新的差分文件包的生成方法的流程示意图。请参见图2,该方法可以包括:
S201、获取预先生成的用于应用程序更新到最新版本的最新安装包,最新安装包至少是根据应用程序当前版本所对应的当前安装包的分包规则生成的。
其中,最新安装包的版本不同于当前安装包的版本;当前安装包中包括多个可执行DEX文件,当前安装包的分包规则至少用于指示当前安装包中可执行DEX文件与类文件的对应关系。
本发明实施例的执行主体可以为用于应用程序更新的差分文件包的生成确定装置,可选的,该生成装置可以通过软件实现、或者通过软件和硬件的结合实现。
在本发明实施例中,当前安装包中可以包括多个可执行DEX文件,各可执行DEX文件中可以包括多个类文件,当然,可执行DEX文件中还可以只包括一个类文件,甚至不包括类文件,本发明实施例仅以包括有多个类文件的可执行DEX文件为例进行举例描述。
分包规则用于指示该安装包中可执行DEX文件与类文件的对应关系,即,分包规则可以指示该安装包中每一个可执行DEX文件中包括的类文件。可选的,假设一个安装包中包括3个可执行DEX文件,第一个可执行DEX文件中包括类文件1-类文件10,第二个可执行DEX文件中包括类文件11-类文件25,第三个可执行DEX文件中包括类文件26-类文件40,则该分包规则可以通过表1表示:
表1
可执行DEX文件的标识 类文件的标识
可执行DEX文件1 类文件1-类文件10
可执行DEX文件2 类文件11-类文件25
可执行DEX文件3 类文件26-类文件40
S202、依次比对当前安装包和最新安装包中对应的可执行DEX文件中包含的类文件,根据比对结果,生成用于指示应用程序更新到最新版本的差分文件包。
可选的,可以通过如下可行的实现方式确定最新安装包相对于当前安装包的差分文件包:
根据对应的可执行DEX文件在当前安装包和最新安装包中的位置,在当前安装包和最新安装包中确定多个可执行DEX文件对,各可执行DEX文件对中包括当前安装包中的一个可执行DEX文件和最新安装包中的一个对应的可执行DEX文件;获取各可执行DEX文件对中的两个可执行DEX文件的差别类文件;根据各可执行DEX文件对的差别类文件,生成最新安装包相对于当前安装包的差分文件包。
例如,假设当前安装包中包括3个可执行DEX文件,分别记为可执行DEX文件11-可执行DEX文件13,可执行DEX文件11、可执行DEX文件12、及可执行DEX文件13在当前安装包中顺序排列。假设最新安装包中也包括3个可执行DEX文件,分别记为可执行DEX文件21-可执行DEX文件23,可执行DEX文件21、可执行DEX文件22、及可执行DEX文件23在最新安装包中顺序排列,相应的,可执行DEX文件11和可执行DEX文件21为一个可执行DEX文件对,可执行DEX12和可执行DEX文件22为一个可执行DEX文件对,可执行DEX文件13和可执行DEX文件23为一个可执行DEX文件对。
获取可执行DEX文件11和可执行DEX文件21的差别类文件1,获取可执行DEX文件12和可执行DEX文件22的差别类文件2,获取可执行DEX文件13和可执行DEX文件23的差别类文件3,然后,根据差别类文件1、差别类文件2和差别类文件3生成最新安装包相对于当前安装包的差分文件包。可选的,可以将该三个差别类文件的组合确定为差分文件包。
需要说明的是,在本发明实施例中,最新安装包的版本可以高于当前安装包的版本,在这种情况下,利用本发明实施例所生成的差分文件包可以实现应用程序的升级;在另外一种情况下,最新安装包的版本也可以低于当前安装包的版本,在这种情况下,利用本发明实施例所生成的差分文件包可以实现应用程序的降级或版本回退。本发明实施例仅以应用程序的升级为例进行举例描述。
本发明实施例提供的用于应用程序更新的差分文件包的生成方法,当需要获取差分文件包时,先获取根据应用程序当前版本所对应的当前安装包的分包规则生成的最新安装包,再依次比对所述当前安装包和所述最新安装包中对应的可执行DEX文件中包含的类文件,根据比对结果,生成用于指示所述应用程序更新到最新版本的差分文件包。在上述过程中,由于最新安装包是根据当前安装包的分包规则生成的,因此,当前安装包中和最新安装包中相对应的可执行DEX文件的相似度较高,使得当前安装包和最新安装包中相对应的可执行DEX文件的差别类文件较小,进而使得确定得到的最新安装包文件相对于当前安装包文件的差分文件包较小,这样,当应用程序需要进行热更新或热修复时,可以快速下载得到差分文件包,进而提高应用程序热更新的效率,同时,由于差分文件包较小,进而可以减小应用程序下载差分文件包失败的概率,进而提高应用程序进行热更新的成功率。
在图2所述实施例的基础上,可选的,至少可以通过如下两种可行的实现方式预先生成最新安装包,具体的,请参见图3-图4所示的实施例。
图3为本申请提供的生成最新安装包方法的流程示意图一。请参见图3,该方法可以包括:
S301、获取应用程序的当前安装包的分包规则和中间安装包,分包规则用于指示当前安装包中可执行DEX文件与类文件的对应关系,中间安装包为用于应用程序更新到最新版本的、根据随机分包规则生成的安装包。
S302、根据预先获取的配置文件,将中间安装包中的主可执行DEX文件中的类文件分配到最新安装包中的主可执行DEX文件中。
在本发明实施例中,安装包中一般包括多个可执行DEX文件,每一个可执行DEX文件中可以包括多个类文件,该多个可执行DEX文件中包括一个主可执行DEX文件和多个非主可执行DEX文件,其中,主可执行DEX文件主要用于支撑应用程序的启动,非主可执行DEX文件主要用于支撑应用程序的运行。在实际应用过程中,安装包中的多个可执行DEX文件通常顺序排列,主可执行DEX文件通常排序在最前,相应的,多个可执行DEX文件的标识可以通过可执行DEX文件在安装包中的位置表示。
中间安装包中的主可执行DEX文件中包括的类文件通常由终端系统根据应用程序启动时所需的配置文件决定,最新安装包的非主可执行DEX文件中包括的类文件通常由SDK(Software Development Kit,软件开发工具包)随机分配的。
303、获取当前安装包的非主可执行DEX文件中的第一类文件集合、中间安装包的非主可执行DEX文件中的第二类文件集合。
可选的,可以获取当前安装包中的所有非主可执行DEX文件,并将当前安装包中所有非主可执行DEX文件中的类文件确定为第一类文件集合中的类文件。
可选的,可以获取中间安装包中的所有非主可执行DEX文件,并将中间安装包中所有非主可执行DEX文件中的类文件确定为第二类文件集合中的类文件。
S304、根据第一类文件集合和第二类文件集合,在第二类文件集合中确定重合类文件和新增类文件。
其中,第一类文件集合中包括重合类文件,第一类文件集合中不包括新增类文件。
重合类文件为第一类文件集合和第二类文件集合的交集,新增类文件为属于第一类文件集合、且不属于第二类文件集合中的类文件。
可选的,可以通过如下可行的实现方式在第二类文件集合中确定重合类文件和新增类文件:针对第二类文件集合中的每一个类文件,获取该类文件的类名,判断第一类文件集合中是否包括该类名对应的类文件,若是,则确定该类文件为重合类文件,若否,则确定该类文件为新增类文件。针对第二类文件集合中的每一个类文件,均重复执行上述过程,进而可以在第二类文件集合中确定得到多个重合类文件和多个新增类文件。
S305、将重合类文件按照分包规则分配到最新安装包中对应的可执行DEX文件中,并将新增类文件分配至最新安装包中的预设可执行DEX文件中。
在确定得到重合类文件和新增类文件之后,由于当前安装包中也包括重合类文件,因此,可以按照当前安装包的分包规则,将重合类文件分配至最新安装包中的可执行DEX文件中;由于当前安装包中不包括新增类文件,因此,可以将新增类文件分配至最新安装包中的预设可执行DEX文件中。可选的,预设可执行DEX文件可以为最新安装包中的最后一个可执行DEX文件。
可选的,可以通过如下可行的实现方式将重合类文件按照分包规则分配至最新安装包中的可执行DEX文件中:
根据分包规则,在当前安装包中确定重合类文件所在的第一可执行DEX文件,根据第一DEX在当前安装包中的位置,在最新安装包中确定重合类文件对应的第二可执行DEX文件,将重合类文件分配至第二可执行DEX文件中。
例如,假设类文件1为重合类文件,当需要对类文件1进行分包处理时,先根据当前安装包的分包规则,在当前安装包中确定类文件1所在的可执行DEX文件,假设类文件1位于当前安装包的可执行DEX文件1中,则获取可执行DEX文件1在当前安装包中的位置(假设为第三位),则确定最新安装包中位于第三位的可执行DEX文件2,并将类文件1分配到最新安装包中的可执行DEX文件2中。
在图3所示的实施例中,在确定最新安装包时,先将中间文件的主可执行DEX文件中的类文件分配至最新安装包的主可执行DEX文件中,然后,在中间安装包的非主可执行DEX文件中确定重合类文件和新增类文件,并根据第一类文件的分包规则,将重合类文件分配至最新安装包中,将新增类文件统一分配到最新安装包中的预设可执行DEX文件,这样,可以使得最新安装包的非主可执行DEX文件中除预设可执行DEX文件之外的、其它非主可执行DEX文件与当前安装包文件中对应的可执行DEX文件的差分文件达到最小,进而可以最大限度的减小差分文件包的大小。进一步的,最新安装包相对于中间安装包,仅对中间安装包中非主可执行DEX文件中的类文件进行了重新分包处理,并未对中间安装包的主可执行DEX文件中的类文件进行分包处理,这样,可以避免由于改变主可执行DEX文件中包括的类文件而导致应用程序启动异常的问题。
图4为本申请提供的生成最新安装包方法的流程示意图二。请参见图4,该方法可以包括:
S401、获取应用程序的当前安装包的分包规则和最新版本应用程序所包含的类文件的集合,其中,类文件的集合中包括多个类文件。
S402、根据当前安装包的分包规则,将类文件的集合中的类文件分配至最新安装包中相应的可执行DEX文件中,得到最新安装包。
需要说明的是,S402的执行过程可以参见图3所示实施例中的S302~S305,根据应用程序启动时所需的配置文件,将相应的类文件分配至最新安装包的主可执行DEX文件中,进一步的,将最新版本应用程序所包含的全部类文件中与当前安装包中的重合类文件,根据当前安装包的分包规则,分配至最新安装包的对应可执行DEX文件中,并将新增类文件分配至最新安装包的最后一个可执行DEX文件中。
需要说明的是,本发明实施例还可以通过其它方式生成最新安装包,只要该最新安装包是根据当前安装包的分包规则所生成的,其实现方式均在本发明的保护范围内,这里不再赘述。
在上述过程中,由于最新安装包是根据当前安装包的分包规则生成的,因此,当前安装包中和最新安装包中相对应的可执行DEX文件的相似度较高,使得当前安装包和最新安装包中相对应的可执行DEX文件的差别类文件较小,进而使得确定得到的最新安装包文件相对于当前安装包文件的差分文件包较小,这样,当应用程序需要进行热更新或热修复时,可以快速下载得到差分文件包,进而提高应用程序热更新的效率,同时,由于差分文件包较小,进而可以减小应用程序下载差分文件包失败的概率,进而提高应用程序进行热更新的成功率。
下面,通过具体示例,对上述方法实施例所示的技术方案进行详细说明。
示例性的,假设当前安装包中包括的三个可执行DEX文件,分别记为可执行DEX文件11-可执行DEX文件13,其中,可执行DEX文件11为主可执行DEX文件,每个可执行DEX文件中包括的类文件分别如表2所示:
表2
假设中间安装包中包括的三个可执行DEX文件,分别记为可执行DEX文件21-可执行DEX文件23,其中,可执行DEX文件21为主可执行DEX文件,每个可执行DEX文件中包括的类文件分别如表3所示:
表3
先获取当前安装包的非主可执行DEX文件(可执行DEX文件12和可执行DEX文件13)中的第一类文件集合:A1、A2、A3、A4、B1、B2、B3、B4。获取中间安装包的非主可执行DEX文件(可执行DEX文件22和可执行DEX文件23)中的第二类文件集合:A1、A2、A3、B1、B3、B4、C3、C4、C5、C6。
根据第一类文件集合和第二类文件集合,在第二类文件集合中确定重合类文件:A1、A2、A3、B1、B3、B4,在第二类文件集合中确定新增类文件:C3、C4、C5、C6。
根据当前安装包的分包规则,将A1、A2、A3、B1、B3、B4分配到最新安装包中对应的可执行DEX文件中,即,将A1、A2、A3分配到可执行DEX文件22中,B1、B3、B4将分配到可执行DEX文件23中。假设预设可执行DEX文件为可执行DEX文件23,则将C3、C4、C5、C6分配到可执行DEX文件23中,得到最新安装包,最新安装包中各可执行DEX文件中包括的类文件如表4所示:
表4
在确定得到表4所示的最新安装包之后,根据表1和表4获取差分文件包,具体的:获取可执行DEX文件11和可执行DEX文件21的差别类文件1:C1、C2,获取可执行DEX文件12和可执行DEX文件22的差别类文件2:A4;获取可执行DEX文件13和可执行DEX文件23的差别类文件3:B2、C3、C4、C5、C6。
根据差别类文件1-差别类文件3确定差分文件包,差分文件包中包括的类文件至少为:C1、C2、A4、B2、C3、C4、C5、C6。
本发明实施例还提供一种应用程序的更新方法,该应用程序的更新方法可以根据上述任意方法实施例所生成的差分文件包,对应用程序进行更新。
图5为本发明实施例提供的用于应用程序更新的差分文件包的生成装置的结构示意图一,请参见图5,该装置可以包括获取模块11和生成模块12,其中,
所述获取模块11用于,获取预先生成的用于应用程序更新到最新版本的最新安装包,所述最新安装包至少是根据所述应用程序当前版本所对应的当前安装包的分包规则生成的;其中,所述最新安装包的版本不同于所述当前安装包的版本;所述当前安装包中包括多个可执行DEX文件,所述当前安装包的分包规则至少用于指示所述当前安装包中可执行DEX文件与类文件的对应关系;
所述生成模块12用于,依次比对所述当前安装包和所述最新安装包中相对应的可执行DEX中包含的类文件,根据比对结果,生成用于指示所述应用程序更新到最新版本的差分文件包。
本发明实施例提供的用于应用程序更新的差分文件包的生成装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
图6为本发明实施例提供的用于应用程序更新的差分文件包的生成装置的结构示意图二。请参见图6,该装置还包括分配模块13,其中,
所述获取模块11还用于,在所述获取模块11获取预先生成的用于应用程序更新到最新版本的最新安装包之前,获取所述应用程序的当前安装包的分包规则和用于应用程序更新到最新版本的、根据随机分包规则生成的安装包,所述根据随机分包规则生成的安装包中的类文件被随机分配到可执行DEX文件中;
所述分配模块13用于,根据所述当前安装包的分包规则,将所述根据随机分包规则生成的安装包中的类文件分配到所述最新安装包中相应的可执行DEX文件中,得到所述最新安装包。
在一种可能的实施方式中,所述分配模块13包括分配单元131、获取单元132和确定单元133,其中,
所述分配单元131用于,根据预先获取的配置文件,将所述根据随机分包规则生成的安装包中的主可执行DEX文件中的类文件分配到所述最新安装包中的主可执行DEX文件中;
所述获取单元132用于,获取所述当前安装包的非主可执行DEX文件中的第一类文件集合、所述根据随机分包规则生成的安装包的非主可执行DEX文件中的第二类文件集合;
所述确定单元133用于,根据所述第一类文件集合和所述第二类文件集合,在所述第二类文件集合中确定重合类文件和新增类文件;其中,所述第一类文件集合中包括所述重合类文件,所述第一类文件集合中不包括所述新增类文件;
所述分配单元131还用于,将所述重合类文件按照所述分包规则分配到所述最新安装包中对应的可执行DEX文件中,并将所述新增类文件分配至所述最新安装包中的预设可执行DEX文件。
在另一种可能的实施方式中,所述分配单元131具体用于:
根据所述分包规则,在所述当前安装包中确定所述重合类文件所在的第一可执行DEX文件;
根据所述第一可执行DEX文件在所述当前安装包中的位置,在所述最新安装包中确定所述重合类文件对应的第二可执行DEX文件;
将所述重合类文件分配至所述第二可执行DEX文件中。
在另一种可能的实施方式中,所述预设可执行DEX文件为所述最新安装包中的最后一个可执行DEX文件。
在另一种可能的实施方式中,所述获取模块11还用于,在所述获取模块11获取预先生成的用于应用程序更新到最新版本的最新安装包之前,获取所述应用程序的当前安装包的分包规则和所述最新版本应用程序所包含的类文件的集合,所述类文件的集合中包括多个类文件;
所述分配模块13还用于,根据所述当前安装包的分包规则,将所述类文件的集合中的类文件分配至所述最新安装包中相应的可执行DEX文件中,得到所述最新安装包。
在另一种可能的实施方式中,所述生成模块12具体用于:
根据对应的可执行DEX文件在所述当前安装包和所述最新安装包中的位置,在所述当前安装包和所述最新安装包中确定多个可执行DEX文件对,各所述可执行DEX文件对中包括所述当前安装包中的一个可执行DEX文件和所述最新安装包中的一个对应的可执行DEX文件;
获取各所述可执行DEX文件对中的两个可执行DEX文件的差别类文件;
根据各所述可执行DEX文件对的差别类文件,生成所述最新安装包相对于所述当前安装包的差分文件包。
本发明实施例提供的用于应用程序更新的差分文件包的生成装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
图7为本发明实施例提供的应用程序的更新系统的结构示意图。请参见图7,该系统可以包括更新装置21和如图5-图6任意实施例所述的生成装置22,其中,
所述更新装置21用于,根据所述生成装置22所生成的差分文件包,对应用程序进行更新。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明实施例的技术方案,而非对其限制;尽管参照前述各实施例对本发明实施例进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例方案的范围。

Claims (10)

1.一种用于应用程序更新的差分文件包的生成方法,其特征在于,包括:
获取预先生成的用于应用程序更新到最新版本的最新安装包,所述最新安装包至少是根据所述应用程序当前版本所对应的当前安装包的分包规则生成的;其中,所述最新安装包的版本不同于所述当前安装包的版本;所述当前安装包中包括多个可执行DEX文件,所述当前安装包的分包规则至少用于指示所述当前安装包中可执行DEX文件与类文件的对应关系;
依次比对所述当前安装包和所述最新安装包中对应的可执行DEX文件中包含的类文件,根据比对结果,生成用于指示所述应用程序更新到最新版本的差分文件包。
2.根据权利要求1所述的方法,其特征在于,在获取预先生成的用于应用程序更新到最新版本的最新安装包之前,还包括:
获取所述应用程序的当前安装包的分包规则和用于应用程序更新到最新版本的、根据随机分包规则生成的安装包,所述根据随机分包规则生成的安装包中的类文件被随机分配到可执行DEX文件中;
根据所述当前安装包的分包规则,将所述根据随机分包规则生成的安装包中的类文件分配到所述最新安装包中相应的可执行DEX文件中,得到所述最新安装包。
3.根据权利要求2所述的方法,其特征在于,根据所述当前安装包的分包规则,将所述根据随机分包规则生成的安装包中的类文件分配到所述最新安装包中相应的可执行DEX文件中,包括:
根据预先获取的配置文件,将所述根据随机分包规则生成的安装包中的主可执行DEX文件中的类文件分配到所述最新安装包中的主可执行DEX文件中;
获取所述当前安装包的非主可执行DEX文件中的第一类文件集合、所述根据随机分包规则生成的安装包的非主可执行DEX文件中的第二类文件集合;
根据所述第一类文件集合和所述第二类文件集合,在所述第二类文件集合中确定重合类文件和新增类文件;其中,所述第一类文件集合中包括所述重合类文件,所述第一类文件集合中不包括所述新增类文件;
将所述重合类文件按照所述分包规则分配到所述最新安装包中对应的可执行DEX文件中,并将所述新增类文件分配至所述最新安装包中的预设可执行DEX文件中。
4.根据权利要求3所述的方法,其特征在于,将所述重合类文件按照所述分包规则分配到所述最新安装包中对应的可执行DEX文件中,包括:
根据所述分包规则,在所述当前安装包中确定所述重合类文件所在的第一可执行DEX文件;
根据所述第一可执行DEX文件在所述当前安装包中的位置,在所述最新安装包中确定所述重合类文件对应的第二可执行DEX文件;
将所述重合类文件分配至所述第二可执行DEX文件中。
5.根据权利要求3或4所述的方法,其特征在于,所述预设可执行DEX文件为所述最新安装包中的最后一个可执行DEX文件。
6.根据权利要求1所述的方法,其特征在于,在获取预先生成的用于应用程序更新到最新版本的最新安装包之前,还包括:
获取所述应用程序的当前安装包的分包规则和所述最新版本应用程序所包含的类文件的集合,所述类文件的集合中包括多个类文件;
根据所述当前安装包的分包规则,将所述类文件的集合中的类文件分配至所述最新安装包中相应的可执行DEX文件中,得到所述最新安装包。
7.根据权利要求1-4或6中任一项所述的方法,其特征在于,生成差分文件包,包括:
根据对应的可执行DEX文件在所述当前安装包和所述最新安装包中的位置,在所述当前安装包和所述最新安装包中确定多个可执行DEX文件对,各所述可执行DEX文件对中包括所述当前安装包中的一个可执行DEX文件和所述最新安装包中的一个对应的可执行DEX文件;
获取各所述可执行DEX文件对中的两个可执行DEX文件的差别类文件;
根据各所述可执行DEX文件对的差别类文件,生成所述最新安装包相对于所述当前安装包的差分文件包。
8.一种应用程序的更新方法,其特征在于,根据所述权利要求1所述生成的差分文件包,对应用程序进行更新。
9.一种用于应用程序更新的差分文件包的生成装置,其特征在于,包括获取模块和生成模块,其中,
所述获取模块用于,获取预先生成的用于应用程序更新到最新版本的最新安装包,所述最新安装包至少是根据所述应用程序当前版本所对应的当前安装包的分包规则生成的;其中,所述最新安装包的版本不同于所述当前安装包的版本;所述当前安装包中包括多个可执行DEX文件,所述当前安装包的分包规则至少用于指示所述当前安装包中可执行DEX文件与类文件的对应关系;
所述生成模块用于,依次比对所述当前安装包和所述最新安装包中相对应的可执行DEX中包含的类文件,根据比对结果,生成用于指示所述应用程序更新到最新版本的差分文件包。
10.一种应用程序的更新系统,其特征在于,包括更新装置和如权利要求9所述的生成装置,其中,
所述更新装置用于,根据所述生成装置所生成的差分文件包,对应用程序进行更新。
CN201710279301.6A 2017-04-25 2017-04-25 差分文件包的生成及应用程序的更新方法、装置和系统 Active CN107168733B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710279301.6A CN107168733B (zh) 2017-04-25 2017-04-25 差分文件包的生成及应用程序的更新方法、装置和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710279301.6A CN107168733B (zh) 2017-04-25 2017-04-25 差分文件包的生成及应用程序的更新方法、装置和系统

Publications (2)

Publication Number Publication Date
CN107168733A true CN107168733A (zh) 2017-09-15
CN107168733B CN107168733B (zh) 2020-07-17

Family

ID=59813232

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710279301.6A Active CN107168733B (zh) 2017-04-25 2017-04-25 差分文件包的生成及应用程序的更新方法、装置和系统

Country Status (1)

Country Link
CN (1) CN107168733B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107729042A (zh) * 2017-10-16 2018-02-23 东软集团股份有限公司 移动应用升级方法及装置、存储介质、电子设备
WO2020014926A1 (zh) * 2018-07-19 2020-01-23 华为技术有限公司 一种补丁包生成方法及设备
WO2021027630A1 (zh) * 2019-08-14 2021-02-18 华为技术有限公司 补丁方法、相关装置及系统
CN112527377A (zh) * 2020-11-25 2021-03-19 深圳左邻永佳科技有限公司 应用程序生成处理方法、装置、计算机设备和存储介质
CN113031988A (zh) * 2021-03-26 2021-06-25 北京字节跳动网络技术有限公司 应用程序更新方法、装置、设备和存储介质
CN113031988B (zh) * 2021-03-26 2024-05-14 北京字节跳动网络技术有限公司 应用程序更新方法、装置、设备和存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102707977A (zh) * 2012-05-17 2012-10-03 江苏中科梦兰电子科技有限公司 一种基于Android应用软件的增量升级方法
US20140082729A1 (en) * 2012-09-19 2014-03-20 Estsecurity Co., Ltd. System and method for analyzing repackaged application through risk calculation
CN105740016A (zh) * 2016-01-28 2016-07-06 腾讯科技(深圳)有限公司 应用程序的增量发布方法和装置、升级方法和装置
CN105930197A (zh) * 2016-06-28 2016-09-07 乐视控股(北京)有限公司 一种软件升级的方法及电子设备
CN106462430A (zh) * 2016-08-29 2017-02-22 北京小米移动软件有限公司 应用升级包获取方法及装置
CN106502725A (zh) * 2016-09-30 2017-03-15 歌尔科技有限公司 应用程序的升级方法、设备及电子设备

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102707977A (zh) * 2012-05-17 2012-10-03 江苏中科梦兰电子科技有限公司 一种基于Android应用软件的增量升级方法
US20140082729A1 (en) * 2012-09-19 2014-03-20 Estsecurity Co., Ltd. System and method for analyzing repackaged application through risk calculation
CN105740016A (zh) * 2016-01-28 2016-07-06 腾讯科技(深圳)有限公司 应用程序的增量发布方法和装置、升级方法和装置
CN105930197A (zh) * 2016-06-28 2016-09-07 乐视控股(北京)有限公司 一种软件升级的方法及电子设备
CN106462430A (zh) * 2016-08-29 2017-02-22 北京小米移动软件有限公司 应用升级包获取方法及装置
CN106502725A (zh) * 2016-09-30 2017-03-15 歌尔科技有限公司 应用程序的升级方法、设备及电子设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
SHWEN: "Android拆分与加载Dex的多种方案对比", 《WEMOBILEDEV微信公众号》 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107729042A (zh) * 2017-10-16 2018-02-23 东软集团股份有限公司 移动应用升级方法及装置、存储介质、电子设备
WO2020014926A1 (zh) * 2018-07-19 2020-01-23 华为技术有限公司 一种补丁包生成方法及设备
CN111316230A (zh) * 2018-07-19 2020-06-19 华为技术有限公司 一种补丁包生成方法及设备
CN111316230B (zh) * 2018-07-19 2021-08-03 华为技术有限公司 一种补丁包生成方法及设备
US11321080B2 (en) 2018-07-19 2022-05-03 Huawei Technologies Co., Ltd. Patch package generation method and device
WO2021027630A1 (zh) * 2019-08-14 2021-02-18 华为技术有限公司 补丁方法、相关装置及系统
CN112527377A (zh) * 2020-11-25 2021-03-19 深圳左邻永佳科技有限公司 应用程序生成处理方法、装置、计算机设备和存储介质
CN112527377B (zh) * 2020-11-25 2024-03-19 深圳左邻永佳科技有限公司 应用程序生成处理方法、装置、计算机设备和存储介质
CN113031988A (zh) * 2021-03-26 2021-06-25 北京字节跳动网络技术有限公司 应用程序更新方法、装置、设备和存储介质
CN113031988B (zh) * 2021-03-26 2024-05-14 北京字节跳动网络技术有限公司 应用程序更新方法、装置、设备和存储介质

Also Published As

Publication number Publication date
CN107168733B (zh) 2020-07-17

Similar Documents

Publication Publication Date Title
CN107168733A (zh) 差分文件包的生成及应用程序的更新方法、装置和系统
US10642596B2 (en) Embedded device and program updating method
CN103473067B (zh) 嵌入式Linux分区与数据还原方法、系统及系统开发方法
CN105630557B (zh) 热补丁方法和装置
CN102609328B (zh) 系统差分升级方法和装置、移动终端
CN107301070B (zh) 一种升级方法及终端
WO2016179957A1 (zh) 一种应用程序的修复方法、装置和存储介质
CN103761124B (zh) 用于保护测控装置的嵌入式Linux系统启动方法
CN104820586B (zh) 一种航天器嵌入式软件在轨维护方法
CN104298534B (zh) 基于Lua语言的编程方法和装置
CN107391104A (zh) 一种客户端与react native代码的更新依赖管理方法、装置及系统
CN105511911A (zh) 系统固件升级包的生成方法及装置
CN105786538A (zh) 基于安卓系统的软件升级方法和装置
CN105468383A (zh) 一种数据升级方法及装置
CN106874195A (zh) 一种针对android应用的bug修复和持续交付方案
CN106610839A (zh) 发布升级包的方法、轻量升级方法、装置及系统
CN102156649B (zh) 一种补丁安装方法及装置
CN102981872A (zh) 终端设备开机、升级方法和终端设备
CN101963911A (zh) 补丁生成方法和装置
CN111142922B (zh) 应用程序更新方法、装置、终端及服务器
JP2006518059A (ja) フォールト・トレラントな更新エージェントを有するモバイルハンドセット
CN105677422A (zh) 同时更新监控程序和应用程序及后续更新应用程序的方法
CN111026398B (zh) 基于缓存的数据集成的构建方法与构建系统
CN107766247A (zh) Bootloader的测试方法、装置及可读存储介质
CN104166554B (zh) 一种支持多操作系统的软件开发方法及安装方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant