一种应用安装方法、应用安装包的生成方法与流程

文档序号:18524258发布日期:2019-08-24 10:05阅读:261来源:国知局
一种应用安装方法、应用安装包的生成方法与流程

本申请涉及但不限于计算机技术领域,尤其涉及一种应用安装方法、应用安装包的生成方法。



背景技术:

随着终端设备(比如,手机、笔记型电脑等便携式终端,或者台式电脑等固定终端)的配置越来越高,显示效果越来越好,应用(app,application)占用的空间也越来越大,动辄都几十mb(兆)甚至几百mb,随之而来的是app下载安装的速度越来越慢,常用app的安装都需要几十秒甚至更长时间。而且,随着app安装包越来越大,app新安装或者覆盖安装时的速度慢、效率低,导致用户体验不佳。



技术实现要素:

以下是对本文详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。

本申请实施例提供一种应用安装方法、应用安装包的生成方法,能够提高应用安装速度。

第一方面,本申请实施例提供一种应用安装方法,包括:

获取应用安装包,其中,所述应用安装包经过以下操作优化:将dex字节码编译成oat格式的可执行文件;

基于所述应用安装包,进行应用安装操作;其中,所述应用安装操作跳过所述将dex字节码编译成oat格式的可执行文件的操作。

第二方面,本申请实施例提供一种应用安装包的生成方法,包括:

对一应用进行文件编译之后,执行将dex字节码编译成oat格式的可执行文件的操作,得到优化后的应用文件;

打包所述优化后的应用文件,生成所述应用的应用安装包。

第三方面,本申请实施例提供一种终端设备,包括:第一存储器以及第一处理器,所述第一存储器适于存储应用安装程序,所述应用安装程序被所述第一处理器执行时实现上述第一方面提供的应用安装方法的步骤。

第四方面,本申请实施例提供一种计算设备,包括:第二存储器以及第二处理器,所述第二存储器适于存储应用安装包的生成程序,所述生成程序被所述第二处理器执行时实现上述第二方面提供的应用安装包的生成方法的步骤。

此外,本申请实施例还提供一种计算机可读介质,存储有应用安装程序,所述应用安装程序被处理器执行时实现上述第一方面提供的应用安装方法的步骤。

此外,本申请实施例还提供一种计算机可读介质,存储有应用安装包的生成程序,所述生成程序被处理器执行时实现上述第二方面提供的应用安装包的生成方法的步骤。

在本申请实施例中,获取经过dex2oat操作(将dex字节码编译成oat格式的可执行文件的操作)优化后的应用安装包;基于应用安装包,进行应用安装操作;其中,应用安装操作跳过dex2oat操作。本申请实施例中,提供预优化后的应用安装包,并且在应用安装过程跳过dex2oat操作,从而提高应用安装速度,提升用户体验。

在阅读并理解了附图和详细描述后,可以明白其他方面。

附图说明

图1为本申请实施例提供的应用安装方法的流程图;

图2为本申请实施例提供的应用安装操作过程的示例图;

图3为本申请实施例中可执行文件解析过程的示例流程图;

图4为本申请实施例中指令执行过程的示例流程图;

图5为本申请实施例提供的应用安装装置的示意图;

图6为本申请实施例提供的应用安装包的生成方法的流程图;

图7为本申请实施例提供的应用安装包的生成装置的示意图;

图8为本申请实施例提供的终端设备的示意图。

具体实施方式

以下结合附图对本申请实施例进行详细说明,应当理解,以下所说明的实施例仅用于说明和解释本申请,并不用于限定本申请。

在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1为本申请实施例提供的应用安装方法的流程图。本实施例提供的应用安装方法可以由终端设备(比如,手机、笔记型电脑等便携式终端,或者台式电脑等固定终端)执行。然而,本申请对此并不限定。

如图1所示,本实施例提供的应用安装方法,包括:

s101、获取应用安装包,其中,应用安装包经过以下操作优化:将dex字节码编译成oat格式的可执行文件;换言之,在本步骤,获取经过dex2oat操作优化后的应用安装包;

s102、基于应用安装包,进行应用安装操作,其中,应用安装操作跳过dex2oat操作。

本实施例提供的应用安装方法能够用于提高安卓应用的安装速度,进而提升安卓用户的使用体验。

本实施例中,终端设备可以从应用商城或应用下载网站下载预优化后的应用安装包,然后进行应用新安装或覆盖安装操作。其中,预优化后的应用安装包可以包括已经过dex2oat操作优化后的各种文件,比如,dex文件、jar文件、apk文件等。

本实施例中,dex2oat操作指将dex字节码编译成oat格式的可执行文件的操作。

在本实施例中,在下载应用安装包之后,可以加载dex文件到内存中,并将相应的资源文件解析并复制到系统安装目录;然后,将class.dex文件解压到系统安装路径。其中,当执行到安装指令dex2oat时,跳过此指令执行,而将预编译时期生成的odex文件(即预优化之后的dex文件)安装到系统路径。其他指令的执行不影响。

图2为本申请实施例的应用安装操作过程的示例图。如图2所示,在本实施例中,执行应用安装操作,可以包括:

s1021、解析应用安装包;

s1022、根据解析结果,进行信息校验和注册;

s1023、进行应用权限更新操作。

其中,在s1021完成对应用安装包中xml文件的读取,可以得到所申请权限、所用的各种组件(比如,activity)、广播、服务等;在s1022中,可以校验权限和签名是否正确,并完成对广播、服务等的注册;在s1023中,根据预优化的应用安装包内的可执行文件(比如,dex文件),通知系统对应用所有的组件及组件申请的权限进行加载和更新。上述过程结束后,可以启动应用。

在示例性实施方式中,s102可以包括:

基于应用安装包内已注入的代码,执行应用安装操作。

在本示例中,在应用安装过程中可以直接使用预先进行的dex2oat操作得到的dex文件,并且通过代码注入技术,使得应用安装流程跳过dex2oat操作,从而提高应用安装速度。

在示例性实施方式中,s102可以包括:

基于应用安装包的可执行文件中已注入的挂钩(hook)点,执行应用安装操作。其中,在执行应用安装操作过程中,跳过dex2oat指令(即将dex字节码编译成oat格式的可执行文件的指令)。

本示例所采用的代码注入技术为hook技术。hook技术指过滤(或叫挂钩)消息的技术,指过滤一些关键函数调用,在函数执行前,先执行自定义的挂钩函数,从而达到监控函数调用,改变函数功能的目的。

在本示例中,基于应用安装包的可执行文件中已注入的hook点,执行应用安装操作,可以包括:

基于可执行文件中注入的第一hook点,在可执行文件的解析过程中,跳过加载dex2oat指令;

基于可执行文件中注入的第二hook点,在指令执行过程中,跳过执行dex2oat指令。

示例性地,基于可执行文件中注入的第一hook点,在可执行文件的解析过程中,跳过加载dex2oat指令,可以包括:

运行函数read()从内存读取内容时,若读取到第一hook点,则跳转至自定义函数read_handle()的开始地址,以跳过加载dex2oat指令。

示例性地,基于可执行文件中注入的第二hook点,在指令执行过程中,跳过执行dex2oat指令,可以包括:

运行函数execv()从内存读取并执行指令时,若读取并执行到第二hook点,则跳转到自定义函数execv_handle()的开始地址,以跳过执行dex2oat指令。

下面参照图3和图4说明代码注入的实现示例。

在本示例中,终端设备下载安卓应用的应用安装包之后,若用户以点击等方式触发应用安装进程,则应用安装进程通过进程间通信方式将安装请求发送给服务层的pms(packagemanagerservice,包管理服务);pms接收安装请求后,可以调用服务进程执行应用安装操作。

图3为本申请实施例中可执行文件解析过程的示例流程图。本示例中,可执行文件(比如,dex文件)解析过程对应一次read_handle()指令执行过程,通过read_handle()跳转到自定义的流程中,跳过原有的dex2oat指令的加载过程,然后在read_handle()执行结束跳转回之前执行堆栈,接着解析下一条指令。

在本示例中,pms可以将dex文件先加载到内存,然后,通过运行read()函数,依次读取内存内容进行解析。其中,read()函数为系统函数,用于从相应地址读取内容。

如图3所示,本示例的过程可以包括:

s301、在pms调用服务进程运行到read()函数,读取内存内容,并将读取的第i段字节记为read[i];

其中,read()函数可以依次从内存读取设定长度的字节结构,比如,按照32bit(比特)或64bit字长读取。

s302、依次处理读取的字节,判断read[i]是否为自定义函数read_handle()的地址;若不是,则表示read[i]为程序正常内容,可以仅将read[i]加载入内存;若是,则表示read[i]为hook点(对应于上述的第一hook点),跳转到自定义函数read_handle()的开始地址,然后执行s303,以跳过加载dex2oat指令;

其中,read_handle()为本示例中的自定义函数,hook跳转函数,可以在自定义函数中加入自定义实现功能。

s303、将read_handle()函数载入内存;

在本步骤中,由mmap函数进行内存复制,将获得到数据保存到内存的缓存(buffer)区域;其中,mmap函数用于将一个文件或者对象映射进内存。

其中,获取的数据可以包括应用包含的数据,比如,代码文件、资源文件、声明文件、类(class)文件等,在内存中均是以二进制形式表示。

s304、由函数read()的内存中读取第j段字节,其中,j=0,1,…i;即读取read[j]指令;比如,将read[0]指令从read()函数的内存中读出,将read[1]指令从read()函数的内存中读出,并在内存中记录相应的指令内容,比如ldrpc(即将数据传送到pc寄存器)。

s305、判断读取的第j段字节是否为read[i+1]的地址,若不是,则返回s304,继续读取第j段字节进行复制,若是,则执行s306。

s306、在完成上述指令内容的读取和复制之后,结束read_handle()函数跳转,返回到原来的read()函数中。

图4为本申请实施例的指令执行过程的示例流程图。在本示例中,指令执行过程能够在运行时找到自定义函数,并跳过dex2oat指令的执行。指令执行过程可以在解析dex文件后,由pms基于dex文件的解析结果,运行execv()函数实现。其中,execv()函数通常在fork子线程后运行,execv()会停止执行当前的进程,根据传入的参数,转入到目标函数进程。

如图4所示,本示例的过程可以包括:

s401、通过pms调用服务进程运行execv()函数,由execv()函数读取并执行系统运行时传递的命令行参数,其中,命令行参数包括内存中解析得到的要执行的指令。其中,将读取的第i段字节记为execv[i]。

下面列举其中两条指令作为示例进行说明:

bx指令:跳转到指令中所指定的目标地址,目标地址处的指令既可以是arm指令,也可以是thumb指令;

nop指令:空指令,运行该指令时不进行任何处理,但是会占用一个指令的时间。

关于指令的含义可以参考汇编标准指令定义。本申请对此并不限定。在本示例中,以arm指令为例进行说明。arm(advancedriscmachine,进阶精简指令集机器)指令集是指计算机arm操作指令系统。在arm中有两种方式可以实现程序的跳转:一种是跳转指令;另一种是直接向pc寄存器(r15)中写入目标地址值。

在本步骤中,按规定的字节大小依次读取指令,当读取指令1为bxpc,然后接着读取指令2为空指令,如此类指令则依次读取入寄存器中。

s402、判断execv[i]是否为空指令;若是,则返回s401继续读取下一个指令;若否,则执行s403。

s403、判断execv[i]是否为自定义函数execv_handle()的地址,若不是,则返回s401,若是,则表示execv[i]为hook点(对应于上述的第二hook点),跳转到自定义函数exec_handle()的开始地址,执行s404,以跳过执行dex2oat指令。

其中,execv_handle()为本示例中的自定义函数,hook跳转函数,可以在自定义函数中加入自定义实现功能。

s404、执行execv_handle()函数;

比如,在本步骤中,根据mmap复制的内存缓存(buffer)区域的首地址,依次从execv_handle()函数的地址参数execv[0]开始到地址参数execv[5],读取指令到运行时内存中被调用执行。

在本示例中,在跳转到execv_handle()函数后,执行的指令是根据read_handle()加载得到的。

s405、由函数execv()的内存中读取第j段字节,其中,j=0,1,…i;即读取execv[j]指令,并执行读取的指令,其中,该指令为read_handle()堆栈空间内的。

s406、判断execv[j]是否为arm指令,若是,则执行s407,否则,执行s408。

s407、将execv[j]指令切换为arm指令的执行方式,比如,执行指令ldrpc,然后执行s408。

s408、读取execv[j+1]字节处指令并执行。

s409、判断第j+1段字节是否为exevc[i+1]的地址,若不是,则返回s405,若是,则执行s410。

s410、在完成上述指令的读取和执行之后,结束execv_handle()函数跳转,并返回execv()函数。

图5为本申请实施例提供的应用安装装置的示意图。如图5所示,本实施例提供的应用安装装置,包括:

获取模块501,配置为获取经过dex2oat操作优化后的应用安装包;

安装模块502,配置为基于应用安装包,进行应用安装操作,其中,应用安装操作跳过dex2oat操作。

关于本实施例提供的应用安装装置的相关说明可以参照图1对应的方法实施例的描述,故于此不再赘述。

