本发明涉及升级技术领域,尤其涉及一种ota差分升级方法及装置。
背景技术:
ota(over-the-airtechnology)空中下载技术是一种通过无线网络进行数据下载的技术,现已被广泛应用于智能电视、手机、平板电脑、机顶盒等android设备的网络升级中。用户通过下载服务器端提供的针对客户端当前系统版本的差分文件并将差分文件通过打补丁的方式更新到当前系统版本中,从而实现ota的升级。
现有的终端升级方式可以利用下载差分升级包的方式进行升级,将差分升级包放在终端的缓存(cache)分区中进行存储,然后在cache分区进行升级操作,然而终端的cache分区的容量通常十分有限,当更新和新增的应用比较多时会导致差分升级包的大小远大于终端的cache分区容量时,由于cache分区的存储空间不够容纳ota差分包,则必然直接导致ota升级失败的问题,这种情况下用户需要删除终端中的其他文件后再进行升级或直接放弃升级,严重影响用户体验。
技术实现要素:
为了解决上述背景技术中提到的技术问题,本发明提供一种ota差分升级方法及装置。本发明实施例提供的具体技术方案如下:
第一方面,提供了一种ota差分升级方法,应用于终端,所述方法包括:
获取具有不同顺序标识的多个差分包,并将所述多个差分包存储至目标存储分区中,其中,所述目标存储分区为非缓存cache分区;
将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中;
在系统重启进入recovery模式后,根据所述指定文件中的特定信息,从所述目标存储分区中提取所述顺序标识最小的差分包以进行升级;以及
在对所述顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从所述目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级。
进一步地,所述多个差分包是通过根据所述终端的当前系统版本的安装包与待升级到的目标系统版本的安装包进行定制生成的。
进一步地,所述目标存储分区为一个或多个,所述将所述多个差分包存储至目标存储分区中,包括:
根据所述多个差分包各自的存储容量,将所述多个差分包存储至一个或多个所述目标存储分区。
进一步地,所述将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中步骤之前,所述方法还包括:
对所述多个差分包中的每一个差分包进行签名验证。
进一步地,所述将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中,包括:
通过installpackage接口,将顺序标识最小的差分包的文件名称和存储路径名称写入/cache/recovery/目录下的command文件中,其中,所述文件名称中包含顺序标识。
进一步地,所述方法还包括:
在所述recovery模式下检测到对所述多个差分包完成升级后,删除存储在所述指定路径下的所述指定文件。
进一步地,所述方法还包括:
在所述删除之后,生成并输出重启提示信息。
第二方面,提供了一种ota差分升级装置,应用于终端,所述装置包括:
获取模块,用于获取具有不同顺序标识的多个差分包;
存储模块,用于将所述多个差分包存储至目标存储分区中,其中,所述目标存储分区为非缓存cache分区;
写入模块,用于将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中;
升级模块,用于在系统重启进入recovery模式后,根据所述指定文件中的特定信息,从所述目标存储分区中提取所述顺序标识最小的差分包以进行升级,并在对所述顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从所述目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级。
进一步地,所述多个差分包是通过根据所述终端的当前系统版本的安装包与待升级到的目标系统版本的安装包进行定制生成的。
进一步地,所述目标存储分区为一个或多个,所述存储模块具体用于:
根据所述多个差分包各自的存储容量,将所述多个差分包存储至一个或多个所述目标存储分区。
进一步地,所述装置还包括:
验签模块,用于对所述多个差分包中的每一个差分包进行签名验证。
进一步地,所述写入模块具体用于:
通过installpackage接口,将顺序标识最小的差分包的文件名称和存储路径名称写入/cache/recovery/目录下的command文件中,其中,所述文件名称中包含顺序标识。
进一步地,所述装置还包括:
删除模块,用于在所述recovery模式下检测到对所述多个差分包完成升级后,删除存储在所述指定路径下的所述指定文件。
进一步地,所述装置还包括:
提示模块,用于在所述删除之后,生成并输出重启提示信息。
第三方面,提供了一种终端,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面任一所述的ota差分升级方法。
第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第一方面任一所述的ota差分升级方法。
本发明实施例提供一种ota差分升级方法及装置,通过获取具有不同顺序标识的多个差分包,并将多个差分包存储至非缓存cache分区的目标存储分区中,这样在版本差异升级的ota差分包的存储容量比较大的情况下,通过使用将多个差分包存储于空间比较大的存储分区,并利用多个差分包来实现升级,能够避免现有技术中由于终端cache分区的存储空间不够容纳ota差分包而直接导致ota升级失败的问题;另外,由于将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中,并在系统重启进入recovery模式后根据指定文件中的特定信息从目标存储分区中提取顺序标识最小的差分包以进行升级,以及在对顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级,如此实现了自动地对多个差分包进行连续升级,并且在连续升级过程中无需多次弹出升级提示框,避免了每完成一个差分包的升级就需要重启一次的情况发生,由此能够提高用户体验。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种ota差分升级方法的流程图;
图2为本发明实施例提供的一种ota差分升级装置的结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
实施例一
本发明实施例提供了一种ota差分升级方法,该方法可以应用于终端中,该终端可以是智能电视、手机、平板电脑、智能音箱、机顶盒等设备,如图1所示,该方法可以包括步骤s11至步骤s14。
步骤s11,获取具有不同顺序标识的多个差分包,并将多个差分包存储至目标存储分区中,其中,目标存储分区为非缓存cache分区。
这里,不同差分包对应不同的顺序标识,各个差分包的顺序标识可以包含在各个差分包的名称中,其中,顺序标识可以是数字标识或字母标识,例如,顺序标识为数字标识,可以是update1.zip、update2.zip、update3.zip……。
其中,多个差分包是通过根据终端的当前系统版本的安装包与待升级到的目标系统版本的安装包进行定制生成的,具体来说,将终端的当前系统版本的安装包与待升级到的目标系统版本的安装包进行差分计算,得到一个或多个应用的版本差异信息,根据一个或多个应用的版本差异信息,定制生成多个差分包。于本实施例中,定制生成的每一个差分包的存储容量均小于缓存cache分区。
示例性地,以终端为智能电视为例,当新增的或者更改的应用比较多时,为了使电视用户能够首先看到一个大版本升级后首页内容,并能够使电视正常播放视频内容,可以根据launcher、播放器等应用的版本差异信息定制生成update1.zip,然后按照预设的优先级顺序,根据其他需更新的应用的版本差异信息,定制生成update2.zip和update3.zip,这样可以得到用于对终端的当前系统版本进行差分升级的三个差分包并存储至服务器端,以供电视用户从服务器端下载对智能电视的当前系统版本进行版本升级,此外,还可以将定制生成的多个差分包拷贝到sd卡中,通过sd卡中的差分包进行版本升级。
具体地,当终端检测到应用升级请求时,确定终端的当前系统版本以及待升级到的目标系统版本,通过向服务器发送升级包下载请求,从服务器一次性下载当前系统版本与目标系统版本的多个差分包,并判断多个差分包的存储容量总和是否超过缓存cache分区时,若是,则将下载的多个差分包存储至目标存储分区中。
其中,将多个差分包存储至目标存储分区中,该过程可以包括:
根据多个差分包各自的存储容量,将多个差分包存储至一个或多个目标存储分区。其中,一个或多个目标存储分区包括data分区和system分区和其他非缓存cache分区中的一个或多个,其他非缓存cache分区可以为外置sdcard分区。在实际应用中,当获取到的多个差分包各自的存储容量之和小于某个非缓存cache分区时,可以将多个差分包一起存储至该非缓存cache分区内。
本实施例中,由于终端内存中的data分区、system分区等非缓存cache分区大于缓存cache分区,因此当在版本差异升级的ota差分包的存储容量比较大的情况下,通过使用将多个差分包存储于空间比较大的存储分区,以便后续可以依序利用多个差分包来实现升级,从而可以避免现有技术中由于终端cache分区的存储空间不够容纳ota差分包而直接导致ota升级失败的问题。
步骤s12,将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中。
具体地,对目标存储分区中的各个差分包的顺序标识进行扫描,确定出顺序标识最小的差分包,通过installpackage接口,将顺序标识最小的差分包的文件名称和存储路径名称写入/cache/recovery/目录下的command文件中。其中,文件名称中包含顺序标识,顺序标识最小的差分包的存储路径名称用于指示存储该顺序标识最小的差分包的存储分区。
这里,当创建目录/cache/recovery/目录下不存在command文件时,可以通过创建command文件并保存在该目录下,如果存在command文件,则删除已存在的command文件并重新生成,将顺序标识最小的差分包的文件名称和存储路径名称作为参数写入到command文件中。
进一步地,在执行步骤s12之前,本发明实施例提供的方法还可以包括:
对多个差分包中的每一个差分包进行签名验证。
具体地,通过调用recoverysystem类提供的verifypackage方法对各个差分包进行签名验证,只有当签名验证通过才执行步骤s12,否则输出异常信息。另外,如果发生签名验证失败的情况,可以清除签名验证失败的差分包,并再次向服务器发送升级包下载请求。
步骤s13,在系统重启进入recovery模式后,根据指定文件中的特定信息,从目标存储分区中提取顺序标识最小的差分包以进行升级。
具体地,系统重启时首先会判断/cache/recovery目录下是否有command文件,如果存在就进入recovery模式,否则就正常启动。当进入到recovery模式下,将执行recovery.cpp的main函数,根据command文件中写入的文件名称和存储路径名称对main函数中的update_package进行赋值,执行install_package方法,从目标存储分区中提取顺序标识最小的差分包并存储到缓存cache分区中,以执行升级操作。
在升级操作前,首先会创建一个log文件,升级过程包括出错的信息都会写到这个log文件中,便于后续的分析工作。另外,为了确保升级的安全性,还可以对提取出的差分包通过调用verify_file方法进行签名验证,其中verify_file方法方法定义在verifier.cpp文件中,如果签名验证失败立即终止升级。
在升级操作过程中,执行mzopenziparchive方法,对提取出的差分包进行扫描,将该差分包的内容拷贝到变量zip中,该变量将作为参数用来执行升级脚本。通过执行try_update_binary函数读取差分包中的脚本文件update_binary进行升级。其中,try_update_binary函数用于读取升级包中的脚本文件并执行相应的函数。在此函数中,通过调用fork函数创建出一个子进程,在子进程中开始读取并执行升级脚本文件,通过管道与父进程交互,父进程则通过读取子进程传递过来的信息更新ui。
步骤s14,在对顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级。
具体地,在对顺序标识最小的差分包完成升级后,对目标存储分区中未提取过的差分包的顺序标识进行扫描,根据顺序标识从小到大的顺序,依次从目标存储分区中提取未提取过的差分包,每次提取出一个差分包,将该差分包存储到缓存cache分区中执行升级操作,直至对所有差分包完成升级操作。
本实施例中,在对顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级,如此实现了自动地对多个差分包进行连续升级,并且在连续升级过程中无需多次弹出升级提示框,避免了每完成一个差分包的升级就需要重启一次的情况发生,由此能够提高用户体验。
进一步地,在步骤s14执行之后,本发明实施例提供的方法还可以包括:
在recovery模式下检测到对多个差分包完成升级后,删除存储在指定路径下的指定文件。
其中,在删除存储在指定路径下的指定文件的同时,也可以删除存储于目标存储分区中的已提取过的多个差分包。
本实施例中,通过在recovery模式下检测到对多个差分包完成升级后清理包括command文件等临时文件,能够保证重启后正常进入launcher。
进一步地,本发明实施例提供的方法还可以包括:
在删除存储在指定路径下的指定文件之后,生成并输出重启提示信息。
具体地,重启提示信息用于指示终端系统的当前版本升级成功后正常启动。
本发明实施例提供一种ota差分升级方法,通过获取具有不同顺序标识的多个差分包,并将多个差分包存储至非缓存cache分区的目标存储分区中,这样在版本差异升级的ota差分包的存储容量比较大的情况下,通过使用将多个差分包存储于空间比较大的存储分区,并利用多个差分包来实现升级,能够避免现有技术中由于终端cache分区的存储空间不够容纳ota差分包而直接导致ota升级失败的问题;另外,由于将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中,并在系统重启进入recovery模式后根据指定文件中的特定信息从目标存储分区中提取顺序标识最小的差分包以进行升级,以及在对顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级,如此实现了自动地对多个差分包进行连续升级,并且在连续升级过程中无需多次弹出升级提示框,避免了每完成一个差分包的升级就需要重启一次的情况发生,由此能够提高用户体验。
实施例二
本发明实施例提供了一种ota差分升级装置,应用于终端,如图2所示,该装置可以包括:
获取模块21,用于获取具有不同顺序标识的多个差分包;
存储模块22,用于将多个差分包存储至目标存储分区中,其中,目标存储分区为非缓存cache分区;
写入模块23,用于将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中;
升级模块24,用于在系统重启进入recovery模式后,根据指定文件中的特定信息,从目标存储分区中提取顺序标识最小的差分包以进行升级,并在对顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级。
进一步地,多个差分包是通过根据终端的当前系统版本的安装包与待升级到的目标系统版本的安装包进行定制生成的。
进一步地,目标存储分区为一个或多个,存储模块22具体用于:
根据多个差分包各自的存储容量,将多个差分包存储至一个或多个目标存储分区。
进一步地,装置还包括:
验签模块,用于对多个差分包中的每一个差分包进行签名验证。
进一步地,写入模块具体用于:
通过installpackage接口,将顺序标识最小的差分包的文件名称和存储路径名称写入/cache/recovery/目录下的command文件中,其中,文件名称中包含顺序标识。
进一步地,装置还包括:
删除模块,用于在recovery模式下检测到对多个差分包完成升级后,删除存储在指定路径下的指定文件。
进一步地,装置还包括:
提示模块,用于在删除之后,生成并输出重启提示信息。
本发明实施例提供的ota差分升级装置,与本发明实施例所提供的ota差分升级方法属于同一发明构思,可执行本发明实施例所提供的ota差分升级方法,具备执行ota差分升级方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例提供的ota差分升级方法,此处不再加以赘述。
另外,本发明实施例还提供了一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
获取具有不同顺序标识的多个差分包,并将多个差分包存储至目标存储分区中,其中,目标存储分区为非缓存cache分区;
将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中;
在系统重启进入recovery模式后,根据指定文件中的特定信息,从目标存储分区中提取顺序标识最小的差分包以进行升级;以及
在对顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级。
此外,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取具有不同顺序标识的多个差分包,并将多个差分包存储至目标存储分区中,其中,目标存储分区为非缓存cache分区;
将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中;
在系统重启进入recovery模式后,根据指定文件中的特定信息,从目标存储分区中提取顺序标识最小的差分包以进行升级;以及
在对顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
1.一种ota差分升级方法,其特征在于,应用于终端,所述方法包括:
获取具有不同顺序标识的多个差分包,并将所述多个差分包存储至目标存储分区中,其中,所述目标存储分区为非缓存cache分区;
将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中;
在系统重启进入recovery模式后,根据所述指定文件中的特定信息,从所述目标存储分区中提取所述顺序标识最小的差分包以进行升级;以及
在对所述顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从所述目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级。
2.根据权利要求1所述的方法,其特征在于,所述多个差分包是通过根据所述终端的当前系统版本的安装包与待升级到的目标系统版本的安装包进行定制生成的。
3.根据权利要求1所述的方法,其特征在于,所述目标存储分区为一个或多个,所述将所述多个差分包存储至目标存储分区中,包括:
根据所述多个差分包各自的存储容量,将所述多个差分包存储至一个或多个所述目标存储分区。
4.根据权利要求1所述的方法,其特征在于,所述将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中步骤之前,所述方法还包括:
对所述多个差分包中的每一个差分包进行签名验证。
5.根据权利要求1所述的方法,其特征在于,所述将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中,包括:
通过installpackage接口,将顺序标识最小的差分包的文件名称和存储路径名称写入/cache/recovery/目录下的command文件中,其中,所述文件名称中包含顺序标识。
6.根据权利要求1至5任一所述的方法,其特征在于,所述方法还包括:
在所述recovery模式下检测到对所述多个差分包完成升级后,删除存储在所述指定路径下的所述指定文件。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在所述删除之后,生成并输出重启提示信息。
8.一种ota差分升级装置,其特征在于,应用于终端,所述装置包括:
获取模块,用于获取具有不同顺序标识的多个差分包;
存储模块,用于将所述多个差分包存储至目标存储分区中,其中,所述目标存储分区为非缓存cache分区;
写入模块,用于将顺序标识最小的差分包的特定信息写入指定路径下的指定文件中;
升级模块,用于在系统重启进入recovery模式后,根据所述指定文件中的特定信息,从所述目标存储分区中提取所述顺序标识最小的差分包以进行升级,并在对所述顺序标识最小的差分包完成升级后,根据顺序标识从小到大的顺序,依次从所述目标存储分区中提取未提取过的差分包以进行升级,直至所有差分包完成升级。
9.根据权利要求8所述的装置,其特征在于,所述多个差分包是通过根据所述终端的当前系统版本的安装包与待升级到的目标系统版本的安装包进行定制生成的。
10.根据权利要求8或9所述的装置,其特征在于,所述装置还包括:
删除模块,用于在所述recovery模式下检测到对所述多个差分包完成升级后,删除存储在所述指定路径下的所述指定文件。
技术总结