发明内容
本申请实施例的目的旨在提供一种软件升级方法、装置、电子设备及计算机可读存储介质。
一方面,本申请实施例提供了一种软件升级方法,该方法包括:
响应于针对目标软件的升级请求,获取目标软件对应的差分包,并确定存储差分包所需的目标空间大小;
若目标空间大小不大于第一存储区的第一空间大小,则将差分包存储至第一存储区,第一存储区是用于存储差分包的存储空间;
若目标空间大小大于第一空间大小,则确定第二存储区的可用存储空间的第二空间大小,若第一空间大小与第二空间大小之和不小于目标空间大小,则将差分包存储至可用存储空间和第一存储区中,第二存储区是存储目标软件的固件的存储空间;
基于差分包对目标软件进行升级。
另一方面,本申请实施例提供了一种软件升级装置,该装置包括:
差分包获取模块,用于响应于针对目标软件的升级请求,获取目标软件对应的差分包,并确定存储差分包所需的目标空间大小;
差分包存储模块,用于在目标空间大小不大于第一存储区的第一空间大小时,将差分包存储至第一存储区,第一存储区是用于存储差分包的存储空间;
在目标空间大小大于第一空间大小时,则确定第二存储区的可用存储区的第二空间大小,在第二空间大小与第一空间大小之和不小于目标空间大小,则将差分包存储至可用存储区和第一存储区中,述第二存储区是存储目标软件的固件的存储空间;
升级模块,用于基于差分包对目标软件进行升级。
可选的,上述升级请求中包括目标软件的固件的版本标识,上述差分包是通过以下方式确定的:
基于版本标识,确定目标软件的固件的当前版本,以及目标软件对应的目标版本的固件;
基于当前版本的固件和目标版本的固件,确定差分包中包括的头文件、用于控制还原目标版本的固件的控制信息和用于升级用的差异数据,其中,头文件中包括用于表征存储差分包所需存储空间大小的空间大小标识;
基于头文件、控制信息和差异数据,生成差分包。
可选的,上述差分包获取模块在确定存储差分包所需的目标空间大小时,具体用于:
解析差分包,得到控制信息和差异数据;
确定存储控制信息所需的第三空间大小,以及存储差异数据所需的第四空间大小,目标空间大小为第三空间大小和第四空间大小之和;
上述差分包存储模块在将差分包存储至可用存储空间和第一存储区中时,具体用于:
计算第一空间大小和第三空间大小的第一差值;
将控制信息存储至第一存储区中,将差异数据中数据量等于第一差值的第一数据存储至第一存储区中,将差异数据中除第一数据之外的第二数据存储至可用存储空间中。
可选的,上述差分包存储模块在将差异数据中数据量等于第一差值的第一数据存储至第一存储区中,将差异数据中除第一数据之外的第二数据存储至可用存储空间中时,具体用于:
计算第四空间大小和第一差值的第二差值;
按照数据解析的顺序,将差异数据中数据量等于第二差值的先解析得到第二数据存储至可用存储空间中,将之后解析到的除第二数据之外的第一数据存储至第一存储区中;
上述升级模块在基于差分包对目标软件进行升级时,具体用于:
基于第一存储区中的控制信息,按照数据解析的顺序,对可用存储空间中的差异数据进行读取,并基于读取的数据对目标软件进行相应的升级操作;
删除可用存储空间中已读取的差异数据,将升级操作得到的数据存储至第二存储区中。
可选的,上述差分包获取模块在解析差分包,得到控制信息和差异数据时,具体用于:
将差分包中控制信息所处的第一数据分区的位置调整至差异数据所处的第二数据分区的位置之后;
按照差分包中数据分区的前后位置解析调整后的差分包解析调整后的差分包,得到控制信息和差异数据;
上述差分包存储模块在将差分包存储至可用存储空间和第一存储区中时,具体用于:
将控制信息存到第一存储区中,按照差异数据解析的顺序,将解析调整后的差分包得到的数据量等于第二差值的先解析得到的数据存储到可用存储空间中,并将之后解析到的数据存储到第一存储区中。
可选的,上述差分包处理模块在确定存储差分包所需的目标空间大小时,具体用于:
解析差分包的头文件,得到空间大小标识;
基于空间大小标识,确定存储差分包所需的目标空间大小。
可选的,上述差分包存储模块在将差分包存储至可用存储空间和第一存储区中时,具体用于:
解析差分包,得到解析后的数据;
将解析后的数据中数据量等于第二空间大小的第三数据存储至可用存储空间中;将解析后的数据中除第三数据之外的第四数据存储至第一存储区中。
另一方面,本申请实施例还提供了一种电子设备,该电子设备包括存储器和处理器,存储器中存储有计算机程序,处理器在运行计算机程序时执行本申请任一可选实施例中提供的软件升级方法。
另一方面,本申请实施例还提供了一种计算机可读存储介质,该存储介质中存储有计算机程序,该计算机程序在被处理器运行时,处理器执行本申请任一可选实施例中提供的软件升级方法。
再一方面,本申请实施例还提供了一种计算机程序产品或计算机程序,当其在计算机设备上运行时,是的计算机设备执行本申请所提供的任一可选实施方法。该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请任一可选实施方式中提供的软件升级方法。
本申请提供的技术方案带来的有益效果是:本申请实施例所提供的方案,在需要对目标软件升级时,即响应于针对目标软件的升级请求时,确定存储目标软件对应的差分包所需的目标空间大小,在用于存储差分包的第一存储区(如升级区)的第一空间大小小于存储目标软件对应的差分包所需目标空间大小,且目标空间大小不大于第一空间大小和第二存储区(如固件区)的第二空间大小之和时,通过第一存储区和第二存储区的可用存储空间存储该差分包。如此,在升级区侧的存储资源有限的情况下,可以充分利用固件区的可用存储资源来存储差分包,最大化存储资源,实现对差分包的存储完成目标软件的升级。
本申请附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本申请的实践了解到。
具体实施方式
下面详细描述本申请的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
在现有技术中,以嵌入式设备的网络环境运行为例,由于程序故障修复、性能改进等原因,需要对设备进行远程升级,如OTA(over the air)升级。一般是通过在WIFI网络中,实现嵌入式设备的在线固件更新,提供给用户更好体验的服务版本。OTA升级一般有三种方案,全量升级、增量升级和差分升级,全量升级为新固件全数据下载升级,多是针对网络环境好,内存和Flash资源空间大的情况下升级使用。增量升级,根据不同的解决方案,分为个别程序文件下载替换,其针对有文件系统的环境。差分升级是全量升级的一种变种,即只下载新旧固件的差异部分,在待升级设备侧还原出新固件的全量数据内容,然后进行升级的策略。
当前的差分升级,基本是为了减少网络传输时间,对新旧固件进行差分后升级。为了实现升级目标,需要有足够的资源对差分包进行整体存储、校验、升级还原等操作,而目前所面临的问题是对于低内存、低Flash存储空间的嵌入式设备,较大的差分包无法存放。
本申请是针对现有技术中资源空间有限的情况,为了实现最大化已有存储资源,提高差分包存放成功的最大可能性,而提出的一种软件升级方法。本申请方案适用于任何需要将当前版本的软件升级到目标版本的软件的场景,并且本申请方案适用于任何一种差分升级方法。
在该方案中,在需要对目标软件升级时,即响应于针对目标软件的升级请求时,确定存储目标软件对应的差分包所需的目标空间大小,在用于存储差分包的第一存储区(如升级区)的第一空间大小小于存储目标软件对应的差分包所需目标空间大小,且目标空间大小不大于第一空间大小和第二存储区(如固件区)的第二空间大小之和时,通过第一存储区和第二存储区的可用存储空间存储该差分包。如此,在升级区侧的存储资源有限的情况下,可以充分利用固件区的可用存储资源来存储差分包,最大化存储资源,实现对差分包的存储完成目标软件的升级。
基于上述所描述的应用场景,本申请实施例所提供的方案可以由任一电子设备执行,该电子设备可以是用户终端,也可以是服务器执行,其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统。用户终端可以包括以下至少一项:智能手机、平板电脑、笔记本电脑、台式计算机、智能电视、智能车载设备。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
本申请实施例提供的一种软件升级方法为将当前版本的软件升级到目标版本的软件。对于当前版本的软件,在安装该软件的用户终端的存储空间中包括第一存储区和第二存储区,其中,第一存储区用于存储将当前版本的软件升级到目标版本的软件所用的差分包,第二存储区用于存储该当前版本的软件对应的固件。
可选的,在无文件系统中,一般差分包的存放区域,即升级区的空间大小相对有限,则在无文件系统中,升级区存储不下差分包的情况比较多,由此,本申请方案适用于无文件系统的软件升级环境。
下面结合图1示出的一种软件升级方法对本申请方案进行说明,图1示出了本申请实施例提供的一种软件升级方法的流程示意图,该方法可以由电子设备执行,其中,该电子设备可以是用户终端,也可以是服务器。
如图1中所示,该方法可以包括以下步骤:
步骤S110,响应于针对目标软件的升级请求,获取目标软件对应的差分包,并确定存储差分包所需的目标空间大小。
如果该方法的执行主体为用户终端,则响应于针对目标软件的升级请求,获取目标软件对应的差分包,并确定存储差分包所需的目标空间大小可包括以下步骤:向服务器发送针对目标软件的升级请求,上述升级请求中包括目标软件的标识信息,接收服务器基于该标识信息发送的差分包,并确定存储差分包所需的目标空间大小。
如果该方法的执行主体为服务器,则响应于针对目标软件的升级请求,获取目标软件对应的差分包,并确定存储差分包所需的目标空间大小可包括以下步骤:接收用户终端发送的针对目标软件的升级请求,上述升级请求中包括目标软件的标识信息,基于该标识信息,确定与标识信息对应的差分包,将该差分包发送至用户终端,以使用户终端确定存储差分包所需的目标空间大小。
可以理解的是,在服务器将差分包发送至用户终端之前,通常先对该差分包进行编码,然后将编码后的差分包发送至用户终端,用户终端在接收到编码的差分包时,先进行解码,得到该差分包,再对该差分包进行后续处理。
其中,目标软件指的是需要进行升级的操作系统或应用程序,如果是应用程序,该应用程序可以是用户终端所安装的应用程序中的任意一个。在某个应用程序需要升级的时候,可基于用户对该目标软件的升级询问请求的同意来升级响应,生成升级请求。升级询问请求可以是服务器按照设定规则向安装了该某个应用程序的用户终端发送的升级询问请求,比如,可以是服务器按照升级周期向该用户终端发送的升级询问请求,基于该请求,可以在用户终端的客户端界面上显示是否升级的选项,该选项中包括同意升级选项以及不同意升级选项,如果用户选择了同意升级选项,则对应生成升级请求,并发送给服务器;如果用户选择了不同意升级选项,则不做任何处理。
目标软件的标识信息用于标识该软件的身份,比如,该标识信息中可以包括目标软件的固件的版本标识,则基于该版本标识可以知道该目标软件的当前版本,即用户终端当前所安装的目标软件的版本,服务器可以对应多个软件,则标识信息中还可以包括目标软件的软件标识,则基于软件标识,服务器可以知道目标软件是服务器对应的多个软件中的哪个软件。标识信息可通过文字、字符、数字中的至少一项表示,本申请中不限定标识信息的具体表现形式。
服务器接收了升级请求后,会基于标识信息,确定是哪个软件需要升级,以及目标软件的当前版本的固件,并基于目标软件的当前版本的固件以及目标版本的固件生成差分包。其中,将当前版本的软件与目标版本的软件对应的差异部分称为差分包,在服务器端下载该差分包后,在用户终端侧,基于该差分包可还原出目标版本的软件。其中,目标版本为当前版本所要升级到的版本,比如,当前版本为2.0版本,目标版本为3.0版本,则表示基于该升级请求,要将目标软件从2.0版本升级到3.0版本。基于当前版本的固件和目标版本的固件所生成的差分包仅用于将目标软件从当前版本升级到目标版本。
服务器基于当前版本的固件和目标版本的固件生成差分包的具体实现方式为:基于版本标识,确定目标软件的固件的当前版本,以及目标软件对应的目标版本的固件;基于当前版本的固件和目标版本的固件,确定差分包中包括的头文件、用于控制还原目标版本的固件的控制信息和用于升级用的差异数据,其中,头文件中包括用于表征存储差分包所需存储空间大小的空间大小标识;基于头文件、控制信息和差异数据,生成差分包。
其中,差分包指的是由目标软件的当前版本升级到目标版本所需要的信息。差分包中包含控制信息,差异数据以及头文件;在升级时,可基于控制信息控制用于升级的差异数据,还原出目标版本的固件的数据。
差异数据中包括差分信息和额外信息,差分信息指的是当前版本的固件与目标版本的固件之间的存在差异的信息,比如,当前版本的固件中的a信息在目标版本的固件中对应的信息为b信息,差分信息即为b信息与a信息之间的差值对应的信息。额外信息指的是相较于目标版本的固件,当前版本的固件中不存在的信息,或者还可以理解为,目标版本的固件相较于当前版本的固件增加的信息,在升级时,可将该额外信息通过插入的方式融合至当前版本的固件,以作为目标版本的固件(新固件)中的信息。
在本申请的一可选方案中,由前文描述可知,差分包的头文件中包含表征存储差分包所需存储空间大小的空间大小标识,则确定存储差分包所需的目标空间大小时,包括如下步骤:解析差分包的头文件,得到空间大小标识;基于空间大小标识,确定存储差分包所需的目标空间大小。
其中,由于在生成差分包的时候,头文件中包含了表征存储该差分包所需存储空间的目标空间大小的空间大小标识,则在需要确定存储差分包所需存储空间的目标空间大小时,可在解析差分包的头文件时,基于解析得到的空间大小标识,确定目标空间大小,由于先解析的是差分包的头文件,从而可以减少数据处理量。
在另一个方案中,差分包的头文件中还可以包括差分包的文件格式、表征差分包中控制信息的数据量大小的标识,表征差异数据的数据量大小的标识等。通过这些信息可以具体了解差分包的格式以及其中包含的数据的具体情况,那么通过解析这些信息也可以确定该差分包所占存储空间的空间大小。
步骤S120,若目标空间大小不大于第一存储区的第一空间大小,则将差分包存储至第一存储区。
步骤S130,若目标空间大小大于第一空间大小,则确定第二存储区的可用存储空间的第二空间大小,若第一空间大小与第二空间大小之和不小于目标空间大小,则将差分包存储至可用存储空间和第一存储区中,第二存储区是存储目标软件的固件的存储空间。
一方面,基于目标空间大小,可以知道存储差分包所需的存储空间的空间大小,则在目标空间大小不大于第一存储区的空间大小时,表明第一存储区可以存储得下该差分包,则可直接将该差分包存储至该第一存储区。其中,第一存储区通常为用于存储差分包的存储空间,例如升级区,该第一存储区的空间大小通常为预先配置好的,在本例中,该存储空间较小,一般无法存储较大的差分包。
另一方面,在目标空间大小大于第一空间大小时,表明第一存储区存储不下该差分包,则此时可以结合使用第二存储区来保存差分包。第二存储区通常是存储目标软件的固件的存储空间,例如存储主版本固件(当前版本的固件)的固件区。固件区的可用存储空间的空间大小可以基于固件区的总空间大小和存储目标软件的固件所需(主版本固件已占用)的存储空间的空间大小来确定。在目标空间大小不大于第二空间大小和第一空间大小之和时,即可用存储空间和第一存储区可以存储得下该差分包时,将该差分包存储至第一存储区和可用存储空间中,这样可以充分利用第二存储区的存储资源,最大化存储资源,在第一存储区不够用的时候,也可实现对目标软件的差分升级。
可以理解的是,上述步骤S120和步骤S130是并行执行的两个步骤,本申请方案中并不限定该两个步骤的执行顺序,如果目标空间大小不大于第一空间大小,则执行步骤S120,如果目标空间大小大于第一空间大小,则执行步骤S130。
步骤S140,基于差分包对目标软件进行升级。
由于本申请方案适用于任何差分升级算法,由此,在基于差分包对目标软件升级时,可采用任一种升级算法进行升级,升级指的是将当前版本的固件升级至目标版本的固件,升级后对应可得到一个目标版本的软件。
可选的,本申请的方案可采用OTA(Over-the-AirTechnology)升级技术进行升级,OTA技术是指用户终端通过无线网络下载远程服务器上的升级包(差分包),基于差分包对用户终端的操作系统或应用程序进行升级的技术。
在本申请方案中,实现差分升级的方式有很多,本申请的方案适用于任何一种差分升级方法,比如,bsdiff算法、hdiffpatch算法、xdelta3算法等。
本申请实施例所提供的方案,在需要对目标软件升级时,即响应于针对目标软件的升级请求时,确定存储目标软件对应的差分包所需的目标空间大小,在用于存储差分包的第一存储区(如升级区)的第一空间大小小于存储目标软件对应的差分包所需目标空间大小,且目标空间大小不大于第一空间大小和第二存储区(如固件区)的第二空间大小之和时,通过第一存储区和第二存储区的可用存储空间存储该差分包。如此,在升级区侧的存储资源有限的情况下,可以充分利用固件区的可用存储资源来存储差分包,最大化存储资源,实现对差分包的存储完成目标软件的升级。
在本申请的可选方案中,上述将差分包存储至可用存储空间和第一存储区中,包括:解析差分包,得到解析后的数据;将解析后的数据中数据量等于第二空间大小的第三数据存储至可用存储空间中;将解析后的数据中除第三数据之外的第四数据存储至第一存储区中。
需要说明的是,差分包中的数据按照什么顺序存储,在升级使用时,就按照什么样的顺序使用,则在存储差分包中的数据使时,可按照解析后的数据的顺序,将位于差分包靠前位置的、数据量等于第二空间大小的第三数据存储至可用存储空间(固件区可用的剩余资源)中,将位于差分包靠后位置的、解析后的数据中除第三数据之外的第四数据存储至第一存储区(升级区)中。这样,在第二存储区的空间大小足够大的情况下,即在不占用可用存储空间的存储资源的情况下,通过第二存储区可存储得下升级后得到的目标版本的固件。
具体地,在得到解析后的数据后,可基于第二空间(固件区剩余资源)大小确定第三数据,该第三数据为数据量等于第二空间大小,且位于差分包中靠前位置的数据,比如,第二空间大小为20k(k为数据的存储单位,千字节KB(Kilobyte)),则从差分包中选择位于差分包头部的20k的数据作为第三数据存储至可用存储空间,将差分包位于尾部的第四数据存储至第一存储区(升级区)。
在实际应用中,通常控制信息在差分包中的位置位于差异数据之前,且控制信息的数据量要小于差异数据的数据量,则存储至可用存储空间的数据通常包括控制信息以及第一存储区未存储得下的差异数据,存储至第一存储区的数据通常为差异数据。
在本申请的可选方案中,确定存储差分包所需的目标空间大小,包括:解析差分包,得到控制信息和差异数据;确定存储控制信息所需的第三空间大小,以及存储差异数据所需的第四空间大小,目标空间大小为第三空间大小和第四空间大小之和。将差分包存储至可用存储空间和第一存储区中,包括:计算第一空间大小和第三空间大小的第一差值;将控制信息存储至第一存储区中,将差异数据中数据量等于第一差值的第一数据存储至第一存储区中,将差异数据中除第一数据之外的第二数据存储至可用存储空间中。
其中,第二存储区是用于存储目标软件的固件的存储空间,升级前,第二存储区存储的是当前版本的固件,在升级后,第二存储区存储的固件为目标版本的固件。在实际应用中,由于控制信息为用于控制还原目标版本的固件的数据,在升级过程中一直要使用,而差异数据是用于升级用的数据,可以一边使用一边删除,因此为了尽量少占用第二存储区的存储资源,可在存储差分包时,先解析差分包,得到控制信息和差异数据,然后从控制信息和差异数据中确定出存储至第一存储区的数据,以及存储至第二存储区的可用存储空间的数据。在存储时,由于控制信息的数据量通常小于差异数据的数据量,则通常第一存储区存储得下控制信息,并且在第一存储区存储控制信息后,通常还有剩余的存储空间用来存储差异数据。基于第一空间大小和第三空间大小确定的第一差值表征了存储至第一存储区的差异数据的数据量大小,基于该第一差值,将第二类型中数据量等于第一差值的第一数据存储至第一存储区,此时,第一存储区被控制信息和第一数据存满,将差异数据中除第一数据之外的第二数据存储至可用存储空间。
在本申请的可选方案中,上述将差异数据中数据量等于第一差值的第一数据存储至第一存储区中,将差异数据中除第一数据之外的第二数据存储至可用存储空间中,包括:计算第四空间大小和第一差值的第二差值;按照数据解析的顺序,将差异数据中数据量等于第二差值的先解析得到第二数据存储至可用存储空间中,将之后解析到的除第二数据之外的第一数据存储至第一存储区中。上述基于差分包对目标软件进行升级,包括:基于第一存储区中的控制信息,按照数据解析的顺序,对可用存储空间中的差异数据进行读取,并基于读取的数据对目标软件进行相应的升级操作;删除可用存储空间中已读取的差异数据,将升级操作得到的数据存储至第二存储区中。
其中,在实际应用中,通常在升级过程中,基于再次利用第二存储区的存储资源的需求,需要先读取可用存储空间中的数据进行升级处理。由于控制信息在升级过程中一直要使用,而差异数据可以一边使用一边删除,则在本申请的方案中,在存储差分包中的数据时,可先计算第四空间大小和第一差值的第二差值,该第二差值表征了存储至可用存储空间的差异数据的数据量的大小,则基于该第二差值,按照数据解析的顺序,将差异数据中数据量等于第二差值的先解析得到第二数据存储至可用存储空间中,将之后解析到的除第二数据之外的第一数据存储至第一存储区中。这样,存储至可用存储空间的差异数据即为解析差分包时先解析得到的差异数据,一方面,在升级时,同样按照数据解析的顺序,先从可用存储空间中读取差异数据,一边读取,一边升级,一边删除可用存储空间中已读取的差异数据,以使得在基于读取的数据对目标软件进行相应的升级操作时,可将升级操作得到的数据依次存储至第二存储区中,以实现对第二存储区的存储资源的再次利用。
另一方面,通过将差异数据中先解析得到的数据存储至可用存储空间,在升级得到的目标版本的固件对应的数据量大于当前版本的固件对应的数据量时,可利用可用存储空间存储第六数据,第六数据的数据量等于目标版本的固件对应的数据量与当前版本的固件对应的数据量之差,即可在目标版本的固件的数据量较大时,可通过释放的可用存储空间存储目标版本的固件的数据,从而可确保目标软件升级后还可正常使用。
在本申请的可选方案中,上述控制信息位于差分包的第一数据分区中,差异数据位于差分包的第二数据分区中,第一数据分区位于第二数据分区之前。进一步,解析差分包,得到控制信息和差异数据,包括:将差分包中控制信息所处的第一数据分区的位置调整至差异数据所处的第二数据分区的位置之后(即将第一数据分区的位置调整至第二数据分区的位置之后);按照差分包中数据分区的前后位置解析调整后的差分包,得到控制信息和差异数据。那么,将差分包存储至可用存储空间和第一存储区中,包括:将控制信息存到第一存储区中,按照数据解析的顺序,将解析调整后的差分包得到的数据量等于第二差值的先解析得到的数据存储到可用存储空间中,并将之后解析到的数据存储到第一存储区中。
其中,差分包中的控制信息和差异数据可以对应不同的数据分区,比如,控制信息位于第一数据分区中,差异数据位于第二数据分区中,第一数据分区位于第二数据分区之前,则为了使先解析出的数据是差异数据,可以将差分包中第一数据分区和第二数据分区互换位置,即可以将第一数据分区的位置调整至第二数据分区的位置之后,得到调整后的差分包。此时,在该调整后的差分包中,差异数据位于控制信息之前,然后按照数据解析的顺序,将解析调整后的差分包得到的数据量等于第二差值的先解析得到的数据(对应前文的第一数据)存储到可用存储空间中,并将之后解析到的数据(对应前文的第二数据)存储到第一存储区中。
作为一个示例,参见图2所示的调整前的差分包中数据分区的示意图,如图2所示,控制信息位于差分包的第一数据分区中,差异数据位于差分包的第二数据分区中,第一数据分区位于第二数据分区之前。参见图3所示的调整后的差分包中数据分区的示意图,如图3所示,控制信息仍位于差分包的第一数据分区中,差异数据仍位于差分包的第二数据分区中,但通过调整,第一数据分区位于第二数据分区之后。
在本申请的可选方案中,若目标空间大小大于第二空间大小与第一空间大小之和,该方法还可以包括:生成提示信息并显示,提示信息用于提示无法升级。
其中,在目标空间大小大于第二空间大小与第一存储区的空间大小之和时,表明可用存储空间和第一存储区存储不下差分包,则可生成提示信息并显示给用户,通过该提示信息告知用户无法进行升级。
可选的,提示信息可以为文字、语音、动画等,本申请中不限定提示信息的具体表现形式,均在本申请的保护范围内。
为了更好的说明及理解本申请所提供的方法的原理,下面结合一个可选的具体实施例对本申请的方案进行说明。需要说明的是,该具体实施例中的各步骤的具体实现方式并不应当理解为对于本申请方案的限定,在本申请所提供的方案的原理的基础上,本领域技术人员能够想到的其他实现方式也应视为本申请的保护范围之内。
参见图4所示的一种软件升级系统的结构示意图,如图4所示,该系统包括服务器,用户终端A,用户终端B和用户终端C,用户终端A,用户终端B和用户终端C中均安装有应用程序a,应用程序a为目标软件,在上述三个用户终端中的任何一个用户终端向服务器发送升级请求时,均可通过本申请的方案实现对应用程序a的升级。其中,用户终端A,用户终端B和用户终端C仅是示例,本申请方案中不限定用户终端A的数量以及具体表现形式,比如,本示例中,用户终端可以为手机。可以理解的是,为了便于维护,不同的应用程序可以对应不同的服务器。
在本示例中,目标软件为用户的手机上安装的应用程序a,该应用程序的当前版本为2.0。本示例中,对于用户的手机的无文件系统,在无文件系统,可通过固态存储器flash存储差分包以及当前版本的应用程序a对应的固件。其中,flash包括第一存储区(也可称为升级区)和第二存储区(也可称为固件区),第一存储区用于存储差分包,第二存储区用于存储应用程序a当前版本的固件,在本示例中,假设,第一存储区的第一空间大小为50k,第二存储区的存储空间大小为150k。
用户的手机的客户端界面上显示有针对应用程序a的“升级”标识,基于用户对该标识的触发操作,生成升级请求,将该升级请求发送给服务器,该升级请求中包括应用程序a的标识信息,该标识信息中包括应用程序a的应用标识(软件标识)和版本标识。
服务器在接收到该升级请求后,基于该应用程序a的版本标识,确定该应用程序a对应的目标版本的固件,目标版本为3.0,则该升级请求的目的是要将目标软件从2.0版本升级到3.0版本。在确定了目标版本的固件后,由服务器基于该应用程序a的当前版本的固件和目标版本的固件,生成差分包。该差分包的具体生成过程具体如下:基于版本标识,确定目标软件的固件的当前版本,以及目标软件对应的目标版本的固件;基于当前版本的固件和目标版本的固件,确定差分包中包括的头文件、控制信息和差异数据,其中,头文件中包括用于表征存储差分包所需存储空间大小的空间大小标识;基于头文件、控制信息、差异数据,生成差分包。
其中,控制信息可以理解为用于控制还原目标版本的固件的信息,差异数据可以理解为用于升级用的数据,在升级时,基于控制信息控制差异数据还原得到目标版本的固件,以实现对目标软件的升级。具体的,差异数据中包括差分信息和额外信息。
生成差分包后,将差分包进行编码,并将编码后的差分包发送至升级请求对应的用户终端(用户的手机)。
升级请求中可还包括终端标识,其中,终端标识用于标识发送升级请求的用户终端的身份,则基于终端标识,服务器可将该编码后的差分包发送给用户终端。其中,终端标识可以为文字、字符、符号中的至少一种,本申请中不限定终端标识的具体表现形式。
用户终端在接收到服务器发送的编码后的差分包后,先对该编码后的差分包进行解码得到该差分包;然后解析该差分包的头文件,基于解析到的头文件的空间大小标识时,基于空间大小标识,确定存储差分包所需的目标空间大小。
如果目标空间大小为40k,即目标空间大小不大于第一存储区的第一空间大小(50k),则将差分包存储至第一存储区。目标空间大小不大于第一空间大小时,表明第一存储区可以存储下该差分包,则可直接将该差分包存储至该第一存储区。
如果目标空间大小为60k,即目标空间大小大于第一空间大小(50k),表明第一存储区存储不下该差分包,则此时可以确定第二存储区的可用存储空间,比如,可用存储空间的第二空间大小为30k,第二存储区通常是存储目标软件的固件的存储空间(目标软件的固件所占的存储空间大小为120k)。则在目标空间大小60k不大于第二空间大小和第一空间大小之和(30k+50k=80k)时,即在通过可用存储空间和第一存储区可以存储得下该差分包时,将该差分包存储至第一存储区和可用存储空间中,这样可以充分利用了第二存储空阿的存储资源,在第一存储区不够用的时候,也可实现对目标软件的升级。
通常在差分包中,控制信息位于差分包的第一数据分区中,差异数据位于差分包的第二数据分区中,第一数据分区位于第二数据分区之前。通常差分包中的数据按照数据解析的顺序进行存储,即先解析出什么数据,就先存储什么数据。差分包中的数据按照什么顺序存储,在升级使用时,就按照什么样的顺序使用。则在升级过程中,基于再次利用第二存储区的存储资源的需求,需要先读取可用存储空间中的数据进行升级处理,由于控制信息在升级过程中一直要使用,差异数据可以一边使用一边删除,则在本申请的方案中,为了使解析差分包时,先解析出的数据是差异数据,在解析差分包时,可以先将差分包中第一数据分区和第二数据分区互换位置,即可以将第一数据分区的位置调整至第二数据分区的位置之后,得到调整后的差分包。
此时,在调整后的差分包中,差异数据位于控制信息之前,然后确定存储控制信息所需的第三空间大小(比如,为10k),以及存储差异数据所需的第四空间大小(比如,为50k),目标空间大小为第三空间大小和第四空间大小之和。
计算第一空间大小50k和第三空间大小10k的第一差值40k,第一差值表征了存储至第一存储区的差异数据的数据量大小,基于第一差值,计算第四空间大小50k和第一差值40k的第二差值10k,第二差值表征了存储至可用存储空间的差异数据的数据量的大小,基于该第二差值10k,按照差分包中数据分区的前后位置解析调整后的差分包,将差异数据中数据量等于第二差值10k的先解析得到第二数据(10k)存储至可用存储空间中,将之后解析到的除第二数据之外的第一数据(40k)存储至第一存储区中。这样,存储至可用存储空间的差异数据即为解析差分包时先解析得到的差异数据,在升级时,一方面,按照数据解析的顺序,先从可用存储空间中读取差异数据,一边读取,一边升级,一边删除可用存储空间中已读取的差异数据,以使得在基于读取的数据对目标软件进行相应的升级操作时,可将升级操作得到的数据依次存储至第二存储区中。
另一方面,如果升级得到的目标版本的固件所需存储空间大小为140k,大于当前版本的固件所需存储空间大小,则在基于可用存储空间中的差异数据对应用程序a进行相应的升级操作时,可将升级操作得到的数据先依次存储至第一存储区中除可用存储空间之外的存储空间(120k对应的存储空间),将数据量大于120k的数据存储至可用存储空间(删除的已读取的数据对应的存储空间),保证第二存储区可以存储得下目标版本的固件。
在通过上述步骤对目标软件进行升级后,得到目标版本的引用程序,此时,升级后的应用程序a为3.0版本的应用程序。
基于与本申请图1所提供的方法相同的原理,本申请实施例还提供了一种软件升级装置,如图5所示,该软件升级装置20包括差分包获取模块210,差分包存储模块220和升级模块230。
其中,差分包获取模块210,用于响应于针对目标软件的升级请求,获取目标软件对应的差分包,并确定存储差分包所需的目标空间大小;差分包存储模块220,用于在目标空间大小不大于第一存储区的第一空间大小时,将差分包存储至第一存储区,第一存储区是用于存储差分包的存储空间;在目标空间大小大于第一空间大小时,则确定第二存储区的可用存储区的第二空间大小,在第二空间大小与第一空间大小之和不小于目标空间大小,则将差分包存储至可用存储区和第一存储区中,述第二存储区是存储目标软件的固件的存储空间;升级模块230,用于基于差分包对目标软件进行升级。
本申请实施例所提供的方案,在需要对目标软件升级时,即响应于针对目标软件的升级请求时,确定存储目标软件对应的差分包所需的目标空间大小,在用于存储差分包的第一存储区(如升级区)的第一空间大小小于存储目标软件对应的差分包所需目标空间大小,且目标空间大小不大于第一空间大小和第二存储区(如固件区)的第二空间大小之和时,通过第一存储区和第二存储区的可用存储空间存储该差分包。如此,在升级区侧的存储资源有限的情况下,可以充分利用固件区的可用存储资源来存储差分包,最大化存储资源,实现对差分包的存储完成目标软件的升级。
可选的,上述升级请求中包括目标软件的固件的版本标识,上述差分包是通过以下方式确定的:基于版本标识,确定目标软件的固件的当前版本,以及目标软件对应的目标版本的固件;基于当前版本的固件和目标版本的固件,确定差分包中包括的头文件、用于控制还原目标版本的固件的控制信息和用于升级用的差异数据,其中,头文件中包括用于表征存储差分包所需存储空间大小的空间大小标识;基于头文件、控制信息和差异数据,生成差分包。
可选的,上述差分包获取模块210在确定存储差分包所需的目标空间大小时,具体用于:解析差分包,得到控制信息和差异数据;确定存储控制信息所需的第三空间大小,以及存储差异数据所需的第四空间大小,目标空间大小为第三空间大小和第四空间大小之和。上述差分包存储模块220在将差分包存储至可用存储空间和第一存储区中时,具体用于:计算第一空间大小和第三空间大小的第一差值;将控制信息存储至第一存储区中,将差异数据中数据量等于第一差值的第一数据存储至第一存储区中,将差异数据中除第一数据之外的第二数据存储至可用存储空间中。
可选的,上述差分包存储模块220在将差异数据中数据量等于第一差值的第一数据存储至第一存储区中,将差异数据中除第一数据之外的第二数据存储至可用存储空间中时,具体用于:计算第四空间大小和第一差值的第二差值;按照数据解析的顺序,将差异数据中数据量等于第二差值的先解析得到第二数据存储至可用存储空间中,将之后解析到的除第二数据之外的第一数据存储至第一存储区中。上述升级模块230在基于差分包对目标软件进行升级时,具体用于:基于第一存储区中的控制信息,按照数据解析的顺序,对可用存储空间中的差异数据进行读取,并基于读取的数据对目标软件进行相应的升级操作;删除可用存储空间中已读取的差异数据,将升级操作得到的数据存储至第二存储区中。
可选的,上述差分包获取模块210在解析差分包,得到控制信息和差异数据时,具体用于:将差分包中控制信息所处的第一数据分区的位置调整至差异数据所处的第二数据分区的位置之后;按照差分包中数据分区的前后位置解析调整后的差分包解析调整后的差分包,得到控制信息和差异数据;
上述差分包存储模块220在将差分包存储至可用存储空间和第一存储区中时,具体用于:将控制信息存到第一存储区中,按照差异数据解析的顺序,将解析调整后的差分包得到的数据量等于第二差值的先解析得到的数据存储到可用存储空间中,并将之后解析到的数据存储到第一存储区中。
可选的,上述差分包获取模块210在确定存储差分包所需的目标空间大小时,具体用于:解析差分包的头文件,得到空间大小标识;基于空间大小标识,确定存储差分包所需的目标空间大小。
可选的,上述差分包存储模块220在将差分包存储至可用存储空间和第一存储区中时,具体用于:解析差分包,得到解析后的数据;将解析后的数据中数据量等于第二空间大小的第三数据存储至可用存储空间中;将解析后的数据中除第三数据之外的第四数据存储至第一存储区中。
可选的,若目标空间大小大于第二空间大小与第一空间大小之和,该装置还包括:提示模块(未图示),用于生成提示信息并显示,提示信息用于提示无法升级。
本申请实施例的软件升级装置可执行本申请实施例所提供的软件升级方法,其实现原理相类似,本申请各实施例中的软件升级装置中的各模块、单元所执行的动作是与本申请各实施例中的软件升级方法中的步骤相对应的,对于视频播放装置的各模块的详细功能描述具体可以参见前文中所示的对应的软件升级方法中的描述,在此处不再赘述。
上述软件升级装置可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如该用户界面的显示装置为一个应用软件;该装置可以用于执行本申请实施例提供的方法中的相应步骤。
在一些实施例中,本发明实施例提供的软件升级装置可以采用软硬件结合的方式实现,作为示例,本发明实施例提供的软件升级装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本发明实施例提供的软件升级方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific IntegratedCircuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
在另一些实施例中,本发明实施例提供的软件升级装置可以采用软件方式实现,存储在存储器中的软件升级装置,其可以是程序和插件等形式的软件,并包括一系列的模块,包括软件升级装置20中的各模块,其中,软件升级装置20中的各模块用于实现本发明实施例提供的软件升级方法。
本申请实施例提供了一种软件升级装置,与现有技术相比,在需要对目标软件升级时,即响应于针对目标软件的升级请求时,确定存储目标软件对应的差分包所需的目标空间大小,在用于存储差分包的第一存储区(如升级区)的第一空间大小小于存储目标软件对应的差分包所需目标空间大小,且目标空间大小不大于第一空间大小和第二存储区(如固件区)的第二空间大小之和时,通过第一存储区和第二存储区的可用存储空间存储该差分包。如此,在升级区侧的存储资源有限的情况下,可以充分利用固件区的可用存储资源来存储差分包,最大化存储资源,实现对差分包的存储完成目标软件的升级。
上述从虚拟模块或者虚拟单元的角度介绍本申请的软件升级装置,下面从实体装置的角度介绍本申请的电子设备。
基于与本申请实施例提供的方法相同的原理,本申请实施例中提供了一种电子设备,该电子设备包括存储器和处理器;存储器中存储有计算机程序,该计算机程序在被处理器执行时,可以实现本申请任一可选方式中所提供的方法。
作为一个可选方案,图6中示出了本申请实施例所适用的一种电子设备4000的结构示意图。如图6所示,图6所示的电子设备4000包括处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscReadOnly Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器4003用于存储执行本申请方案的应用程序代码(计算机程序),并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述方法实施例所示的内容。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当该计算机程序在被处理器运行时,可以使得计算机可以执行前述方法实施例中相应内容。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述方法实施例涉及的各种可选实现方式中提供的方法。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。