CN106293849A - 一种应用更新方法和终端 - Google Patents
一种应用更新方法和终端 Download PDFInfo
- Publication number
- CN106293849A CN106293849A CN201610686281.XA CN201610686281A CN106293849A CN 106293849 A CN106293849 A CN 106293849A CN 201610686281 A CN201610686281 A CN 201610686281A CN 106293849 A CN106293849 A CN 106293849A
- Authority
- CN
- China
- Prior art keywords
- file
- class function
- installation package
- compiling
- compiled
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/48—Incremental compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种应用更新方法和终端,涉及电子终端领域,能够解决应用更新安装时间长的问题。其方法为:在加载待更新应用的安装包文件,并加载应用已安装的安装包编译后的编译文件之后,对安装包文件中的类函数与编译文件中的类函数进行对比分析,获取安装包文件中待编译的类函数,对待编译的类函数进行编译,得到待编译的类函数编译后的本地机器指令,并从编译文件中获取除待编译的类函数以外的类函数对应编译后的本地机器指令。本发明实施例用于Android系统中的应用更新。
Description
技术领域
本发明涉及电子终端领域,尤其涉及一种应用更新方法和终端。
背景技术
安卓(Android)应用可经过编译打包为Android安装包(Android Package,APK)文件在终端进行安装。在安装过程中,首先需要解压APK文件,再启动安装服务(PackageManager Service),使得安装服务通过守护进程调用dex2oat,将APK中的classes.dex文件编译成本地集群指令,得到Android私有的可执行文件(Executable and Linking Format,ELF)格式的提前编译(ahead-of-time,OAT)文件。当Android应用运行时,OAT文件会被加载到内存中以运行。
Android应用首次安装时需要对APK进行全部编译,且编译过程以classes.dex文件中的类函数(method)为单位,对其中所有的method逐一编译生成机器码,放入OAT文件中,如图1所示,为Android应用安装时APK文件的编译过程示意图。现有的Android应用更新越来越快,更新安装次数也越来越多时,应用更新安装的编译方式与首次安装的编译方式一致,均采取对APK中classes.dex文件的method进行逐一编译的方式,使得应用更新安装的时间与重新安装的时间等同,当method比较大时,可能会使得更新安装的过程更长,甚至会在安装过程中导致终端卡顿。
现有技术中,当需要修复某个有缺陷的程序包使得该程序包对应的应用需要更新时,通常以补丁文件的形式发布,其中热补丁是将补丁文件中的method编译生成机器码,存放于内存补丁区中,而后更新method地址addr为addr’,以指向内存补丁区中新的机器码,以此来替换原有的method的机器码。但是热补丁技术并不适用于对所有的缺陷进行修复,例如该缺陷并不是通过简单的改写函数实现,而是需要改写全局变量时,终端内存中的代码段中的代码就需要重新汇编,此时就需要冷补丁来解决,但是冷补丁修复程序包缺陷时需要重启终端,会使得终端当前正在运行的业务中断。因此,亟需一种能够缩短应用更新安装时间的技术。
发明内容
本发明实施例提供一种应用更新方法和终端,能够解决应用更新安装时间长的问题。
一方面,提供一种应用更新方法,包括:终端加载待更新应用的安装包文件,并加载应用已安装的安装包编译后的编译文件;终端对安装包文件中的类函数与编译文件中的类函数进行对比分析,获取安装包文件中待编译的类函数;终端对待编译的类函数进行编译,得到待编译的类函数编译后的本地机器指令,并从编译文件中获取除待编译的类函数以外的类函数对应编译后的本地机器指令。例如终端的系统为Android系统,待更新应用的安装包文件可以为APK文件,该应用已安装的安装包编译后的编译文件可以为OAT文件,类函数即为method。在终端从APK中确定出待编译的method,并对待编译的method进行编译,除确定出待编译的method以外的其余method对应编译后的本地机器指令从OAT文件中获取的情况下,可节省终端对待更新应用的APK文件的编译时间,从而缩短了应用更新所需的时间。
在一种可能的设计中,终端对安装包文件中的类函数与编译文件中的类函数进行对比分析,获取安装包文件中待编译的类函数包括:终端确定安装包文件和编译文件中签名信息相同的类函数;终端根据类函数的指令和字符表对安装包文件与编译文件中签名信息相同的类函数进行对比分析,获取安装包文件中待编译的类函数。这是由于编译文件中包括安装包文件中的类函数,可根据签名信息确定出安装包文件和编译文件中签名信息相同的类函数,类函数包括指令部分和字符表部分,指令和字符表相同时,类函数编译后的本地机器指令相同,进而可根据指令和字符表对比分析签名信息相同的类函数,确定出安装包中待编译的类函数,以便终端不需要对安装包文件中的所有类函数逐一进行编译。
在一种可能的设计中,终端根据类函数的指令和字符表对安装包文件与编译文件中签名信息相同的类函数进行对比分析,获取安装包文件中待编译的类函数包括:终端对安装包文件与编译文件中签名信息相同的类函数的指令进行对比分析;若终端确定安装包文件和编译文件中签名信息相同的类函数的指令不同,则终端确定安装包文件中的类函数为待编译的类函数;若终端确定安装包文件和编译文件中签名信息相同的类函数的指令相同,则终端对安装包文件和编译文件中签名信息相同的类函数的字符表进行对比分析;若终端确定安装包文件和编译文件中签名信息相同的类函数的字符表不同,则终端确定安装包文件中的类函数为待编译的类函数。可选的,可以将确定出的待编译的类函数添加至更新列表中,以便终端根据更新列表对待编译的类函数进行编译。
在一种可能的设计中,终端对安装包文件中的类函数与编译文件中的类函数进行对比分析,获取安装包文件中待编译的类函数包括:终端对安装包文件中字节码长度大于或等于预设阈值的类函数与编译文件中的类函数进行对比分析,获取安装包中待编译的类函数,并确定安装包文件中字节码长度小于预设阈值的类函数为待编译的类函数。这是由于,类函数的字节码长度较小时,对该类函数进行对比分析所需的时间可能与编译的和时间相差不多,甚至可能大于编译所需的时间,因此,在对类函数进行对比分析之前,可根据类函数的字节码长度筛选出字节码长度大于预设阈值的类函数,而对于字节码长度小于预设阈值的类函数可直接添加至更新列表中进行编译,这样一来,可进一步节省应用更新的时间。
在一种可能的设计中,在终端加载待更新应用的安装包文件之前,方法还包括:终端确定安装包文件的主版本号与编译文件的主版本号是否相同;若确定是,则终端确定加载安装包文件;若确定否,则终端确定终端对安装包文件中所有的类函数进行编译。这是由于待更新应用的主版本号发生变化时,该应用待安装的安装包中的类函数与上一次安装或更新后的编译文件中的类函数差别较大,需要对待安装的安装包中的多数类函数进行对比分析并且对多数类函数进行编译,这反而可能会增加应用更新的时间,此时可直接对安装包中的类函数进行编译;而对于主版本号未发生变化,例如版本号从1.1更新为1.2,此时待更新应用的安装包中的类函数与上一次安装或更新后的编译文件中的类函数差别不大,可从编译文件中直接获取到多数类函数编译后的本地机器指令,从而达到节省应用更新的时间。
另一方面,提供一种终端,包括:加载单元,用于加载待更新应用的安装包文件,并加载应用已安装的安装包编译后的编译文件;分析单元,用于对安装包文件中的类函数与编译文件中的类函数进行对比分析,获取安装包文件中待编译的类函数;编译单元,用于对待编译的类函数进行编译,得到待编译的类函数编译后的本地机器指令,并从编译文件中获取除待编译的类函数以外的类函数对应编译后的本地机器指令。
在一种可能的设计中,分析单元用于:确定安装包文件和编译文件中签名信息相同的类函数;根据类函数的指令和字符表对安装包文件与编译文件中签名信息相同的类函数进行对比分析,获取安装包文件中待编译的类函数。
在一种可能的设计中,分析单元用于:对安装包文件与编译文件中签名信息相同的类函数的指令进行对比分析;若确定安装包文件和编译文件中签名信息相同的类函数的指令不同,则终端确定安装包文件中的类函数为待编译的类函数;若确定安装包文件和编译文件中签名信息相同的类函数的指令相同,则对安装包文件和编译文件中签名信息相同的类函数的字符表进行对比分析;若确定安装包文件和编译文件中签名信息相同的类函数的字符表不同,则确定安装包文件中的类函数为待编译的类函数。
在一种可能的设计中,分析单元用于:对安装包文件中字节码长度大于或等于预设阈值的类函数与编译文件中的类函数进行对比分析,获取安装包中待编译的类函数,并确定安装包文件中字节码长度小于预设阈值的类函数为待编译的类函数。
在一种可能的设计中,还包括:确定单元,用于确定的安装包文件的主版本号与编译文件的主版本号是否相同;若确定是,则确定加载安装包文件;若确定否,则对安装包文件中所有的类函数进行编译。
第三方面,本发明实施例还提供一种终端设备,该终端设备包括处理器和存储器,所述存储器用于存储软件程序,所述处理器用于读取所述存储器中存储的软件程序并实现前述第一方面提供的任意一种方法。
第四方面,本发明实施例中还提供一种计算机存储介质,该存储介质可以是非易失性的,即断电后内容不丢失。该存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时可实现第一方面提供的任意一种方法。
相较于现有技术,在本发明中,不需要对待更新应用的安装包中的所有类函数进行编译,而是在加载待更新应用的安装包文件,并加载所述应用已安装的安装包编译后的编译文件之后,对所述安装包文件中的类函数与所述编译文件中的类函数进行对比分析,获取所述安装包文件中待编译的类函数,对所述待编译的类函数进行编译,得到所述待编译的类函数编译后的本地机器指令,并从所述编译文件中获取除待编译的类函数以外的类函数对应编译后的本地机器指令,从而达到节省应用更新的时间,改善了用户在应用升级过程中的安装等待时间,提升了用户体验。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种Android应用安装时APK文件的编译过程示意图;
图2为本发明实施例提供的一种终端的内部结构示意图;
图3为本发明实施例提供的一种应用的更新方法的流程示意图;
图4为本发明实施例提供的一种应用的更新方法的流程示意图;
图5为本发明实施例提供的一种终端的结构示意图;
图6为本发明实施例提供的一种终端的结构示意图;
图7为本发明实施例提供的一种终端的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例可用于终端更新应用的场景,具体应用于当终端为个人计算机(Personal Computer,PC)、手机、平板电脑(pad)、智能学习机、智能游戏机、智能电视、智能眼镜以及智能手表中的应用需要更新时,对待更新应用的安装包进行编译的过程。
图2为本发明的终端的一种内部结构示意图,在本发明中,终端可以包括采集模块201、处理模块202、通讯模块203、存储模块204、显示模块205和识别模块206。其中,采集模块201用于通过摄像头或麦克风等传感器采集音视频等数据,和通过摄像头、红外传感器和触摸屏等采集用户的手势;处理模块202用于控制终端的各部分硬件装置和应用程序软件等;例如处理模块202用于对待更新应用的安装包中的method和该应用已安装的OAT文件中method进行对比,确定出安装包中待编译的method;通讯模块203用于可使用蜂窝、以太网、wifi、蓝牙和红外等通讯方式接受其它设备发送的指令,也可以将终端的数据发送给云端或其它设备;存储模块204用于执行终端的软件程序的存储、数据的存储和软件的运行等,可以是随机存取存储器(Random Access Memory,RAM)、可擦除可编程只读寄存器(Erasable Programmable Read Only Memory,EPROM)、固态硬盘(Solid State Drives,SSD)和SD卡(Secure Digital Memory Card)等中的一种或多种;例如该存储模块204存储有本发明实施例中待更新应用的安装包文件以及已经安装的应用安装后的编译文件;显示模块205用于显示用户的操作界面和操作结果,可接收处理模块202的数据并显示;识别模块206用于识别用户的手势操作指令,例如用于识别本发明中是否接收到更新应用的手势操作指令。
下面以终端的系统为Android系统,待更新的应用为Android应用为例进行本发明实施例的说明,该Android应用的安装包的即为APK文件,对APK文件编译后的文件即为OAT文件,OAT文件包括编译后的本地机器指令和APK中的classes.dex文件,OAT文件即为Android应用安装或更新后的文件,该OAT文件会被加载到内存中以运行。在对APK进行编译时,是以APK中的classes.dex文件中的类函数method为单位进行编译的,本发明实施例需要对classes.dex文件中的method进行选择性编译,不需要编译的method对应的编译后的本地机器指令可从该应用上一次安装或更新后的OAT文件中获取,以便节省应用更新的时间。
本发明实施例提供一种应用更新方法方法,如图3所示,包括:
301、终端加载待更新应用的安装包文件,并加载应用已安装的安装包编译后的编译文件。
例如在Android系统中,当终端需更新某一应用时,可先加载该应用的待安装的APK文件,并加载该应用上一次更新或安装后的OAT文件。
302、终端对安装包文件中的类函数与编译文件中的类函数进行对比分析,获取安装包文件中待编译的类函数。
由于应用已安装后对应的OAT文件中包括安装前的APK文件中的类函数,因此,当应用更新时,可将本次待更新的APK文件中的类函数与上一次更新或安装后对应的OAT文件中的类函数进行对比分析,得到本次待更新的APK文件中与上一次更新或安装后对应的OAT文件中不同的类函数,以便于本次更新时只对APK中确定出的不同的类函数进行编译。
303、终端对待编译的类函数进行编译,得到待编译的类函数编译后的本地机器指令,并从编译文件中获取除待编译的类函数以外的类函数对应编译后的本地机器指令。
这样一来,当应用更新时,不需要对APK中的所有类函数进行编译,即对APK中的类函数进行选择性编译,不需要编译的类函数可以从上一次更新或安装后对应的OAT文件中获取到,以节省应用更新的安装时间。
本发明实施例提供一种应用更新方法,终端对安装包文件中的类函数与编译文件中的类函数进行对比分析,获取安装包文件中待编译的类函数,而后对安装包文件中的类函数与编译文件中的类函数进行对比分析,获取安装包文件中待编译的类函数,进而对待编译的类函数进行编译,得到待编译的类函数编译后的本地机器指令,并从编译文件中获取除待编译的类函数以外的类函数对应编译后的本地机器指令,由此,可不需要对安装包中的所有类函数进行编译,节省了应用更新所需的时间。
本发明实施例提供一种应用更新方法,如图4所示,包括:
401、终端确定待更新应用的安装包文件的主版本号与该应用对应的编译文件的主版本号是否相同,若确定是,则执行步骤403,若确定否,则执行步骤402。
本发明实施例用于应用更新的场景,即当该应用已经安装到终端中,需要对应用进行版本升级。通常情况下,应用更新的过程中,其版本号也是随之更新。当应用的安装包下载到终端本地之后,用户点击安装选项之后,可以先对该待更新应用的安装包文件即APK文件的主版本号与该应用对应的已安装后得到的编译文件即OAT文件进行对比,确定主版本号是否发生变化。这是由于,本发明需要对APK文件中的类函数即method进行选择性编译,通常情况下,若待安装的APK文件的主版本号与上一次更新或安装后的主版本号相同,则待安装的APK文件中的method与上一次更新或安装后的OAT文件中的method相差不大;若待安装的APK的主版本号与上一次更新或安装后的主版本号不同,则待安装的APK文件中的method与上一次更新或安装后的OAT文件中的method差别较大。当差别较大时,只编译APK文件中的部分method和编译APK文件中的所有method也差别不大,甚至可能增加选择部分method进行编译的时间,是的应用更新的时间有增无减,因此,当主版本号不变时,继续执行本发明以下步骤,当主版本号变化时,可直接对待更新应用的APK文件中的method进行全部编译。
例如,待更新应用的APK文件的主版本号为1.4,该应用上一次更新或安装后的OAT文件的主版本号为1.6,则确定主版本号相同,可对待更新应用的APK中的method进行选择性编译;若待更新应用的APK文件的主版本号为1.4,该应用上一次更新或安装后的OAT文件的主版本号为2.0,则确定主版本号不同,可对待更新应用的APK文件中的method进行全部编译。
402、终端确定对安装包文件中所有的类函数进行编译。
403、终端确定加载安装包文件。
终端确定加载的APK文件即为待更新应用已下载到本地的APK文件。
404、终端加载待更新应用的安装包文件,并加载应用已安装的安装包编译后的编译文件。
示例性的,假设待更新的应用为微信,该微信应用上一次安装或更新后的版本为6.2.1,本次需要更新APK文件的版本为6.2.2,可根据APK文件中的标识weixin从APK文件安装时的存储路径中获取到OAT文件目录下标识为weixin的OAT文件,该标识为weixin的OAT文件即为微信应用上一次安装或更新时编译后的编译文件。
405、终端将安装包文件中类函数的字节码长度与预设阈值进行比较,若安装包文件中类函数的字节码长度大于或等于预设阈值,则执行步骤406,若安装包文件中类函数的字节码长度小于预设阈值,则执行步骤407。
由于待更新应用的APK文件中包括多个method,不同的method的字节码长度可能不同,对于字节码长度较短的method来说,在确定是否要对该method进行编译的过程所需的时长可能与对该method进行编译的时长相差不多,甚至确定是否要对该method进行编译的过程所需的时长大于对该method进行编译的时长,为避免这种情况,本发明可对待更新应用的APK文件中的多个method按照字节码长度进行提前筛选,当待更新应用的APK文件中的method的字节码长度大于或等于预设阈值时,继续执行步骤406,当待更新应用的APK文件中的method的字节码长度小于预设阈值时,执行步骤407,即直接确定该method为待编译的method。其中,例如预设阈值可以为100字节,也可以为其它值,本发明不做限定。
406、终端确定安装包文件中字节码长度大于或等于预设阈值的类函数和编译文件中类函数的签名信息相同的类函数,而后执行步骤408。
OAT文件是Android系统私有的ELF文件格式,不仅包括从APK文件中翻译而来的本地机器指令,还包括原有的APK文件的内容,APK文件包括编译前的method,且APK文件中的每个method都对应不同的签名信息,那么OAT文件中也包括签名信息不同的多个method,因此,可根据签名信息确定出OAT文件和APK文件中签名信息相同的method。
407、终端确定安装包文件中字节码长度小于预设阈值的类函数为待编译的类函数,而后执行步骤409。
408、终端根据类函数的指令和字符表对安装包文件字节码长度大于或等于预设阈值的类函数和编译文件中签名信息相同的类函数进行对比分析,获取安装包文件中待编译的类函数。
每个method的字节码包括地址、指令及字符表,可根据指令和字符表对签名信息相同的method进行对比分析。具体地,终端可以对APK文件与OAT文件中签名信息相同的method的指令进行对比分析;若终端确定APK文件和OAT文件中签名信息相同的method的指令不同,则终端确定APK文件中的method为待编译的method;若终端确定APK文件和OAT文件中签名信息相同的method的指令相同,则终端对APK文件和OAT文件中签名信息相同的method的字符表进行对比分析;若终端确定APK文件和OAT文件中签名信息相同的method的字符表不同,则终端确定APK文件中的method为待编译的method。
也就是说,对比分析有两个步骤:第一步,对method的指令进行对比分析;第二步,对method的字符表进行对比分析。例如APK文件字节码长度大于或等于预设阈值的某个method的地址和指令部分如表1所示:
表1
OAT文件中与上述APK文件中的method签名信息相同的method的地址和指令部分如表2所示:
表2
其中0x0000,0x0002,0x0004,表示APK文件中method的地址,13001000,23000a00,0e00表示APK文件中method的指令。0x1000,0x1002,0x1004,表示OAT文件中method的地址,1300 1000,2300 0a00,0c00表示OAT文件中method的指令。经过对指令的对比分析,0e00与0c00不同,因此可将APK文件中的method作为待编译的method。
当然,如果表1和表2中该method的指令相同,则可以继续对比APK文件和OAT文件中该method的字符表部分是否相同。如果APK文件和OAT文件中该method的字符表部分相同,即APK文件和OAT文件中该method的指令部分和字符表部分均相同,由于当method的指令部分和字符表部分均相同时,对APK文件中该method进行编译后得到的本地机器码与OAT中该method对应的本地机器码相同,因此,可执行步骤412,即从OAT文件中直接获取该method编译后的本地机器码;如果APK文件和OAT文件中该method的字符表部分不同,则确定APK文件中的该method为待编译的method。
409、终端将待编译的类函数添加至更新列表中。
具体是将确定的APK文件中待编译的method的地址,指令和字符表都添加至更新列表中。
410、终端确定对安装包文件中的所有类函数是否分析结束,若确定是,则执行步骤411;若确定否,则执行步骤408。
在对APK文件中的任一个method分析结束后,都需要确定此次分析结束后的method是否为最后一个method,以确定对比分析是否结束。示例性的,确定对APK文件APK文件中的所有method是否分析结束可以通过APK文件method的序号进行判断,由于APK文件最后一个method的序号是终端已知的,当对每一个method分析结束之后,判断当前method的序号是否为最后一个,若确定是,则表示对APK文件中的所有method分析结束。
411、终端对更新列表中待编译的类函数进行编译,得到待编译的类函数编译后的本地机器指令。
412、终端从OAT文件中获取除待编译的类函数以外的类函数对应编译后的本地机器指令。
这样一来,待更新应用的APK文件中的method可进行选择性编译,即APK文件中与OAT文件中指令和字符表相同的method可不进行编译,而是从OAT文件中直接获取编译后本地机器指令,而对APK文件中指令不同或指令和字符表均不同的method进行编译,可节省对于APK文件编译的时间,相应地节省了应用更新的时间。
相对于现有技术中当热补丁不能对应用版本的缺陷进行修复而需要冷补丁进行修复时,需要改写全局变量使得代码需要重新汇编的技术缺陷而言,本申请在应用版本升级即应用更新时,不需要对代码进行重新汇编,而是对APK文件中的部分method进行编译,也不需要对终端终端进行重启导致终端中正在进行的业务中断。
本发明实施例提供一种应用更新方法,终端加载待更新应用的安装包文件,并加载应用已安装的安装包编译后的编译文件,而后对安装包文件中的类函数与编译文件中的类函数进行对比分析,获取安装包文件中待编译的类函数,进而对待编译的类函数进行编译,得到待编译的类函数编译后的本地机器指令,并从编译文件中获取除待编译的类函数以外的类函数对应编译后的本地机器指令,这样,由于对安装包文件中的确定的部分待编译的类函数进行编译,确定不需要编译的类函数的本地机器指令可以直接从该应用已安装的安装包编译后的编译文件中获取,相对于在应用更新时对安装包文件所有的类函数进行编译,本申请可解决应用更新安装时间长的问题,以改善用户在应用更新过程中的等待时间。
上述主要从终端的角度对本发明实施例提供的方案进行了介绍。可以理解的是,终端为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的算法步骤,本发明能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
本发明实施例可以根据上述方法示例对终端进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图5示出了上述实施例中所涉及的终端5的一种可能的结构示意图,终端包括:加载单元501,分析单元502和编译单元503。加载单元501用于支持终端执行图3中的过程301或图4中的过程401~404;分析单元502用于支持终端执行图3中的过程302或图4中的过程405~410;编译单元503用于支持终端执行图3中的过程303或图4中的过程411~412。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
在采用集成的单元的情况下,图6示出了上述实施例中所涉及的终端的一种可能的结构示意图。终端6包括:处理模块601和通信模块602。处理模块601用于对终端的动作进行控制管理,例如处理模块601用于支持终端执行图3中的301~303或图4中的过程401~412,通信模块602用于支持终端与其他网络实体的通信,例如与服务器之间的通信,从服务器下载得到应用的安装包等。终端还可以包括存储模块603,用于存储终端的程序代码和数据,例如用于存储本发明实施例中的APK文件和OAT文件等。
其中,处理模块601可以是处理器或控制器,例如可以是中央处理器(CentralProcessing Unit,CPU),通用处理器,数字信号处理器(Digital Signal Processor,DSP),专用集成电路(Application-Specific Integrated Circuit,ASIC),现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。通信模块602可以是收发器、收发电路或通信接口等。存储模块603可以是存储器。
当处理模块601为处理器,通信模块602为收发器,存储模块603为存储器时,本发明实施例所涉及的终端可以为图7所示的终端。
参阅图7所示,该终端7包括:处理器701、收发器702、存储器703以及总线704。其中,收发器702、处理器701以及存储器703通过总线704相互连接;总线704可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
结合本发明公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(Random Access Memory,RAM)、闪存、只读存储器(ReadOnly Memory,ROM)、可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)、电可擦可编程只读存储器(Electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于核心网接口设备中。当然,处理器和存储介质也可以作为分立组件存在于核心网接口设备中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (10)
1.一种应用更新方法,其特征在于,包括:
终端加载待更新应用的安装包文件,并加载所述应用已安装的安装包编译后的编译文件;
所述终端对所述安装包文件中的类函数与所述编译文件中的类函数进行对比分析,获取所述安装包文件中待编译的类函数;
所述终端对所述待编译的类函数进行编译,得到所述待编译的类函数编译后的本地机器指令,并从所述编译文件中获取除所述待编译的类函数以外的类函数对应编译后的本地机器指令。
2.根据权利要求1所述的方法,其特征在于,所述终端对所述安装包文件中的类函数与所述编译文件中的类函数进行对比分析,获取所述安装包文件中待编译的类函数包括:
所述终端确定所述安装包文件和所述编译文件中签名信息相同的类函数;
所述终端根据类函数的指令和字符表对所述安装包文件与所述编译文件中签名信息相同的类函数进行对比分析,获取所述安装包文件中待编译的类函数。
3.根据权利要求2所述的方法,其特征在于,所述终端根据所述类函数的指令和所述字符表对所述安装包文件与所述编译文件中签名信息相同的类函数进行对比分析,获取所述安装包文件中待编译的类函数包括:
所述终端对所述安装包文件与所述编译文件中所述签名信息相同的类函数的指令进行对比分析;
若所述终端确定所述安装包文件和所述编译文件中所述签名信息相同的类函数的指令不同,则所述终端确定所述安装包文件中的类函数为所述待编译的类函数;
若所述终端确定所述安装包文件和所述编译文件中所述签名信息相同的类函数的指令相同,则所述终端对所述安装包文件和所述编译文件中所述签名信息相同的类函数的字符表进行对比分析;
若所述终端确定所述安装包文件和所述编译文件中所述签名信息相同的类函数的字符表不同,则所述终端确定所述安装包文件中的类函数为所述待编译的类函数。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述终端对所述安装包文件中的类函数与所述编译文件中的类函数进行对比分析,获取所述安装包文件中待编译的类函数包括:
所述终端对所述安装包文件中字节码长度大于或等于预设阈值的类函数与所述编译文件中的类函数进行对比分析,获取所述安装包中待编译的类函数,并确定所述安装包文件中字节码长度小于所述预设阈值的类函数为所述待编译的类函数。
5.根据权利要求1-4任一项所述的方法,其特征在于,在所述终端加载待更新应用的安装包文件之前,所述方法还包括:
所述终端确定所述安装包文件的主版本号与所述编译文件的主版本号是否相同;
若确定是,则所述终端确定加载所述安装包文件;若确定否,则所述终端确定所述终端对所述安装包文件中所有的类函数进行编译。
6.一种终端,其特征在于,包括:
加载单元,用于加载待更新应用的安装包文件,并加载所述应用已安装的安装包编译后的编译文件;
分析单元,用于对所述安装包文件中的类函数与所述编译文件中的类函数进行对比分析,获取所述安装包文件中待编译的类函数;
编译单元,用于对所述待编译的类函数进行编译,得到所述待编译的类函数编译后的本地机器指令,并从所述编译文件中获取除所述待编译的类函数以外的类函数对应编译后的本地机器指令。
7.根据权利要求6所述的终端,其特征在于,所述分析单元用于:
确定所述安装包文件和所述编译文件中签名信息相同的类函数;
根据类函数的指令和字符表对所述安装包文件与所述编译文件中签名信息相同的类函数进行对比分析,获取所述安装包文件中待编译的类函数。
8.根据权利要求7所述的终端,其特征在于,所述分析单元用于:
对所述安装包文件与所述编译文件中所述签名信息相同的类函数的指令进行对比分析;
若确定所述安装包文件和所述编译文件中所述签名信息相同的类函数的指令不同,则所述终端确定所述安装包文件中的类函数为所述待编译的类函数;
若确定所述安装包文件和所述编译文件中所述签名信息相同的类函数的指令相同,则对所述安装包文件和所述编译文件中所述签名信息相同的类函数的字符表进行对比分析;
若确定所述安装包文件和所述编译文件中所述签名信息相同的类函数的字符表不同,则确定所述安装包文件中的类函数为所述待编译的类函数。
9.根据权利要求6-8任一项所述的终端,其特征在于,所述分析单元用于:
对所述安装包文件中字节码长度大于或等于预设阈值的类函数与所述编译文件中的类函数进行对比分析,获取所述安装包中待编译的类函数,并确定所述安装包文件中字节码长度小于所述预设阈值的类函数为所述待编译的类函数。
10.根据权利要求6-9任一项所述的终端,其特征在于,还包括:
确定单元,用于确定所述的安装包文件的主版本号与所述编译文件的主版本号是否相同;
若确定是,则确定加载所述安装包文件;若确定否,则对所述安装包文件中所有的类函数进行编译。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610686281.XA CN106293849B (zh) | 2016-08-18 | 2016-08-18 | 一种应用更新方法和终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610686281.XA CN106293849B (zh) | 2016-08-18 | 2016-08-18 | 一种应用更新方法和终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106293849A true CN106293849A (zh) | 2017-01-04 |
CN106293849B CN106293849B (zh) | 2020-01-31 |
Family
ID=57679829
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610686281.XA Active CN106293849B (zh) | 2016-08-18 | 2016-08-18 | 一种应用更新方法和终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106293849B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107168749A (zh) * | 2017-05-31 | 2017-09-15 | 腾讯科技(深圳)有限公司 | 一种编译方法、装置、设备和计算机可读存储介质 |
CN107729042A (zh) * | 2017-10-16 | 2018-02-23 | 东软集团股份有限公司 | 移动应用升级方法及装置、存储介质、电子设备 |
CN109857474A (zh) * | 2017-11-30 | 2019-06-07 | 华为终端有限公司 | 启动应用程序的方法和装置 |
CN112929449A (zh) * | 2021-03-10 | 2021-06-08 | 深圳创维-Rgb电子有限公司 | Ota升级包的编译方法、系统及计算机可读存储介质 |
CN113885870A (zh) * | 2021-08-27 | 2022-01-04 | 荣耀终端有限公司 | 应用程序更新方法、电子设备、终端设备及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050060695A1 (en) * | 2000-09-21 | 2005-03-17 | Curl Corporation | Lazy compilation of template-generated classes in dynamic compilation execution environments |
CN101546269A (zh) * | 2008-03-28 | 2009-09-30 | 鸿富锦精密工业(深圳)有限公司 | 可执行文件版本更新系统及方法 |
CN104090806A (zh) * | 2014-07-18 | 2014-10-08 | 百度在线网络技术(北京)有限公司 | 升级包、升级请求的处理方法及装置 |
CN104267978A (zh) * | 2014-09-16 | 2015-01-07 | 青岛海信移动通信技术股份有限公司 | 一种生成差分包的方法及装置 |
CN105100191A (zh) * | 2015-05-22 | 2015-11-25 | 华为技术有限公司 | 一种云编译实现Java应用安装的方法、装置及系统 |
CN105843662A (zh) * | 2016-03-28 | 2016-08-10 | 乐视控股(北京)有限公司 | 一种软件产品编译方法及设备 |
-
2016
- 2016-08-18 CN CN201610686281.XA patent/CN106293849B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050060695A1 (en) * | 2000-09-21 | 2005-03-17 | Curl Corporation | Lazy compilation of template-generated classes in dynamic compilation execution environments |
CN101546269A (zh) * | 2008-03-28 | 2009-09-30 | 鸿富锦精密工业(深圳)有限公司 | 可执行文件版本更新系统及方法 |
CN104090806A (zh) * | 2014-07-18 | 2014-10-08 | 百度在线网络技术(北京)有限公司 | 升级包、升级请求的处理方法及装置 |
CN104267978A (zh) * | 2014-09-16 | 2015-01-07 | 青岛海信移动通信技术股份有限公司 | 一种生成差分包的方法及装置 |
CN105100191A (zh) * | 2015-05-22 | 2015-11-25 | 华为技术有限公司 | 一种云编译实现Java应用安装的方法、装置及系统 |
CN105843662A (zh) * | 2016-03-28 | 2016-08-10 | 乐视控股(北京)有限公司 | 一种软件产品编译方法及设备 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107168749A (zh) * | 2017-05-31 | 2017-09-15 | 腾讯科技(深圳)有限公司 | 一种编译方法、装置、设备和计算机可读存储介质 |
CN107729042A (zh) * | 2017-10-16 | 2018-02-23 | 东软集团股份有限公司 | 移动应用升级方法及装置、存储介质、电子设备 |
CN109857474A (zh) * | 2017-11-30 | 2019-06-07 | 华为终端有限公司 | 启动应用程序的方法和装置 |
CN112929449A (zh) * | 2021-03-10 | 2021-06-08 | 深圳创维-Rgb电子有限公司 | Ota升级包的编译方法、系统及计算机可读存储介质 |
CN113885870A (zh) * | 2021-08-27 | 2022-01-04 | 荣耀终端有限公司 | 应用程序更新方法、电子设备、终端设备及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106293849B (zh) | 2020-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3333704B1 (en) | Method and apparatus for repairing kernel vulnerability | |
CN106293849A (zh) | 一种应用更新方法和终端 | |
CN103324498B (zh) | 用于引导裸机计算设备的方法和设备 | |
CN103744709B (zh) | 补丁加载方法及装置 | |
CN108614718B (zh) | 启动操作系统的方法、装置和实现装置 | |
CN101325513B (zh) | 一种软件升级的方法、设备和系统 | |
US9965288B2 (en) | Preconfiguring hardware and speeding up server discovery prior to bios boot | |
CN105511911A (zh) | 系统固件升级包的生成方法及装置 | |
CN107239309B (zh) | 补丁生成方法及装置、更新方法、电子设备、存储介质 | |
CN107992308A (zh) | 一种安卓终端应用程序的插件化管理方法 | |
WO2015078294A1 (en) | Kernel module loading method and apparatus | |
CN105824623A (zh) | 一种Android应用热修复的方法和装置 | |
CN109656630A (zh) | 配置空间的访问方法、装置、架构及储存介质 | |
US10127050B2 (en) | Efficient booting system | |
CN104052769B (zh) | 一种对移动终端应用包含的资源更新的方法、装置和系统 | |
CN104407878A (zh) | C6000数字信号处理器在线升级方法 | |
US9513762B1 (en) | Static content updates | |
CN111338925A (zh) | 小程序测试方法及装置、系统、电子设备和存储介质 | |
CN105573913B (zh) | 一种onu系统中的程序调试方法及系统 | |
CN110516447A (zh) | 一种识别终端模拟器的方法与设备 | |
CN115291946A (zh) | 鸿蒙系统移植方法、装置、电子设备及可读介质 | |
CN105159673A (zh) | 一种设置控件样式的方法和装置 | |
CN112631915A (zh) | 一种pcie设备软件仿真的方法、系统、设备及介质 | |
US8892499B2 (en) | Life cycle management of rule sets | |
CN111385661B (zh) | 语音控制全屏播放的方法、装置、终端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |