CN105975311B - 一种应用启动方法及装置 - Google Patents

一种应用启动方法及装置 Download PDF

Info

Publication number
CN105975311B
CN105975311B CN201610300439.5A CN201610300439A CN105975311B CN 105975311 B CN105975311 B CN 105975311B CN 201610300439 A CN201610300439 A CN 201610300439A CN 105975311 B CN105975311 B CN 105975311B
Authority
CN
China
Prior art keywords
dex
compressed
file
starting
compressed file
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.)
Active
Application number
CN201610300439.5A
Other languages
English (en)
Other versions
CN105975311A (zh
Inventor
邓淋元
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201610300439.5A priority Critical patent/CN105975311B/zh
Publication of CN105975311A publication Critical patent/CN105975311A/zh
Priority to PCT/CN2017/083446 priority patent/WO2017193885A1/zh
Priority to US16/046,540 priority patent/US10871973B2/en
Application granted granted Critical
Publication of CN105975311B publication Critical patent/CN105975311B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/50Conversion to or from non-linear codes, e.g. companding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/70Type of the data to be coded, other than image and sound
    • H03M7/702Software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Nonlinear Science (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供一种应用启动方法及装置,其中的应用启动方法可包括:获取第一压缩文件,所述第一压缩文件包含目标应用的启动信息以及所述目标应用的代码包dex压缩内容;从所述第一压缩文件中提取所述dex压缩内容;将所述dex压缩内容生成第二压缩文件;加载所述第二压缩文件中的所述dex压缩内容,并根据所述第一压缩文件中的所述启动信息启动所述目标应用。采用本发明实施例可节省解压和再压缩时间,减少目标应用启动时间,提高用户体验。

Description

一种应用启动方法及装置
技术领域
本发明涉及通信技术领域,具体涉及一种应用启动方法及装置。
背景技术
Android***限制每个dex(代码包)只能包含最多65535个方法数,在开发期间,编译工具就按照这一限制,将程序代码编译为若干个方法数不超过65535的dex包。在安装应用后首次启动该应用时,将顺序加载所有dex。
现有技术在首次启动该应用时,具体加载dex的方法按照图1所示流程:用户点击图标,应用进行dex装载,从安卓***安装包(Android Package,APK)文件中找到dex压缩内容,然后将该dex压缩内容解压到临时目录,再重新压缩为zip文件,以zip形式加载所有dex方法,进入应用主界面。
从上述可知,在首次启动安装的应用时,需要占用较多时间来执行解压以及重新压缩的操作,dex数量越多,耗时越长,设备越低端,耗时越长。此操作发生在启动界面和主界面显示之前,用户可明显感知到点击应用图标到看到界面变化之间有长时间等待,用户体验差。
发明内容
本发明实施例提供一种应用启动方法及装置,可节省解压和再压缩时间,减少目标应用启动时间,提高用户体验。
本发明第一方面提供一种应用启动方法,包括:
获取第一压缩文件,所述第一压缩文件包含目标应用的启动信息以及所述目标应用的代码包dex压缩内容;
从所述第一压缩文件中提取所述dex压缩内容;
将所述dex压缩内容生成第二压缩文件;
加载所述第二压缩文件中的所述dex压缩内容,并根据所述第一压缩文件中的所述启动信息启动所述目标应用。
本发明第二方面提供一种应用启动装置,包括:
获取模块,用于获取第一压缩文件,所述第一压缩文件包含目标应用的启动信息以及所述目标应用的代码包dex压缩内容;
提取模块,用于从所述第一压缩文件中提取所述dex压缩内容;
生成模块,用于将所述dex压缩内容生成第二压缩文件;
启动模块,用于加载所述第二压缩文件中的所述dex压缩内容,并根据所述第一压缩文件中的所述启动信息启动所述目标应用。
实施本发明实施例,具有如下有益效果:
本发明实施例,获取第一压缩文件,该第一压缩文件包含目标应用的启动信息以及目标应用的dex压缩内容,从该第一压缩文件中提取该dex压缩内容,将该dex压缩内容生成第二压缩文件,加载第二压缩文件中的dex压缩内容,并根据第一压缩文件中的启动信息启动目标应用。这种方式可节省解压和再压缩dex包的时间,减少目标应用启动时间,提高用户体验。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的现有技术中应用启动流程图;
图2为本发明实施例提供的一种应用启动方法的流程图;
图3为本发明实施例提供的另一种应用启动方法的流程图;
图4为本发明实施例提供的一种优化dex解压速度的流程图;
图5为本发明实施例提供的一种后台加载的流程图;
图6为本发明实施例提供的一种产品界面示意图;
图7为本发明实施例提供的一种优化比较示意图;
图8为本发明实施例提供的一种应用启动框图;
图9为本发明实施例提供的一种应用启动装置的结构示意图;
图10为本发明实施例提供的一种生成模块的结构示意图;
图11为本发明实施例提供的一种启动模块的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例中,所述目标应用为安装在终端上的任何应用,包括但不限于浏览器、电子邮件、即时消息服务、文字处理、键盘虚拟、窗口小部件(Widget)、加密、数字版权管理、语音识别、语音复制、定位导航(例如由全球定位***提供的功能)、音乐播放、视频播放等等。
下面将结合附图2-附图8,对本发明实施例提供的应用启动方法进行详细介绍。
请参照图2,为本发明实施例提供的一种应用启动方法的流程图;该方法可包括以下步骤S200-步骤S203。
S200,获取第一压缩文件,所述第一压缩文件包含目标应用的启动信息以及所述目标应用的代码包dex压缩内容;
本发明实施例中,当把目标应用安装完成后,首次启动该目标应用时,要对dex进行dexopt操作,将dex从APK文件中提取出来进行加载。具体可选的,获取第一压缩文件,该第一压缩文件可以为APK文件,APK文件中包含目标应用的代码包dex压缩内容,启动该目标应用时,均需要加载dex,通常加载dex是以zip形式进行加载。
进一步可选的,该第一压缩文件中还包含目标应用的启动信息,目标应用的启动信息包括但不限于启动该目标应用的数据以及启动该目标应用的入口程序代码。
S201,从所述第一压缩文件中提取所述dex压缩内容;
本发明实施例中,从第一压缩文件中提取出dex压缩内容,具体的提取过程可以是根据dex压缩内容的文件名进行查找,可选的,dex压缩内容在APK文件中文件名为classes2.dex的entry中,通过遍历所有entry找到该dex压缩内容,如下所示:
(1)先在APK文件中查找目录结束标示结构(标识符是:0x06054b50),然后从该位置往下偏移16个字节处,找到核心目录第一个entry的偏移处(标识符是:0x02014b50)。
(2)然后用for循环开始记录各个entry的信息(可以记录下每个entry在APK文件中的偏移,这样便于在写信息(即是生成第二压缩文件)的时候定位到该entry的开始处),从entry头往下偏移42字节处,去找该entry的文件头信息,文件头信息包括文件头+文件源数据(压缩后的数据)+(hasDD,不一定有)。在APK文件中,dex压缩内容在文件名为classes2.dex中的entry中。找到dex压缩内容之后,即可以开始手动zip压缩文件的写入过程。
S202,将所述dex压缩内容生成第二压缩文件;
本发明实施例中,根据所提取的dex压缩内容,生成第二压缩文件,第二压缩文件的压缩格式可以是zip格式,在这里就不需要将dex压缩内容先进行解压到临时目录,再重新压缩,节省了目标应用启动的时间。
可选的,将dex压缩内容生成第二压缩文件可以包括以下两个步骤:
步骤一、根据所述第一压缩文件中所述dex压缩内容的文件头信息,生成第二压缩文件的头信息,所述第二压缩文件的头信息包含所述dex压缩内容;
步骤二、根据所述第一压缩文件中所述dex压缩内容的核心目录信息,生成所述第二压缩文件的核心目录信息。
本发明实施例中,第二压缩文件包括头信息、核心目录信息以及目录结束标示结构信息等,在生成第二压缩文件时,根据第一压缩文件中该dex压缩内容对应的文件头信息,生成第二压缩文件的头信息,该第二压缩文件的头信息也包括文件头+文件源数据(压缩后的dex数据)+(hasDD,不一定有)。
进一步,生成第二压缩文件中核心目录信息时,也是根据第一压缩文件中该dex压缩内容的核心目录信息生成,具体的第二压缩文件生成过程如下,这里继续以步骤S201中(1)和(2)进行说明:
(3)先写第二压缩文件的文件头信息,需要改文件名字为classes.dex,重算文件名长度,其他信息可以把APK文件classes2.dex的entry中的文件头信息拷贝过来。
(4)再写第二压缩文件的entry核心目录信息
因为只有一个entry,将里面的文件名,文件名长度,文件头位移做相应修改,其他信息从原来APK文件classes2.dex的entry中的信息拷贝过来即可。在上述(2)中,读APK文件的时候记录了entry在APK文件中的偏移位置,在找寻classes2.dex的过程中,可以用buffer流,因为entry中每个字段的信息字节数都是确定的,所以可以用一个变量来定位和记录各个位置的偏移情况。
(5)写第二压缩文件的目录结束标示结构信息。
S203,加载所述第二压缩文件中的所述dex压缩内容,并根据所述第一压缩文件中的所述启动信息启动所述目标应用。
本发明实施例中,当根据dex压缩内容生成第二压缩文件之后,即可加载第二压缩文件中的dex压缩内容,并根据第一压缩文件中的启动信息启动目标应用,需要说明的是,第一压缩文件中的启动信息可以是处于解压状态,例如可以是在目标应用安装过程中,进行编译时即进行了解压。
上述步骤S200-S203主要阐述了优化dex解压速度,可以等效于图4的流程图,首次安装目标应用启动时要对dex进行dexopt操作,需要将dex从APK文件中提取出来,本方案直接读取APK文件,从APK文件中找到压缩状态的dex压缩内容,复制对应内容,加上zip文件头,直接输出为新zip文件,并以zip形式加载dex的所有方法,最后进入应用程序(Application,APP)主界面。相比现有方案节省了一次解压和一次压缩操作,若使用双核1GHz的手机对目标应用进行启动,则可以将这部分文件操作时间从秒级降到毫秒级。
可选的,所述dex压缩内容为所述第一压缩文件中的分dex程序包,所述分dex程序包包含非启动入口程序,所述启动信息包括所述第一压缩文件中的主dex程序包,所述主dex程序包包含至少一个解压状态的启动入口程序;
所述加载所述第二压缩文件中的所述dex压缩内容,并根据所述第一压缩文件中的所述启动信息启动所述目标应用,包括以下步骤S20~S22:
S20,启动所述主dex程序包,并显示启动界面;
S21,加载所述第二压缩文件中的所述dex压缩内容;
S22,当检测到加载完所述dex压缩内容,执行所述主dex程序包中的所述至少一个启动入口程序,并显示所述目标应用的主界面。
本发明实施例中,当首次安装启动目标应用时,用户点击应用图标启动目标应用,旧版本会先加载dex,再调用该目标应用的启动入口程序启动目标应用从而出现闪屏,这样启动目标应用,在加载dex过程中用户看不到闪屏,呈卡死状态,体验较差。
本发明实施例对上述启动过程进行改进,实现先出现闪屏,再加载dex。而要实现上述启动过程就需要保证所有可能的启动入口程序的所有直接依赖集和间接依赖集在安装编译时都分在主dex程序包里,这样启动主dex程序包时可以调动显示启动界面,即出现闪屏,如图6所示,当用户点击应用图标时,即出现第二个启动界面,在启动界面显示过程中异步加载dex。
需要说明的是,主dex程序包中的依赖集很大,***的自动分包方案不能保证所有启动入口程序的依赖集都在主dex程序包中。因此开发人员分析出启动入口程序的所有直接依赖集和间接依赖集,然后确保依赖集都在主dex程序包里面,这样启动入口就能够保证启动成功。开发人员首先对分dex程序包的脚本做修改,加入预设分类规则,当在目标应用安装编译过程中,即根据该预设分类规则将所有程序分在主dex程序包和分dex程序包。
在主dex程序包中需要确保keep最小依赖集,保证主dex程序包能够有我们所有的依赖类集合,主要包含如下几个部分:service、content provider、broadcast、MusicApplication、LifeCycleManager、BaseActivity、OuterShellBaseActivity、DexActivity。
优选的,给主dex程序包增加外壳activity(OuterShellBaseActivity,DexActivity),OuterShellBaseActivity是个基类,和Activity类似,首次启动目标应用时,分dex程序包中的dex压缩内容没载入的情况下要经过这个外壳,从而调用显示启动界面。流程如图8所示:
A、正常入口去启动对应的activity,会先到基本组件Acitivity或者外壳组件OuterShellBaseActivity里面判断是否已经加载过dex;
若是->正常启动,执行步骤B;
若否->保留当前intent信息,并存入下一个intent中,然后去启动DexActiivty,在DexAcitivty中载入dex之后,根据得到的intent启动原来activity,在dex异步加载过程中一直处于闪屏状态,当dex加载完毕,调用应用启动组件启动应用,出现应用主界面,该启动方式为首次启动逻辑;
B、在onattachbasecontext里面加载dex,然后调用应用启动组件启动应用,出现闪屏,该启动方式为非首次启动逻辑;
进一步如图8所示,启动方式还可以是覆盖安装启动方式,具体请参照图3的实施例所述,在此不再赘述。
如图7表格所示,采用不同方案目标应用的启动耗时完全不同,比如,使用双核1GHz的android 4.4.2的P1手机对目标应用进行启动,采用现有方案(即背景技术所述方案)启动时,耗时3100ms,采用本发明优化后,耗时170ms,使用双核1GHz的android 4.4.4的P2手机对目标应用进行启动,采用现有方案(即背景技术所述方案)启动时,耗时1400ms,采用本发明优化后,耗时170ms,从上述比较可知,采用本发明实施例的应用启动方法可以大大减小目标应用的首次启动时长。
本发明实施例,获取第一压缩文件,该第一压缩文件包含目标应用的启动信息以及目标应用的dex压缩内容,从该第一压缩文件中提取该dex压缩内容,将该dex压缩内容生成第二压缩文件,加载第二压缩文件中的dex压缩内容,并根据第一压缩文件中的启动信息启动目标应用。这种方式可节省解压和再压缩dex包的时间,减少目标应用启动时间,提高用户体验。
请参照图3,为本发明实施例提供的另一种应用启动方法的流程图,该方法可包括以下步骤S300-S304;
S300,当检测到***广播的用于通知目标应用安装完成的广播包时,获取第一压缩文件;
本发明实施例中,覆盖安装目标应用后,***会广播用于通知目标应用安装完成的广播包PACKAGE_REPLACED,目标应用接收PACKAGE_REPLACED广播,并启动独立进程进行dex预解压,即是自动获取第一压缩文件,并提取该第一压缩文件中的dex压缩内容,将该dex压缩内容重新生成第二压缩文件,并加载第二压缩文件中的dex。
如图5所示,APP被安装到设备,***发出PACKAGE_REPLACED广播,APP启动lite线程,lite线程调用本发明实施例一中的应用启动方法进行dex加载,加载完毕后,lite线程退出,之后用户使用APP直接按照非首次启动流程,缩短首次启动时间。
S301,从所述第一压缩文件中提取所述dex压缩内容;
S302,将所述dex压缩内容生成第二压缩文件;
S303,加载所述第二压缩文件中的所述dex压缩内容;
本发明实施例步骤S301-S303请参照图2的实施例步骤S201~S203,在此不再赘述。
S304,当检测到启动所述目标应用的启动指令时,根据所述第一压缩文件中的所述启动信息启动所述目标应用。
本发明实施例中,当检测到启动目标应用的启动指令(比如用户点击应用图标)时,根据第一压缩文件中的启动信息启动目标应用,而不需要再去加载dex,因为dex已经在目标应用安装后即进行了加载。
本发明实施例,获取第一压缩文件,该第一压缩文件包含目标应用的启动信息以及目标应用的dex压缩内容,从该第一压缩文件中提取该dex压缩内容,将该dex压缩内容生成第二压缩文件,加载第二压缩文件中的dex压缩内容,并根据第一压缩文件中的启动信息启动目标应用。这种方式可节省解压和再压缩dex包的时间,减少目标应用启动时间,提高用户体验。
下面将结合附图9-附图11,对本发明实施例提供的一种应用启动装置进行详细介绍。
请参照图9,为本发明实施例提供的一种应用启动装置的结构示意图,如图所示,该应用启动装置包括获取模块100、提取模块101、生成模块102以及启动模块103;
获取模块100,用于获取第一压缩文件,所述第一压缩文件包含目标应用的启动信息以及所述目标应用的代码包dex压缩内容;
本发明实施例中,当把目标应用安装完成后,首次启动该目标应用时,要对dex进行dexopt操作,将dex从APK文件中提取出来进行加载。具体可选的,获取模块100获取第一压缩文件,该第一压缩文件可以为APK文件,APK文件中包含目标应用的代码包dex压缩内容,启动该目标应用时,均需要加载dex,通常加载dex是以zip形式进行加载。
进一步可选的,该第一压缩文件中还包含目标应用的启动信息,目标应用的启动信息包括但不限于启动该目标应用的数据以及启动该目标应用的入口程序代码。
提取模块101,用于从所述第一压缩文件中提取所述dex压缩内容;
本发明实施例中,提取模块101从第一压缩文件中提取出dex压缩内容,具体的提取过程可以是根据dex压缩内容的文件名进行查找,可选的,dex压缩内容在APK文件中文件名为classes2.dex的entry中,通过遍历所有entry找到该dex压缩内容,如下所示:
(1)先在APK文件中查找目录结束标示结构(标识符是:0x06054b50),然后从该位置往下偏移16个字节处,找到核心目录第一个entry的偏移处(标识符是:0x02014b50)。
(2)然后用for循环开始记录各个entry的信息(可以记录下每个entry在APK文件中的偏移,这样便于在写信息(即是生成第二压缩文件)的时候定位到该entry的开始处),从entry头往下偏移42字节处,去找该entry的文件头信息,文件头信息包括文件头+文件源数据(压缩后的数据)+(hasDD,不一定有)。在APK文件中,dex压缩内容在文件名为classes2.dex中的entry中。找到dex压缩内容之后,即可以开始手动zip压缩文件的写入过程。
生成模块102,用于将所述dex压缩内容生成第二压缩文件;
本发明实施例中,生成模块102根据所提取的dex压缩内容,生成第二压缩文件,第二压缩文件的压缩格式可以是zip格式,在这里就不需要将dex压缩内容先进行解压到临时目录,再重新压缩,节省了目标应用启动的时间。
可选的,如图10所示,生成模块102可以包括第一生成单元1020和第二生成单元1021;
第一生成单元1020,用于根据所述第一压缩文件中所述dex压缩内容的文件头信息,生成第二压缩文件的头信息,所述第二压缩文件的头信息包含所述dex压缩内容;
第二生成单元1021,用于根据所述第一压缩文件中所述dex压缩内容的核心目录信息,生成所述第二压缩文件的核心目录信息。
本发明实施例中,第二压缩文件包括头信息、核心目录信息以及目录结束标示结构信息等,在生成第二压缩文件时,根据第一压缩文件中该dex压缩内容对应的文件头信息,生成第二压缩文件的头信息,该第二压缩文件的头信息也包括文件头+文件源数据(压缩后的dex数据)+(hasDD,不一定有)。
进一步,生成第二压缩文件中核心目录信息时,也是根据第一压缩文件中该dex压缩内容的核心目录信息生成,具体的第二压缩文件生成过程如下,这里继续基于上述(1)和(2)进行说明:
(3)先写第二压缩文件的文件头信息,需要改文件名字为classes.dex,重算文件名长度,其他信息可以把APK文件classes2.dex的entry中的文件头信息拷贝过来。
(4)再写第二压缩文件的entry核心目录信息
因为只有一个entry,将里面的文件名,文件名长度,文件头位移做相应修改,其他信息从原来APK文件classes2.dex的entry中的信息拷贝过来即可。在上述(2)中,读APK文件的时候记录了entry在APK文件中的偏移位置,在找寻classes2.dex的过程中,可以用buffer流,因为entry中每个字段的信息字节数都是确定的,所以可以用一个变量来定位和记录各个位置的偏移情况。
(5)写第二压缩文件的目录结束标示结构信息。
启动模块103,用于加载所述第二压缩文件中的所述dex压缩内容,并根据所述第一压缩文件中的所述启动信息启动所述目标应用。
本发明实施例中,当根据dex压缩内容生成第二压缩文件之后,启动模块103即可加载第二压缩文件中的dex压缩内容,并根据第一压缩文件中的启动信息启动目标应用,需要说明的是,第一压缩文件中的启动信息可以是处于解压状态,例如可以是在目标应用安装过程中,进行编译时即进行了解压。
上述主要阐述了优化dex解压速度,可以等效于图4的流程图,首次安装目标应用启动时要对dex进行dexopt操作,需要将dex从APK文件中提取出来,本方案直接读取APK文件,从APK文件中找到压缩状态的dex压缩内容,复制对应内容,加上zip文件头,直接输出为新zip文件,并以zip形式加载dex的所有方法,最后进入应用程序(Application,APP)主界面。相比现有方案节省了一次解压和一次压缩操作,若使用双核1GHz的手机对目标应用进行启动,则可以将这部分文件操作时间从秒级降到毫秒级。
可选的,所述dex压缩内容为所述第一压缩文件中的分dex程序包,所述分dex程序包包含非启动入口程序,所述启动信息包括所述第一压缩文件中的主dex程序包,所述主dex程序包包含至少一个解压状态的启动入口程序;
如图11所示,启动模块103可以包括第一显示单元1030、加载单元1031以及第二显示单元1032;
第一显示单元1030,用于启动所述主dex程序包,并显示启动界面;
加载单元1031,用于加载所述第二压缩文件中的所述dex压缩内容;
第二显示单元1032,用于当检测到加载完所述dex压缩内容,执行所述主dex程序包中的所述至少一个启动入口程序,并显示所述目标应用的主界面。
本发明实施例中,当首次安装启动目标应用时,用户点击应用图标启动目标应用,旧版本会先加载dex,再调用该目标应用的启动入口程序启动目标应用从而出现闪屏,这样启动目标应用,在加载dex过程中用户看不到闪屏,呈卡死状态,体验较差。
本发明实施例对上述启动过程进行改进,实现先出现闪屏,再加载dex。而要实现上述启动过程就需要保证所有可能的启动入口程序的所有直接依赖集和间接依赖集在安装编译时都分在主dex程序包里,这样启动主dex程序包时可以调动显示启动界面,即出现闪屏,如图6所示,当用户点击应用图标时,即出现第二个启动界面,在启动界面显示过程中异步加载dex。
需要说明的是,主dex程序包中的依赖集很大,***的自动分包方案不能保证所有启动入口程序的依赖集都在主dex程序包中。因此开发人员分析出启动入口程序的所有直接依赖集和间接依赖集,然后确保依赖集都在主dex程序包里面,这样启动入口就能够保证启动成功。开发人员首先对分dex程序包的脚本做修改,加入预设分类规则,当在目标应用安装编译过程中,即根据该预设分类规则将所有程序分在主dex程序包和分dex程序包。
在主dex程序包中需要确保keep最小依赖集,保证主dex程序包能够有我们所有的依赖类集合,主要包含如下几个部分:service、content provider、broadcast、MusicApplication、LifeCycleManager、BaseActivity、OuterShellBaseActivity、DexActivity。
优选的,给主dex程序包增加外壳activity(OuterShellBaseActivity,DexActivity),OuterShellBaseActivity是个基类,和Activity类似,首次启动目标应用时,分dex程序包中的dex压缩内容没载入的情况下要经过这个外壳,从而调用显示启动界面。流程如图8所示:
A、正常入口去启动对应的activity,会先到基本组件Acitivity或者外壳组件OuterShellBaseActivity里面判断是否已经加载过dex;
若是->正常启动,执行步骤B;
若否->保留当前intent信息,并存入下一个intent中,然后去启动DexActiivty,在DexAcitivty中载入dex之后,根据得到的intent启动原来activity,在dex异步加载过程中一直处于闪屏状态,当dex加载完毕,调用应用启动组件启动应用,出现应用主界面,该启动方式为首次启动逻辑;
B、在onattachbasecontext里面加载dex,然后调用应用启动组件启动应用,出现闪屏,该启动方式为非首次启动逻辑;
进一步如图8所示,启动方式还可以是覆盖安装启动方式,具体请参照图3的实施例所述,在此不再赘述。
如图7表格所示,采用不同方案目标应用的启动耗时完全不同,比如,使用双核1GHz的android 4.4.2的P1手机对目标应用进行启动,采用现有方案(即背景技术所述方案)启动时,耗时3100ms,采用本发明优化后,耗时170ms,使用双核1GHz的android 4.4.4的P2手机对目标应用进行启动,采用现有方案(即背景技术所述方案)启动时,耗时1400ms,采用本发明优化后,耗时170ms,从上述比较可知,采用本发明实施例的应用启动方法可以大大减小目标应用的首次启动时长。
优选的,所述获取模块100具体用于当检测到***广播的用于通知目标应用安装完成的广播包时,获取第一压缩文件;
本发明实施例中,覆盖安装目标应用后,***会广播用于通知目标应用安装完成的广播包PACKAGE_REPLACED,目标应用获取模块100接收PACKAGE_REPLACED广播,并启动独立进程进行dex预解压,即是自动获取第一压缩文件,并提取该第一压缩文件中的dex压缩内容,将该dex压缩内容重新生成第二压缩文件,并加载第二压缩文件中的dex。
如图5所示,APP被安装到设备,***发出PACKAGE_REPLACED广播,APP启动lite线程,lite线程调用本发明实施例一中的应用启动方法进行dex加载,加载完毕后,lite线程退出,之后用户使用APP直接按照非首次启动流程,缩短首次启动时间。
所述启动模块103根据所述第一压缩文件中的所述启动信息启动所述目标应用具体包括:
当检测到启动所述目标应用的启动指令时,根据所述第一压缩文件中的所述启动信息启动所述目标应用。
本发明实施例中,当检测到启动目标应用的启动指令(比如用户点击应用图标)时,启动模块103根据第一压缩文件中的启动信息启动目标应用,而不需要再去加载dex,因为dex已经在目标应用安装后即进行了加载。
本发明实施例,获取第一压缩文件,该第一压缩文件包含目标应用的启动信息以及目标应用的dex压缩内容,从该第一压缩文件中提取该dex压缩内容,将该dex压缩内容生成第二压缩文件,加载第二压缩文件中的dex压缩内容,并根据第一压缩文件中的启动信息启动目标应用。这种方式可节省解压和再压缩dex包的时间,减少目标应用启动时间,提高用户体验。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,附图9-附图11所示应用启动装置对应的程序可存储在应用启动装置的可读存储介质内,并被该应用启动装置中的至少一个处理器执行,以实现上述应用启动方法,该方法包括图2-附图3中方法实施例所述的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

Claims (11)

1.一种应用启动方法,其特征在于,包括:
当检测到***广播的用于通知目标应用安装完成的广播包时,启动lite线程,获取第一压缩文件,所述第一压缩文件包含目标应用的启动信息以及所述目标应用的代码包dex压缩内容;所述启动信息包括所述第一压缩文件的主dex程序包,所述主dex程序包包含至少一个解压状态的启动入口程序;
从所述第一压缩文件中提取压缩状态的所述dex压缩内容;所述dex压缩内容是通过所述dex压缩内容的文件名查找到的;所述dex压缩内容为所述第一压缩文件的分dex程序包,所述分dex程序包包含非启动入口程序;
将压缩状态的所述dex压缩内容以及第二压缩文件的文件头组合为第二压缩文件;
加载所述第二压缩文件中的所述dex压缩内容,当检测到加载完所述dex压缩内容时,退出所述lite线程;
当检测到启动所述目标应用的启动指令时,根据所述第一压缩文件中的所述启动信息启动所述目标应用;所述启动指令是响应用户点击所述目标应用的应用图标所生成的指令。
2.如权利要求1所述的方法,其特征在于,所述第一压缩文件为安卓***安装包APK文件,所述第二压缩文件为zip压缩文件。
3.如权利要求1所述的方法,其特征在于,所述将压缩状态的所述dex压缩内容以及第二压缩文件的文件头组合为第二压缩文件,包括:
根据所述第一压缩文件中所述dex压缩内容的文件头信息,生成第二压缩文件的头信息;
根据所述第一压缩文件中所述dex压缩内容的核心目录信息,生成所述第二压缩文件的核心目录信息。
4.如权利要求如权利要求1-3任意一项所述的方法,其特征在于,所述加载所述第二压缩文件中的所述dex压缩内容,并根据所述第一压缩文件中的所述启动信息启动所述目标应用,包括:
启动所述主dex程序包,并显示启动界面;
加载所述第二压缩文件中的所述dex压缩内容;
当检测到加载完所述dex压缩内容,执行所述主dex程序包中的所述至少一个解压状态的启动入口程序,并显示所述目标应用的主界面。
5.如权利要求4所述的方法,其特征在于,所述第一压缩文件中的分dex程序包中的非启动入口程序以及所述第一压缩文件中的主dex程序包中的启动入口程序为安装所述目标应用时根据预设分类规则编译获得。
6.一种应用启动装置,其特征在于,包括:
获取模块,用于当检测到***广播的用于通知目标应用安装完成的广播包时,启动lite线程,获取第一压缩文件,所述第一压缩文件包含目标应用的启动信息以及所述目标应用的代码包dex压缩内容;所述启动信息包括所述第一压缩文件的主dex程序包,所述主dex程序包包含至少一个解压状态的启动入口程序;
提取模块,用于从所述第一压缩文件中提取压缩状态的所述dex压缩内容;所述dex压缩内容是通过所述dex压缩内容的文件名查找到的;所述dex压缩内容为所述第一压缩文件的分dex程序包,所述分dex程序包包含非启动入口程序;
生成模块,用于将压缩状态的所述dex压缩内容以及第二压缩文件的文件头组合为第二压缩文件;
启动模块,用于加载所述第二压缩文件中的所述dex压缩内容,当检测到加载完所述dex压缩内容时,退出所述lite线程;
所述启动模块,还用于当检测到启动所述目标应用的启动指令时,根据所述第一压缩文件中的所述启动信息启动所述目标应用;所述启动指令是响应用户点击所述目标应用的应用图标所生成的指令。
7.如权利要求6所述的装置,其特征在于,所述第一压缩文件为安卓***安装包APK文件,所述第二压缩文件为zip压缩文件。
8.如权利要求6所述的装置,其特征在于,所述生成模块包括:
第一生成单元,用于根据所述第一压缩文件中所述dex压缩内容的文件头信息,生成第二压缩文件的头信息;
第二生成单元,用于根据所述第一压缩文件中所述dex压缩内容的核心目录信息,生成所述第二压缩文件的核心目录信息。
9.如权利要求6-8任意一项所述的装置,其特征在于,所述启动模块包括:
第一显示单元,用于启动所述主dex程序包,并显示启动界面;
加载单元,用于加载所述第二压缩文件中的所述dex压缩内容;
第二显示单元,用于当检测到加载完所述dex压缩内容,执行所述主dex程序包中的所述至少一个解压状态的启动入口程序,并显示所述目标应用的主界面。
10.如权利要求9所述的装置,其特征在于,所述第一压缩文件中的分dex程序包中的非启动入口程序以及所述第一压缩文件中的主dex程序包中的启动入口程序为安装所述目标应用时根据预设分类规则编译获得。
11.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1-5任一项所述的方法。
CN201610300439.5A 2016-05-09 2016-05-09 一种应用启动方法及装置 Active CN105975311B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201610300439.5A CN105975311B (zh) 2016-05-09 2016-05-09 一种应用启动方法及装置
PCT/CN2017/083446 WO2017193885A1 (zh) 2016-05-09 2017-05-08 一种应用启动方法及装置
US16/046,540 US10871973B2 (en) 2016-05-09 2018-07-26 Application activation method and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610300439.5A CN105975311B (zh) 2016-05-09 2016-05-09 一种应用启动方法及装置

Publications (2)

Publication Number Publication Date
CN105975311A CN105975311A (zh) 2016-09-28
CN105975311B true CN105975311B (zh) 2021-01-29

Family

ID=56991760

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610300439.5A Active CN105975311B (zh) 2016-05-09 2016-05-09 一种应用启动方法及装置

Country Status (3)

Country Link
US (1) US10871973B2 (zh)
CN (1) CN105975311B (zh)
WO (1) WO2017193885A1 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105975311B (zh) 2016-05-09 2021-01-29 腾讯科技(深圳)有限公司 一种应用启动方法及装置
CN106648740A (zh) * 2016-10-18 2017-05-10 努比亚技术有限公司 一种可执行文件的加载方法及终端
CN106569868B (zh) * 2016-11-09 2019-12-31 腾讯音乐娱乐(深圳)有限公司 一种基于Gradle的编译优化方法及装置
CN107193544B (zh) * 2017-04-01 2021-01-15 北京五八信息技术有限公司 一种应用程序组件化开发方法及装置
CN107220059B (zh) * 2017-06-14 2021-03-23 北京小米移动软件有限公司 应用界面的显示方法及装置
CN109033247B (zh) * 2018-07-05 2022-01-18 Oppo(重庆)智能科技有限公司 一种应用程序的管理方法、装置、存储介质及终端
WO2020210955A1 (zh) * 2019-04-15 2020-10-22 深圳市欢太科技有限公司 应用程序启动的方法、装置、电子设备及存储介质
CN111240766B (zh) * 2020-01-22 2023-12-29 抖音视界有限公司 应用启动方法、装置、电子设备及计算机可读存储介质
CN112256324B (zh) * 2020-12-08 2021-03-19 智道网联科技(北京)有限公司 安卓应用程序构建过程中对文件的处理方法及装置
US11379110B1 (en) * 2021-04-12 2022-07-05 International Business Machines Corporation Artificial intelligence-based operating system for drag and drop operations

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102981824A (zh) * 2012-10-31 2013-03-20 广州市久邦数码科技有限公司 一种获取安卓应用程序的入口及图标的方法
CN104317625A (zh) * 2014-11-09 2015-01-28 刘鹏 一种apk文件的动态加载方法
CN104572966A (zh) * 2014-12-30 2015-04-29 北京奇虎科技有限公司 一种压缩文件的解压方法和装置
CN105224367A (zh) * 2015-09-30 2016-01-06 浪潮电子信息产业股份有限公司 一种软件的安装方法及装置
CN105278989A (zh) * 2015-10-12 2016-01-27 邱寅峰 Apk文件的快速加载方法
CN105335184A (zh) * 2014-08-07 2016-02-17 北京奇虎科技有限公司 应用安装的方法和装置

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4833568B2 (ja) * 2005-03-15 2011-12-07 株式会社リコー 情報処理装置、画像形成装置、起動プログラムおよび記憶媒体
CN102231117B (zh) * 2011-07-08 2013-08-14 盛乐信息技术(上海)有限公司 一种在嵌入式平台安装软件的方法和***
KR101299099B1 (ko) * 2011-09-07 2013-09-16 주식회사 팬택 임베디드 시스템에서 최적화된 가상화 모듈을 관리하는 장치 및 방법
CN102314365A (zh) * 2011-09-08 2012-01-11 北京新媒传信科技有限公司 一种安装包制作方法和工具
KR20130047493A (ko) * 2011-10-31 2013-05-08 삼성전자주식회사 화상형성장치, 라이선스 서버, 단말장치, 어플리케이션 설치 방법 및 어플리케이션 파일 제공 방법
CN103257868B (zh) * 2012-02-20 2016-12-28 联想(北京)有限公司 安装程序的方法和装置
CN103577212B (zh) * 2012-08-08 2017-10-24 腾讯科技(深圳)有限公司 ***启动预加载方法及装置
CN102830996B (zh) * 2012-08-08 2016-01-20 广东欧珀移动通信有限公司 一种手持设备的快速开机方法
US20140366015A1 (en) * 2013-05-31 2014-12-11 Openpeak Inc. Method and system for combining multiple applications into a single binary file while maintaining per process sandboxing
CN103366386A (zh) * 2013-07-14 2013-10-23 西安电子科技大学 基于多进程和多线程的并行图像解压缩***
KR101490047B1 (ko) * 2013-09-27 2015-02-04 숭실대학교산학협력단 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
EP2889813B1 (en) * 2013-12-27 2017-11-15 Buongiorno S.P.A. Method and system for implementing in-app software development kits
US9971611B2 (en) * 2014-10-31 2018-05-15 Cisco Technology, Inc. Monitoring a mobile device application
CN104375869B (zh) * 2014-11-28 2018-04-10 北京奇虎科技有限公司 自启动应用控制方法及装置
CN104536787B (zh) * 2014-12-26 2018-05-18 小米科技有限责任公司 资源预加载方法及装置
CN104636665B (zh) * 2015-02-03 2018-01-05 南京理工大学 一种Android应用程序的描述和匹配方法
CN105528257B (zh) * 2016-01-08 2021-01-05 腾讯科技(深圳)有限公司 一种单进程数据处理方法及装置
CN105975311B (zh) * 2016-05-09 2021-01-29 腾讯科技(深圳)有限公司 一种应用启动方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102981824A (zh) * 2012-10-31 2013-03-20 广州市久邦数码科技有限公司 一种获取安卓应用程序的入口及图标的方法
CN105335184A (zh) * 2014-08-07 2016-02-17 北京奇虎科技有限公司 应用安装的方法和装置
CN104317625A (zh) * 2014-11-09 2015-01-28 刘鹏 一种apk文件的动态加载方法
CN104572966A (zh) * 2014-12-30 2015-04-29 北京奇虎科技有限公司 一种压缩文件的解压方法和装置
CN105224367A (zh) * 2015-09-30 2016-01-06 浪潮电子信息产业股份有限公司 一种软件的安装方法及装置
CN105278989A (zh) * 2015-10-12 2016-01-27 邱寅峰 Apk文件的快速加载方法

Also Published As

Publication number Publication date
WO2017193885A1 (zh) 2017-11-16
US10871973B2 (en) 2020-12-22
US20180373544A1 (en) 2018-12-27
CN105975311A (zh) 2016-09-28

Similar Documents

Publication Publication Date Title
CN105975311B (zh) 一种应用启动方法及装置
CN109491695B (zh) 一种集成安卓应用的增量更新方法
CN107506221B (zh) 应用程序升级方法、装置及设备
CN105867947A (zh) 预置应用程序升级后的数据处理方法及装置
US8762967B2 (en) Program compiler, program installer, and program install method
CN111324421B (zh) 一种容器镜像的提供方法、加载方法及相关设备和***
CN112948026A (zh) 热点代码处理方法、装置、服务器、电子设备及存储介质
CN110737589A (zh) 一种自动埋点的方法、装置、介质和电子设备
CN103885814A (zh) 在x86架构上运行ARM APK的模拟器装置和方法
WO2020177429A1 (zh) 在应用中嵌入代码的方法、装置及电子设备
WO2019041891A1 (zh) 升级包的生成方法及装置
CN112667246A (zh) 应用功能扩展的方法、装置及电子设备
CN111694585A (zh) 替换***分区文件的方法、***、终端和存储介质
CN111045698A (zh) 冗余图片的删除方法、装置、电子设备及存储介质
CN113867768A (zh) 操作***处理方法、装置、电子设备及存储介质
CN113741954A (zh) ***软件生成方法、装置、电子设备及存储介质
CN115080114B (zh) 应用程序的移植处理方法、装置和介质
CN116069366A (zh) 客户端应用程序更新方法及装置、存储介质及电子设备
US10310871B2 (en) Non-transitory computer-readable recording medium storing control program, control device and control method
US10817224B2 (en) Preemptive decompression scheduling for a NAND storage device
US8190587B1 (en) In-place image promotion
CN113641389A (zh) 基于OpenCPU的软件升级方法、装置及设备
CN106897588B (zh) 一种标签函数的处理方法及装置
WO2019157891A1 (zh) 应用安装方法、应用安装包的生成方法
CN106959870B (zh) Nginx动态模块加载方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant