一种AndroidAPP快速启动的方法、Android终端及存储介质与流程

文档序号:23820655发布日期:2021-02-03 16:41阅读:74来源:国知局
一种AndroidAPP快速启动的方法、Android终端及存储介质与流程
一种android app快速启动的方法、android终端及存储介质
技术领域
[0001]
本发明属于android系统应用的技术领域,具体涉及一种android app快速启动的方法、android终端及存储介质。


背景技术:

[0002]
如今没进行特定优化的android app的冷启动速度需要4-5秒,特别在android版本在sdk21以下的系统,冷启动android app的时间30秒左右,甚至有些更老的系统接近1分钟的时间。现有技术中,android版本在sdk21以下的也占有25%左右,对于这部分用户来说,android设备冷启动app的时候会出现长达30-60秒的黑屏效果,这样严重地影响用户体验。
[0003]
这个问题产生的根本原因就是app安装或者app升级之后multidex过程所产生的。谷歌官方multidex是加载压缩文件形态的dex文件,这个过程在android版本在sdk21以下的系统是非常久。


技术实现要素:

[0004]
为了解决上述现有技术存在的问题和不足,本发明的目的是提供一种android app快速启动的方法、android终端及存储介质,可以提升android app的冷启动速度。
[0005]
为实现是上述目的,本发明首先提供一种android app快速启动的方法,包括以下步骤:
[0006]
s1,在apk中生成合法的dexfile对象;
[0007]
s2,启动app时,判断apk是否拥有dexfile对象,若是,则生成非压缩dex文件,再生成odex文件,完成启动。
[0008]
进一步地,步骤s1具体包括,从apk中解压获取原始secondary dex文件的字节码,从原始secondary dex文件的字节码中获取dexfile数组,从dexfile数组中获得合法的dexfile对象,将dexfile对象添加到apk中。
[0009]
进一步地,步骤s1中,通过dlsym函数从从原始secondary dex文件的字节码中获取dexfile数组。
[0010]
进一步地,步骤s1中,获得合法的dexfile对象的方法具体包括:在dexfile数组中查询并调用解析函数,通过解析函数逐个传入从apk获取的dex文件字节码到dexfile对象中,完成dex文件加载,得到合法的dexfile对象。
[0011]
进一步地,解析函数为dalvik_dalvik_system_dexfile_opendexfile_bytearray。
[0012]
进一步地,步骤s1中,具体地将dexfile对象全部添加到apk的类加载器的pathlist中。
[0013]
进一步地,类加载器为pathclassloader。
[0014]
进一步地,步骤s2还包括,若akp没有dexfile对象,则生成压缩dex文件,再生成
odex文件,完成启动。
[0015]
本发明同时提供一种android终端,包括处理器和存储器,存储器上存储有可在处理器上运行的计算机程序,计算机程序被处理器执行时实现上述android app快速启动的方法。
[0016]
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的android app快速启动的方法。
[0017]
与现有技术相比,本发明的有益效果包括:从akp中获取获取dexfile对象生成非压缩dex,这样不需要生成压缩dex文件,不需要加载压缩dex文件,省去了压缩的时间,简化了app启动流程,大大提升了android app冷启动的速度。
附图说明
[0018]
图1是本发明实施例一的方法步骤图;
[0019]
图2是本发明实施例二的android安卓终端的结构图。
具体实施方式
[0020]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0021]
实施例一:
[0022]
本发明实施例一提供一种android app快速启动的方法,如图1所示,包括以下步骤:
[0023]
s1,从apk(android application package,android应用程序包)中解压获取原始secondary dex文件的字节码;在原始secondary dex文件的字节码通过dlsym获取dexfile数组;在dexfile数组中查询并调用dalvik_dalvik_system_dexfile_opendexfile_bytearray函数,逐个传入之前从apk获取的dex字节码,完成dex加载,得到合法的dexfile对象;将dexfile对象都添加到apk的pathclassloader的pathlist集合里;
[0024]
s2,启动app,判断是否拥有dexfile对象;若是,则生成非压缩dex文件,再生成odex文件,启动完成;若否,则生成压缩dex文件,再生成odex文件步骤,启动完成。
[0025]
采用上述方法,从akp中获取获取dexfile对象生成非压缩dex,这样不需要生成压缩dex文件,不需要加载压缩dex文件,省去了压缩的时间,简化了app启动流程,大大提升了android app冷启动的速度。经过大量实验统计,本发明实施例可以将android app冷启动的时间减少70%以上。
[0026]
步骤s1中,dlsym函数可以根据动态链接库操作句柄与符号,返回符号对应的地址,不但可以获取函数地址,也可以获取变量地址。本实施例中,通过dlsym函数获取dexfile数组的代码如下:
[0027][0028]
本实施例中,dalvik_dalvik_system_dexfile_opendexfile_bytearray函数在android源码中,可以直接调用。
[0029]
pathclassloader是一个类加载器,可以加载jar、apk、dex等类型文件,这样提升了文件执行的兼容性。
[0030]
步骤s2中,若akp没有dexfile对象,则生成压缩dex文件,再生成odex文件,完成启动。这样可以在出现没有成功生成合法的dexfile对象时,可以保证app仍能正常启动。
[0031]
实施例二:
[0032]
本发明实施例二提供一种android终端,如图2所示,包括处理器和存储器,存储器上存储有可在处理器上运行的计算机程序,计算机程序被处理器执行时实现实施例一提供的android app快速启动的方法。
[0033]
在本实施例设备的实现中,存储器2和处理器1之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可以通过一条或者多条通信总线或信号线电性连接,如可以通过总线3连接。存储器2中存储有实现数据访问控制方法的计算机执行指令,包括至少一个可以软件或固件的形式存储于存储器2中的软件功能模块,处理器1通过运行存储在存储器2内的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器2可以是,但不限于,随机存取存储器(randomaccessmemory,简称:ram),只读存储器(readonlymemory,简称:rom),可编程只读存储器(programmableread-onlymemory,简称:prom),可擦除只读存储器(erasableprogrammableread-onlymemory,简称:eprom),电可擦除只读存储器(electricerasableprogrammableread-onlymemory,简称:eeprom)等。其中,存储器2用于存储程序,处理器1在接收到执行指令后,执行程序。进一步地,上述存储器2内的软件程序以及模块还可包括操作系统,其可包括各种用于管理系统任务(例如内存管理、存储设备控制、电源管理等)的软件组件和/或驱动,并可与各种硬件或软件组件相互通信,
从而提供其他软件组件的运行环境。处理器1可以是一种集成电路芯片,具有信号的处理能力。述的处理器1可以是通用处理器,包括中央处理器(centralprocessingunit,简称:cpu)、网络处理器(networkprocessor,简称:np)等。可以实现或者执行本实施例中公开的各方法、步骤及逻辑流程框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0034]
实施例三:
[0035]
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的android app快速启动的方法。
[0036]
本领域普通技术人员应理解:实现上述各实施例的全部或部分方法步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于计算机可读取的存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括但不局限于:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质,具体的介质类型本申请不做限制。
[0037]
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1