图6为本申请实施例提供的应用安装包的生成方法的流程图。如图6所示,本实施例提供的生成方法,包括:

s601、对应用进行文件编译之后,执行dex2oat操作,得到优化后的应用文件;

s602、打包优化后的应用文件,生成该应用的应用安装包。

本实施例可以由计算设备(比如,个人电脑等)在应用开发环境下执行,通过在编译之后执行dex2oat操作,得到预优化的dex文件,使得应用安装过程可以跳过dex2oat操作。

本实施例中,应用包括安卓(android)应用。安卓应用是用java编写的,利用androidsdk(softwaredevelopmentkit,软件开发工具)编译代码,并且把所有的数据和资源文件打包成一个压缩文件(即应用安装包),该压缩文件包含一个安卓应用的所有内容,基于该压缩文件实现在安卓平台安装安卓应用。

在本实施例中,在编译阶段,首先正常android应用编译完成后执行dex2oat操作,也就是dex等文件的优化操作,本操作比较耗时,因此放在打包之前即编译阶段完成。s602的打包过程打包的内容都切换成了经过dex2oat操作优化后的文件。其中,正常打包流程可以包括:使用打包工具aapt,将应用声明文件、资源文件编译分别生成r.java文件和资源包文件;javac编译代码源文件生成的class文件,用dx工具将class文件转换,生成classes.dex文件,这一步优化后打包的dex文件是在编译阶段预先处理得到的;通过apkbuilder打包上述内容生成压缩文件;压缩文件经过签名等操作生成最终可发布应用安装包。

在示例性实施方式中,s602可以包括:在打包优化后的应用文件时,通过调用原生(native)层的函数,在应用文件中注入跳过dex2oat操作的hook点。如此,支持在应用安装过程中跳过dex2oat操作,以提升应用安装速度。

图7为本申请实施例提供的应用安装包的生成装置的示意图。如图7所示,本实施例提供的应用安装包的生成装置,包括:

优化操作模块701,配置为对应用进行文件编译之后,执行dex2oat操作,得到优化后的应用文件;

打包模块702,配置为打包优化后的应用文件,生成应用的应用安装包。

关于本实施例提供的应用安装装置的相关说明可以参照图6对应的方法实施例的描述,故于此不再赘述。

图8为本申请实施例提供的终端设备的示意图。如图8所示,本实施例提供的终端设备800,包括:第一存储器801以及第一处理器802,第一存储器801适于存储应用安装程序,该应用安装程序被第一处理器802执行时实现图1对应实施例提供的应用安装方法的步骤。

其中,第一处理器802可以包括但不限于微处理器(mcu,microcontrollerunit)或可编程逻辑器件(fpga,fieldprogrammablegatearray)等的处理装置。第一存储器801可用于存储应用软件的软件程序以及模块,如本实施例中的应用安装方法对应的程序指令或模块,第一处理器802通过运行存储在第一存储器801内的软件程序以及模块,从而执行各种功能应用以及数据处理,比如实现本实施例提供的应用安装方法。第一存储器801可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些示例中,第一存储器801可包括相对于第一处理器802远程设置的存储器,这些远程存储器可以通过网络连接至终端设备800。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

示例性地,终端设备800还可以包括第一通信单元803;第一通信单元803可以经由一个网络接收或者发送数据。在一个实例中,第一通信单元803可以为射频(radiofrequency,简称为rf)模块,其用于通过无线方式与互联网进行通信。

此外,本申请实施例还提供一种计算设备,包括:第二存储器以及第二处理器,第二存储器适于存储应用安装包的生成程序,该生成程序被第二处理器执行时实现图6对应实施例提供的应用安装包的生成方法的步骤。

关于本实施例提供的计算设备的第二处理器和第二存储器的相关说明可以参照第一处理器和第一存储器的说明,故于此不再赘述。

此外,本申请实施例还提供一种计算机可读介质,存储有应用安装程序,该应用安装程序被处理器执行时图1对应实施例提供的应用安装方法的步骤。

此外,本申请实施例还提供一种计算机可读介质,存储有应用安装包的生成程序,该生成程序被处理器执行时实现图6对应实施例提供的应用安装包的生成方法的步骤。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块或单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块或单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

虽然本申请所揭露的实施方式如上,但所述的内容仅为便于理解本申请而采用的实施方式,并非用以限定本申请。任何本申请所属领域内的技术人员,在不脱离本申请所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本申请的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1