CN117130617A - 一种应用程序的编译方法和装置 - Google Patents

一种应用程序的编译方法和装置 Download PDF

Info

Publication number
CN117130617A
CN117130617A CN202310141098.1A CN202310141098A CN117130617A CN 117130617 A CN117130617 A CN 117130617A CN 202310141098 A CN202310141098 A CN 202310141098A CN 117130617 A CN117130617 A CN 117130617A
Authority
CN
China
Prior art keywords
compiling
application program
file
profile
target application
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.)
Pending
Application number
CN202310141098.1A
Other languages
English (en)
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.)
Honor Device Co Ltd
Original Assignee
Honor Device 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202310141098.1A priority Critical patent/CN117130617A/zh
Publication of CN117130617A publication Critical patent/CN117130617A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例提供一种应用程序的编译方法和装置,涉及终端领域,能够保证应用程序在电子设备空闲触发编译等场景中获取到基准配置文件,并可以根据基准配置文件进行编译优化,可以提高应用程序的性能,从而提高用户使用应用程序时的用户体验。其方法为:电子设备在目标编译场景下,确定目标应用程序的安装包是否包括基准配置文件,基准配置文件用于指示目标应用程序的安装包中的热点函数;其中,目标编译场景包括电子设备在空闲状态触发编译的场景;若确定目标应用程序的安装包中包括基准配置文件,电子设备基于第一编译模式对目标应用程序的安装包中的dex文件进行校验,并对基准配置文件指示的热点函数进行编译处理。

Description

一种应用程序的编译方法和装置
技术领域
本申请涉及终端领域,尤其涉及一种应用程序的编译方法和装置。
背景技术
应用程序(application,APP)是运行在虚拟机中的,虚拟机对应用程序代码的执行包括两部分。第一部分是将源码编译为字节码,又称为前端编译,此时进行的工作主要是对词法、语法、语义进行分析。第二部分是将字节码编译为机器码进行解释执行。但由于解释执行的效率较低,对用户体验有严重影响,为解决这一问题dex2oat(dalvik excutablefile to optimized art file)应运而生。dex2oat可以提前将应用程序的字节码编译为机器码,因此在实际运行时可直接执行机器码,从而大大提升了应用程序的运行效率。
dex2oat包括多个不同的编译模式,按照执行后的应用性能的高低进行排序,目前常见的编译模式包括:speed的编译模式、speed-profile的编译模式、verify的编译模式等。其中,speed的编译模式对应用程序代码全部进行编译优化,得到的产物性能好,但生成文件大、耗时长、消耗手机存储空间多。speed-profile的编译模式依赖于profile文件,可以对应用程序的热点函数进行编译优化。verify的编译模式只对应用程序的dex文件进行校验。verify的编译模式在编译性能上相对于speed-profile的编译模式较差。
在一些情况下,电子设备(例如,Android手机)可以采用后台空闲编译优化的策略,即在电子设备空闲时触发speed-profile的编译模式对应用程序进行编译优化。而speed-profile的编译模式必须依赖于profile文件,当没有profile文件时,speed-profile的编译模式会降级为verify的编译模式。目前profile文件的来源可以包括以下两种:1)用户在应用市场(例如,华为应用市场或Google(谷歌)应用市场)安装应用程序时,应用市场提供数据元(DM,Data meta)文件,DM文件包含profile信息;2)电子设备首次开机/恢复出厂设置后,或电子设备进行OTA升级后,或应用程序安装后,可以在用户使用应用程序的过程中对应用程序的热点函数进行记录以生成profile文件。
但以上profile文件来源存在着相应的不足:1)DM文件的生成往往具有滞后性,需要应用程序实际运行一段时间后应用市场才会提供给用户。对于刚上线或经常更新的应用程序,应用市场无法及时提供DM文件,或者由于一些原因导致DM文件失效或未配置,因此无法触发speed-profile的编译模式进行编译优化,应用程序性能较低;2)虽然应用市场配置了DM文件,但是该DM文件可能存在热点函数配置不全或不准确的问题,即使触发speed-profile的编译模式进行编译优化,应用程序性能仍然较低;3)用户首次开机/***升级后,仅能触发verify的编译模式对应用程序进行编译优化,若用户一直未使用过相应的应用程序(***应用程序和/或第三方应用程序),则无法生成profile文件,从而在后台空闲编译优化时无法触发speed-profile的编译模式进行编译优化,应用程序的性能较低。4)应用程序从应用市场安装后,若用户一直未使用过该应用程序,则无法生成profile文件,从而在后台空闲编译优化时无法触发speed-profile的编译模式进行编译优化,应用程序的性能较低。
发明内容
本申请实施例提供一种应用程序的编译方法和装置,能够保证应用程序在电子设备空闲触发编译的场景中获取到基准配置文件,并可以根据基准配置文件进行编译优化,可以提高应用程序的性能,从而提高用户使用应用程序时的用户体验。
第一方面,本申请实施例提供一种应用程序的编译方法,包括:电子设备在目标编译场景下,确定目标应用程序的安装包是否包括基准配置文件,基准配置文件用于指示目标应用程序的安装包中的热点函数;其中,目标编译场景包括电子设备在空闲状态触发编译的场景;若确定目标应用程序的安装包中包括基准配置文件,电子设备基于第一编译模式对目标应用程序的安装包中的dex文件进行校验,并对基准配置文件指示的热点函数进行编译处理。
基于本申请实施例提供的方法,在目标编译场景(电子设备空闲触发编译的场景)中,电子设备可以获取目标应用程序的baseline profile文件(基准配置文件),并基于第一编译模式(speed-profile(have profile)的编译模式)对目标应用程序的安装包中的dex文件进行校验,并对基准配置文件指示的热点函数进行编译处理。编译完成后,电子设备运行该目标应用程序时,可以直接调用编译优化文件,无需对目标应用程序的dex文件进行即时编译,节省了编译时间,提高了电子设备对应用程序的执行效率,使得应用程序的运行更加流畅,可以提高用户体验。本申请提供的应用程序的编译方法无需依赖应用市场为应用程序提供DM文件(DM文件中包括profile文件),也无需等待应用程序运行时对应用程序的热点函数进行记录以生成profile文件。即使用户一直未使用过目标应用程序导致无法在应用程序运行时对应用程序的热点函数进行记录以生成profile文件,也可以触发speed-profile(have profile)的编译模式对应用程序进行编译优化,可以提高应用程序的性能(应用程序的启动、滑动等性能),从而为用户带来更好的体验。
在一种可能的实现方式中,目标编译场景还包括电子设备首次开机触发编译的场景、电子设备进行空中下载OTA升级触发编译的场景。需要说明的是,在电子设备首次开机/恢复出场设置后的场景或电子设备进行OTA升级的场景(OTA升级开机过程或OTA升级进入桌面后中)中,根据baseline profile文件在电子设备端以speed-profile(have profile)的编译模式对目标应用程序进行编译优化,相较于在预置阶段(电子设备烧录操作***、***应用程序以及一些三方应用程序的阶段)以speed-profile(have profile)的编译模式对目标应用程序进行编译优化更加节省存储空间。这是由于baseline profile文件的体积相较于编译优化文件(预置阶段以speed-profile(have profile)的编译模式对目标应用程序进行编译优化得到的编译优化文件)的体积更小,可以减少电子设备预置的文件数量,节省电子设备的存储空间。
在一种可能的实现方式中,该方法还包括:电子设备在目标应用程序运行时对目标应用程序的热点函数进行记录,根据记录的热点函数生成第一配置文件;电子设备基于第一编译模式对目标应用程序的安装包中的dex文件进行校验,并对基准配置文件指示的热点函数进行编译处理包括:电子设备基于第一编译模式对目标应用程序的安装包中的dex文件进行校验,并对基准配置文件指示的热点函数和第一配置文件指示的热点函数进行编译处理。即在目标编译场景中,可以结合baseline profile文件和电子设备生成的profile文件得到更加准确和全面的热点函数,以speed-profile(have profile)的编译模式对应用程序进行编译优化。相比仅根据电子设备生成的profile文件进行speed-profile的编译模式的编译优化,根据baseline profile文件和电子设备生成的profile文件进行speed-profile的编译模式的编译优化可以更好地提升应用程序性能,从而为用户带来更好的体验。
在一种可能的实现方式中,电子设备确定目标应用程序的安装包是否包括基准配置文件包括:电子设备解析目标应用程序的安装包中的清单文件,清单文件中设置第一标志位,第一标志位用于指示目标应用程序的安装包中是否包含基准配置文件;读取第一标志位,若第一标志位为真,代表目标应用程序的安装包中包含基准配置文件,若第一标志位为假,代表目标应用程序的安装包中不包含基准配置文件。即电子设备可以根据清单文件中的第一标志位确定目标应用程序的安装包中是否包含基准配置文件,若目标应用程序的安装包中包含基准配置文件,电子设备可以基于第一编译模式(speed-profile(haveprofile)的编译模式)对目标应用程序的安装包中的dex文件进行校验,并对基准配置文件指示的热点函数进行编译处理。这样,可以提升目标应用程序首次启动时的启动、滑动等性能,可以为用户带来更好的体验。
在一种可能的实现方式中,电子设备确定目标应用程序的安装包是否包括基准配置文件包括:电子设备在目标应用程序的安装目录中检测基准配置文件是否存在。即电子设备可以主动检查目标应用程序的安装包中是否包含基准配置文件,若目标应用程序的安装包中包含基准配置文件,电子设备可以基于第一编译模式(speed-profile(haveprofile)的编译模式)对目标应用程序的安装包中的dex文件进行校验,并对基准配置文件指示的热点函数进行编译处理。这样,可以提升目标应用程序首次启动时的启动、滑动等性能,可以为用户带来更好的体验。
在一种可能的实现方式中,电子设备基于第一编译模式对目标应用程序的安装包中的dex文件进行校验,并对目标应用程序的安装包中的热点函数进行编译处理之前,方法还包括:电子设备检查第一配置目录是否存在,若第一配置目录不存在则创建第一配置目录;电子设备将基准配置文件从安装目录移动至第一配置目录下;电子设备设置更新第二标志位,第二标志位用于触发对基准配置文件进行合并处理,电子设备将第一配置目录下的基准配置文件移动至第二配置目录下。
第二方面,本申请提供一种芯片***,该芯片***包括一个或多个接口电路和一个或多个处理器。该接口电路和处理器通过线路互联。
上述芯片***可以应用于包括通信模块和存储器的电子设备。该接口电路用于从电子设备的存储器接收信号,并向处理器发送接收到的信号,该信号包括存储器中存储的计算机指令。当处理器执行该计算机指令时,电子设备可以执行如第一方面及其任一种可能的设计方式所述的方法。
第三方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令。当计算机指令在电子设备(如手机)上运行时,使得该电子设备执行如第一方面及其任一种可能的设计方式所述的方法。
第四方面,本申请提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如第一方面及其任一种可能的设计方式所述的方法。
第五方面,本申请实施例提供了一种应用程序的编译装置,包括处理器,处理器和存储器耦合,存储器存储有程序指令,当存储器存储的程序指令被处理器执行时使得所述装置实现上述第一方面及其任一种可能的设计方式所述的方法。所述装置可以为电子设备;或可以为电子设备中的一个组成部分,如芯片。
第六方面,本申请实施例提供了一种应用程序的编译装置,所述装置可以按照功能划分为不同的逻辑单元或模块,各单元或模块执行不同的功能,以使得所述装置执行上述第一方面及其任一种可能的设计方式所述的方法。
第七方面,本申请实施例提供了一种应用程序的编译***,包括电子设备和应用服务器,所述电子设备和应用服务器分别执行部分步骤,相互配合以实现上述第一方面及其任一种可能的设计方式所述的方法。
可以理解地,上述提供的第二方面所述的芯片***,第三方面所述的计算机可读存储介质,第四方面所述的计算机程序产品及第五方面、第六方面所述的装置及第七方面所述的***所能达到的有益效果,可参考如第一方面及其任一种可能的设计方式中的有益效果,此处不再赘述。
基于本申请实施例提供的方法,在目标编译场景(例如,电子设备空闲触发编译的场景)中,电子设备可以获取目标应用程序的baseline profile文件(基准配置文件),并基于第一编译模式(speed-profile(have profile)的编译模式)对目标应用程序的安装包中的dex文件进行校验,并对基准配置文件指示的热点函数进行编译处理。编译完成后,电子设备运行该目标应用程序时,可以直接调用编译优化文件,无需对目标应用程序的dex文件进行即时编译,节省了编译时间,提高了电子设备对应用程序的执行效率,使得应用程序的运行更加流畅,可以提高用户体验。本申请提供的应用程序的编译方法无需依赖应用市场为应用程序提供DM文件(DM文件中包括profile文件),也无需等待应用程序运行时对应用程序的热点函数进行记录以生成profile文件。即使用户一直未使用过目标应用程序导致无法在应用程序运行时对应用程序的热点函数进行记录以生成profile文件,也可以触发speed-profile(have profile)的编译模式对应用程序进行编译优化,可以提高应用程序的性能(应用程序的启动、滑动等性能),从而为用户带来更好的体验。
附图说明
图1为本申请实施例提供的一种dex2oat的触发场景的示意图;
图2为本申请实施例提供的一种电子设备的硬件结构示意图;
图3为本申请实施例提供的一种电子设备的软件架构示意图;
图4为本申请实施例提供的一种电子设备的编译流程示意图;
图5为本申请实施例提供的一种电子设备的模块间的交互示意图;
图6为本申请实施例提供的一种应用程序的编译方法的模块交互示意图;
图7为本申请实施例提供的一种处理baseline profile文件的流程示意图;
图8为本申请实施例提供的一种处理baseline profile文件和生成的profile文件的流程示意图;
图9为本申请实施例提供的一种编译优化模块调用dex2oat的流程示意图;
图10为本申请实施例提供的芯片***的结构示意图。
具体实施方式
为了下述各实施例的描述清楚简洁,首先给出相关技术的简要介绍:
为了使电子设备中安装的应用程序在运行阶段更加流畅,可以在应用程序被安装过程或者启动之前使用dex2oat将应用程序的dex文件进行编译,编译成电子设备可以直接运行的机器码,由此电子设备可以在应用程序运行过程中直接加载这些机器码,使得应用程序运行更加流畅。其中,应用程序的dex文件存在于应用程序的Android安装包(Androidpackage,APK)中,包含应用程序的全部操作指令以及运行时数据,即dex文件中包含了应用程序的全部代码。
如图1中所示,dex2oat对dex文件进行编译的几种场景包括电子设备首次开机的场景、电子设备恢复出场设置的场景、电子设备进行空中下载技术(over-the-airtechnology,OTA)升级的场景、电子设备安装应用程序的场景、电子设备克隆其他设备中的应用程序的场景、电子设备空闲触发编译的场景、应用程序自身触发编译的场景以及其他触发dex2oat对应用程序的dex文件进行编译的场景。
下面对dex2oat对dex文件进行编译的几种场景进行说明。
在电子设备首次开机的场景中,电子设备中需要安装多个应用程序。此时,可以触发dex2oat在这些应用程序安装过程中对安装包中解压出的dex文件进行编译,以得到odex文件。基于此,在被安装完成的应用程序运行过程中,电子设备可以直接加载并执行odex文件,使得应用程序运行更流畅。
在电子设备恢复出场设置的场景中,电子设备中需要重新安装多个应用程序。此时,可以触发dex2oat在这些应用程序安装过程中对安装包中解压出的dex文件进行编译,以得到odex文件。基于此,在被安装完成的应用程序运行过程中,电子设备可以直接加载并执行odex文件,使得应用程序运行更流畅。
在电子设备进行OTA升级的场景中,电子设备在完成OTA后开机过程中,或者在完成OTA后开机进入桌面后,对电子设备中的各个应用程序的dex文件重新进行编译,以得到odex文件。基于此,在被重新编译的应用程序运行过程中,电子设备可以直接加载并执行重新编译的odex文件,使得应用程序运行更流畅。
在电子设备安装应用程序的场景中,电子设备可以从应用市场下载需要安装的应用程序的安装包。在执行安装包进而安装应用程序的过程中,可以触发dex2oat对应用程序的安装包中解压出的dex文件进行编译,以得到odex文件。基于此,在被安装完成的应用程序运行过程中,电子设备可以直接加载并执行odex文件,使得应用程序运行更流畅。
在电子设备克隆其他设备中的应用程序的场景中,电子设备按照其他设备上所安装的应用程序在本地安装相应的应用程序。在电子设备安装这些应用程序的过程中,电子设备可以触发dex2oat对被克隆到电子设备本地的应用程序的dex文件进行编译,以得到odex文件。基于此,在被克隆完成的应用程序运行过程中,电子设备可以直接加载并执行odex文件,使得应用程序运行更流畅。
在电子设备空闲触发编译的场景中,如果电子设备处于空闲状态的时间大于或等于预设时长(例如,31分钟)下,和/或电子设备正在充电。例如,电子设备充电电量到达90%的空闲状态,电子设备中可以触发dex2oat对已经安装但非运行状态的应用程序的dex文件进行编译,以得到odex文件。此时,应用程序未启动。基于此,在应用程序再次运行如应用程序冷启动时,电子设备在应用冷启动过程中可以直接加载并执行odex文件,使得应用程序的启动过程以及启动后运行过程更流畅。
在应用程序自身触发编译的场景中,应用程序在自身触发条件满足的情况下,通过指令触发dex2oat对应用程序的dex文件进行编译,以得到odex文件,基于此,在应用程序运行过程中,电子设备可以直接加载并执行odex文件,使得应用程序运行更流畅。
当然,还有其他场景中存在触发dex2oat对应用程序的dex文件进行编译的情况,如某些应用程序被应用提供商设置为在首次启动应用程序时触发dex2oat对应用程序的dex文件进行编译的场景等,本申请不做限定。
需要说明的是,电子设备空闲触发编译的场景、电子设备首次开机/恢复出厂设置的场景、电子设备进行OTA升级的场景都是利用编译优化提升用户体验的重要场景。在这些场景中,可以对电子设备中的应用程序进行大批量的编译优化,以提高应用程序的性能,从而提高用户体验。
由于电子设备处于空闲状态下且电量充足,可以避免由于dex2oat编译占用终端设备的CPU资源、IO资源以及内存资源较多导致前台应用在使用时出现卡顿等问题,同时可以避免用户浪费时间等待编译优化,也可以避免电子设备电量消耗过多导致电量不足的问题。
dex2oat包括多个不同的编译优化模式,按照执行后的应用性能的高低进行排序,目前常见的编译优化模式包括:speed的编译模式、speed-profile的编译模式、verify的编译模式等。这几种典型的编译优化模式的对比如表1所示。
表1
在以上各场景中,dex2oat对dex文件进行编译时,可以采用如表1中所示的多种编译模式中的一种。
speed的编译模式:在该编译模式下,dex2oat可以对dex文件中的全部函数代码进行AOT编译,得到相应的编译产物:odex、vdex。speed的编译模式对程序代码全部进行编译优化,得到的产物性能好,但生成文件大、耗时长、消耗手机存储空间多。
speed-profile(have profile)的编译模式:在该编译模式下,dex2oat除了对dex文件进行校验处理,得到相应的odex文件之外,还会按照profile文件中的指定函数的信息,对应用程序的dex文件中profile文件所指定的函数代码进行AOT编译,得到相应的编译产物:art文件。其中,profile文件是指包含有热点函数(也可以称为热点代码)的信息的文件。该art文件中包含这些指定的函数代码的地址,方便对这些指定的函数进行寻址。而这些指定的函数代码为应用程序运行常用的函数的代码,由此,在应用程序运行过程中,电子设备在加载art文件到内存后,可以快速寻址并运行所寻到的代码,从而使得应用程序运行更流畅。
speed-profile(no profile)的编译模式:在该编译模式下,dex2oat对dex文件进行校验,并对dex文件中的dex指令进行优化,由此得到相应的odex文件,而经过优化的dex指令具有更高的解释性能,能够被电子设备高效识别。
其中,由于speed-profile(no profile)的编译模式中仅对dex文件进行校验和dex指令优化而不涉及AOT编译,因此,speed-profile(no profile)的编译模式相对speed-profile(have profile)的编译模式具有较短的编译时长,但是,speed-profile(noprofile)的编译模式在编译性能上相对于speed-profile(have profile)的编译模式较差。
verify的编译模式:在该编译模式下,dex2oat对dex文件进行校验,以得到相应的odex文件。其中,由于verify的编译模式中仅对dex文件进行校验但不涉及AOT编译以及dex指令优化,因此,verify的编译模式相对speed-profile(have profile)的编译模式和speed-profile(no profile)的编译模式具有更短的编译时长,但是,verify的编译模式在编译性能上相对于speed-profile(have profile)的编译模式和speed-profile(noprofile)的编译模式较差。
当然,如果不触发dex2oat或者触发dex2oat不对dex文件进行编译处理,那么dex文件不会被进行任何处理。在应用程序被启动后,加载并解释运行应用程序的dex文件。在运行dex文件中的代码时,应用程序会对dex文件做校验处理。因此,如果不对dex文件执行以上任意一种编译模式的编译优化,那么相对于应用程序启动后直接加载odex文件无需校验dex文件的运行过程,应用程序会因为启动后再加载并校验dex文件使得运行较慢。
需要说明的是,电子设备首次开机/恢复出厂设置后,或电子设备进行OTA升级后,或应用程序安装后,用户可能不会第一时间就运行应用程序,从而电子设备无法根据应用程序的运行情况记录热点函数继而生成profile文件。如果在用户使用应用程序前先达到了电子设备空闲触发编译的场景,由于缺少根据应用程序的运行情况记录的热点函数生成的profile文件,导致电子设备仅可以触发dex2oat采用speed-profile(no profile)的编译模式对安装包中解压出的dex文件进行编译。编译模式虽采用speed-profile,但无profile文件提供,实际效果为verify级别的编译优化。从而导致应用程序启动时的性能较低,用户体验较差。
针对以上无法及时提供profile文件的问题,业界提出baseline profile技术(baseline profile机制),baseline profile技术是提供profile文件的一种全新机制。应用程序的开发者可以提前统计应用程序的热点函数得到profile文件,然后将profile文件作为应用程序的APK的一部分发送到应用市场中。用户在应用市场下载应用程序时,profile文件随APK从应用市场发送至用户的电子设备。baseline profile技术提供的profile文件可以利用Android Gradle插件(谷歌原生工具)自动生成。或者,开发者可以通过手动定义将开发者认为需要进行编译优化的热点函数添加到profile文件中。
在baseline profile技术中,应用程序的APK中携带的profile文件可以在谷歌应用市场的云端进行处理,以DM文件的形式发送给用户的电子设备。baseline profile文件在ART云配置文件(例如,DM文件)尚不可用时,填补了ART云配置文件流水线的空白(即baseline profile文件可以代替DM文件),在云配置文件可用时,可以自动与其合并(即baseline profile文件可以和DM文件合并)得到更加准确和全面的profile文件,使得应用程序安装时得以进行speed-profile编译优化。但是,目前的baseline profile技术依赖应用市场的云端能力,对于一些第三方应用市场(例如应用宝、豌豆荚等第三方应用市场),即使应用程序的APK内含有baseline profile文件,由于第三方应用市场无法对APK中携带的baseline profile文件进行云端处理,即无法提供DM文件。因此在电子设备首次开机/恢复出厂设置的场景、电子设备进行OTA升级的场景中,电子设备就无法采用speed-profile(have profile)的编译模式对应用程序的dex文件进行编译,导致应用程序启动时的启动、滑动等性能较低,用户体验较差。另外,如果用户使用应用程序前先达到了电子设备空闲触发编译的场景,由于缺少根据应用程序的运行情况记录的热点函数生成的profile文件,导致电子设备无法采用speed-profile(have profile)的编译模式对应用程序的dex文件进行编译,导致应用程序启动时的启动、滑动等性能较低,用户体验较差。
本申请提供一种应用程序的编译方法和装置,可以将baseline profile技术与应用安装场景相结合,无需依赖应用市场在云端处理APK中的baseline profile文件(基准配置文件),转而在电子设备端(例如,手机端)对嵌入到APK中的baseline profile文件进行处理,使电子设备在第三方的应用市场下载的应用程序也可以做到安装时就以speed-profile(have profile)的编译模式对应用程序的dex文件进行编译。这样,应用程序首次启动时的启动、滑动等性能都会得到提升,可以为用户带来更好的体验。
基于本申请实施例提供的方法,在电子设备空闲触发编译的场景、电子设备首次开机/恢复出厂设置的场景、电子设备进行OTA升级的场景中,可以获取目标应用程序的baseline profile文件(基准配置文件),根据baseline profile文件对目标应用程序的dex文件进行speed-profile(have profile)的编译模式的编译得到编译优化文件。编译完成后,电子设备运行该目标应用程序时,可以直接调用编译优化文件,无需对目标应用程序的dex文件进行即时编译,节省了编译时间,提高了电子设备对应用程序的执行效率,使得应用程序的运行更加流畅,可以提高用户体验。
图2为本申请实施例提供的一种电子设备100的结构示意图。
如图2所示,电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。
其中,传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本实施例示意的结构并不构成对电子设备100的具体限定。在另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了***的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
可以理解的是,本实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193,和无线通信模块160等供电。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。电子设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。
移动通信模块150可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图像或视频。
无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星***(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯***(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(codedivision multiple access,CDMA),宽带码分多址(wideband code division multipleaccess,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位***(global positioning system,GPS),全球导航卫星***(global navigation satellite system,GLONASS),北斗卫星导航***(beidounavigation satellite system,BDS),准天顶卫星***(quasi-zenith satellitesystem,QZSS)和/或星基增强***(satellite based augmentation systems,SBAS)。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。该显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),发光二极管(light-emitting diode,LED),有机发光二极管(organic light-emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode,AMOLED),柔性发光二极管(flex light-emitting diode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot light emitting diodes,QLED)等。
电子设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。ISP用于处理摄像头193反馈的数据。摄像头193用于捕获静态图像或视频。数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。视频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。这样,电子设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,MPEG)1,MPEG2,MPEG3,MPEG4等。
摄像头193可以包括1~N个。例如电子设备可以包括2个前置摄像头和4个后置摄像头。
NPU为神经网络(neural-network,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过NPU可以实现电子设备100的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。例如,在本申请实施例中,处理器110可以通过执行存储在内部存储器121中的指令,内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作***,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。扬声器170A,也称“喇叭”,用于将音频电信号转换为声音信号。受话器170B,也称“听筒”,用于将音频电信号转换成声音信号。麦克风170C,也称“话筒”,“传声器”,用于将声音信号转换为电信号。耳机接口170D用于连接有线耳机。
按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。SIM卡接口195用于连接SIM卡。SIM卡可以通过***SIM卡接口195,或从SIM卡接口195拔出,实现和电子设备100的接触和分离。电子设备100可以支持1个或N个SIM卡接口,N为大于1的正整数。SIM卡接口195可以支持Nano SIM卡,Micro SIM卡,SIM卡等。
以下实施例中的方法均可以在具有上述硬件结构的电子设备100中实现。
上述电子设备100的软件***可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本发明实施例以分层架构的Android***为例,示例性说明电子设备100的软件结构。
分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过接口通信。在一些实施例中,Android***可以包括应用程序层,应用程序框架层,安卓运行时(Android runtime)和***库,硬件抽象层(hardware abstraction layer,HAL)以及内核层。需要说明的是,本申请实施例以Android***举例来说明,在其他操作***中(例如鸿蒙***,IOS***等),只要各个功能模块实现的功能和本申请的实施例类似也能实现本申请的方案。
其中,应用程序层可以包括一系列应用程序包。
如图3所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息、锁屏应用、设置应用等应用程序。当然,应用程序层还可以包括其他应用程序包,例如应用市场(如)等,本申请不做限定。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。例如可以包括活动管理器、窗口管理器,内容提供器,视图***,资源管理器,通知管理器等,本申请实施例对此不做任何限制。
在本申请实施例中,应用程序框架层可以提供包管理服务(package managerservice,PMS),在PMS中至少包含:应用安装模块和编译优化预处理模块。
其中,应用安装模块可以用于在电子设备空闲触发编译的场景、电子设备首次开机/恢复出厂设置的场景、电子设备进行OTA升级的场景中扫描应用程序的安装包,对应用程序的安装包进行资源解压、解析AndroidManifest.xml等处理,并可以将应用程序的安装包安装到电子设备的相应安装目录(即安装路径)中。应用安装模块还可以将应用程序的包名、安装目录、编译参数等编译所需要的信息发送给编译优化预处理模块。
编译优化预处理模块用于判断当前是否为电子设备空闲触发编译的场景(即电子设备是否触发了空闲触发编译)、电子设备首次开机/恢复出厂设置的场景、电子设备进行OTA升级的场景(即电子设备是否触发了空闲触发编译)等,并可以对编译优化的相关参数信息进行预处理,为编译优化的流程做参数、文件的预处理。
在本申请实施例中,应用程序框架层还可以提供守护线程(Installd),在Installd中至少包含:配置文件(profile)处理模块和编译优化模块。其中,守护线程也可以称为后台线程或服务线程,本申请不做限定。
其中,profile处理模块可以用于调用profman函数,对编译优化过程依赖的profile文件和/或baseline profile文件进行合并处理(merge profile),即可以将profile文件和/或baseline profile文件指示的热点函数整合到data/misc/profiles/ref/<packagename>/primary.prof目录,为dex2oat提供有效可用的profile文件。
编译优化模块可以用于调用ART对应用程序进行dex2oat。
P M S中的编译优化预处理模块还可以调用performDexopt函数访问Installd中的编译优化模块,从编译优化模块获取编译结果。
***库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(Media Libraries),三维图形处理库(例如:OpenGL ES),2D图形引擎(例如:SGL)等。
表面管理器用于对显示子***进行管理,并且为多个应用程序提供了2D和3D图层的融合。
媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
OpenGL ES用于实现三维图形绘图,图像渲染,合成,和图层处理等。
SGL是2D绘图的绘图引擎。
安卓运行时(Android Runtime,ART)包括核心库和虚拟机。Android runtime负责安卓***的调度和管理。
在本申请实施例中,ART中可以包括dex2oat,dex2oat可以称为字节码优化模块。dex2oat能够对应用程序的dex文件进行编译处理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
HAL层是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层硬件的实现细节。
HAL层中可以包括Wi-Fi HAL,音频(audio)HAL,相机HAL(Camera HAL)等。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。
硬件层包括显示器、摄像头、传感器等。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请的描述中,除非另有说明,“至少一个”是指一个或多个,“多个”是指两个或多于两个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
本申请将baseline profile技术与目标编译场景(电子设备空闲触发编译的场景、电子设备首次开机/恢复出厂设置的场景或电子设备进行OTA升级的场景)相结合。如图4所示,在电子设备空闲触发编译的场景、电子设备首次开机/恢复出厂设置的场景或电子设备进行OTA升级的场景中,电子设备可以从目标应用程序的安装包中获取目标应用程序的baseline profile(基准配置文件),根据baseline profile文件对目标应用程序的dex文件进行speed-profile编译得到编译优化文件。后续,电子设备在目标应用程序安装完成后,运行该目标应用程序时,可以直接调用编译优化文件,无需对目标应用程序的dex文件进行即时编译,节省了编译时间,提高了电子设备对应用程序的执行效率,使得应用程序的运行更加流畅,可以提高用户体验。
其中,目标应用程序是指任意一个待安装的应用程序。例如,目标应用程序可以为游戏类应用程序、视频类应用程序、即时通信应用程序、社交类应用程序、购物类应用程序等,本申请实施例对目标应用程序的具体类型不做限定。
下面对本申请实施例提供的应用程序的编译方法所涉及的软件模块和模块间的交互进行说明。
如图5所示,电子设备的PMS中的应用安装模块执行应用程序的安装包中的安装程序。并且,应用安装模块确定应用程序的安装包中是否包括baseline profile文件。在一些实施例中,应用安装模块可以通过解析安装包中AndroidManifest.xml文件,读取AndroidManifest.xml文件中的标志位来确定应用程序的安装包是否包括baselineprofile文件。其中,该标志位用于指示应用程序的安装包是否配置baseline profile文件。在另一些实施例中,应用安装模块可以主动检查应用程序的安装包中是否包含baseline profile文件。若应用安装模块确定应用程序的安装包中包括baseline profile文件,可以将baseline profile文件解压至data/app/目录下的文件夹中。在电子设备空闲触发编译的场景、电子设备首次开机/恢复出厂设置的场景、电子设备进行OTA升级的场景中,编译优化预处理模块向Installd的profile处理模块请求处理baseline profile文件。profile处理模块整合baseline profile文件中的热点函数信息。编译优化预处理模块还可以在PMS侧对编译优化的相关参数信息进行预处理,为编译优化的流程做参数、文件的预处理。编译优化模块还可以调用ART对应用程序进行dex2oat。
以下结合附图对本申请实施例提供的应用程序的编译方法进行具体介绍。
如图6所示,本申请实施例提供一种应用程序的编译方法,包括:
601、电子设备(例如,手机)进行三方应用程序安装时,或者电子设备首次开机扫描时,或者电子设备恢复出厂设置后,手机的PMS中的应用安装模块执行目标应用程序的安装包中的安装程序。
电子设备(例如,手机)进行三方应用程序安装时,或者电子设备首次开机扫描时,或者电子设备恢复出厂设置后,手机的PMS中的应用安装模块可以对目标应用程序的安装包进行扫描,以提取安装包内的dex文件。
其中,目标应用程序可以是任意一个或多个待安装的三方应用程序或者是电子设备中任一个或多个预置的应用程序(***应用程序或预置的三方应用程序)。例如,目标应用程序可以为游戏类应用程序、视频类应用程序、即时通信应用程序、社交类应用程序、购物类应用程序等,本申请实施例对目标应用程序的具体类型不做限定。
其中,待安装的三方应用程序可以是从应用市场下载的,或者可以是从网页下载的,或者可以是其他设备分享的,本申请不做限定。
应用安装模块可以在电子设备中创建目标应用程序的安装目录,并将安装包中的dex文件写入到电子设备的安装目录中。
例如,若目标应用程序是应用安装模块可以在手机中创建/>的安装目录,如data/app/***/com.tencent.mm***,并将/>的安装包中的dex文件写入到安装目录中。
602、应用安装模块确定目标应用程序的安装包中是否包含baseline profile文件。
在一些实施例中,应用安装模块在解析目标应用程序的安装包中的AndroidManifest.xml文件(清单文件)时,读取配置baseline profile文件的标志位(第一标志位),根据第一标志位确定目标应用程序的安装包中是否包含baseline profile文件。
在一种可能的设计中,可以在AndroidManifest.xml中设置标志位(第一标志位),该第一标志位用于指示目标应用程序的安装包中是否包含baseline profile文件。若该第一标志位为真(true),代表目标应用程序的安装包中包含baseline profile文件;若该第一标志位为假(false),代表目标应用程序的安装包中不包含baseline profile文件。
其中,baseline profile文件是被编译进目标应用程序的安装包中的文件。baseline profile文件中记录有目标应用程序的热点函数,可以被放置在安装包的assets/dexopt/baseline.prof目录下。baseline profile文件和AndroidManifest.xml可以在同级目录下。
在安装目标应用程序时,应用安装模块可以解析AndroidManifest.xml文件,读取配置baseline profile文件的第一标志位,并可以将该第一标志位存储在记录安装包信息的结构体中。若该第一标志位为true,代表目标应用程序的安装包中包含baselineprofile文件;若该第一标志位为false,代表目标应用程序的安装包中不包含baselineprofile文件。
在另一些实施例中,应用安装模块可以检查目标应用程序的安装包中是否包含baseline profile文件。即应用安装模块可以在目标应用程序的安装目录中主动检测assets/dexopt/baseline.prof文件(即baseline profile文件)是否存在于目标应用程序的安装包中。若确定assets/dexopt/baseline.prof文件存在,确定目标应用程序的安装包中包含baseline profile文件;若确定assets/dexopt/baseline.prof文件不存在,确定目标应用程序的安装包中不包含baseline profile文件。
若应用安装模块确应用程序的安装包中包含baseline profile文件,即配置baseline profile文件的标志位为true,可以将应用程序的baseline profile文件解压至电子设备的data/app/目录下的文件夹中。其中,/data/app目录是用户所安装的应用程序的安装包存放的目录。
若应用安装模块确目标应用程序的安装包中包含baseline profile文件,即配置baseline profile文件的第一标志位为true,手机可以基于第一编译模式(即speed-profile(have profile)的编译模式)对目标应用程序的安装包中的dex文件进行校验,并对目标应用程序的安装包中的热点函数进行编译处理,即可以执行步骤605-609。
若确定目标应用程序的安装包中不包含baseline profile文件,即配置baselineprofile文件的第一标志位为false,手机可以基于第二编译模式(speed-profile(noprofile)的编译模式或verify的编译模式),对目标应用程序的安装包中的dex文件进行校验。
603、编译优化预处理模块确定当前的编译场景(目标编译场景)。
在手机操作***(例如,Android 8.0)中,可以包括多种编译时机(编译时机也可以称为编译原因)。dexopt可以根据不同的编译时机进行不同的编译过程。不同的编译过程所使用的编译方法可以在SystemProperty中提前预置,在使用时从SystemProperty中读取。
如表2所示,示出了7种编译时机对应的编译模式和触发场景。
表2
若编译优化预处理模块确定当前的编译场景为电子设备空闲触发编译的场景,如表2所示,当前的编译场景对应的编译时机为bg-dexopt,默认编译模式为speed-profile的编译模式。
若编译优化预处理模块确定当前的编译场景为电子设备首次开机、或者恢复出场设置后的场景,如表2所示,当前的编译场景对应的编译时机为first-boot,默认编译模式为verify的编译模式。
若编译优化预处理模块确定当前的编译场景为电子设备进行OTA升级的场景(OTA升级开机过程中),如表2所示,当前的编译场景对应的编译时机为boot-after-ota,默认编译模式为verify的编译模式。
若编译优化预处理模块确定当前的编译场景为电子设备进行OTA升级的场景(OTA升级进入桌面后),如表2所示,当前的编译场景对应的编译时机为post-boot,默认编译模式为verify的编译模式。
在一些实施例中,若当前的标编译场景为电子设备首次开机/恢复出场设置后的场景或电子设备进行OTA升级(OTA升级开机过程或OTA升级进入桌面后中)的场景,如果目标应用程序的安装包中包括基准配置文件,编译优化预处理模块确可以将默认的编译模式修改为speed-profile的编译模式(即speed-profile(have profile)的编译模式)。例如,默认的编译模式为verify或boot-after-ota或post-boot,修改后的编译模式为speed-profile。
在一些实施例中,若当前的编译场景为电子设备空闲触发编译的场景,编译优化预处理模块确定目标应用程序是否是首次编译,若不是首次编译,确定目标应用程序上一次编译的编译时机(编译原因)是否为bg-dexopt,若目标应用程序上一次编译的编译时机不是bg-dexopt,可以执行步骤604和605。
其中,编译优化预处理模块可以从目标应用程序上一次编译得到的odex文件中查看目标应用程序上一次编译的编译时机。
604、编译优化预处理模块向profile处理模块发送第一请求消息,第一请求消息用于请求处理baseline profile文件。
第一请求消息中可以包括目标应用程序的包名(packagename)、安装目录(例如,data/app/目录)、编译参数等编译所需要的信息。其中,编译参数包括第一编译模式(speed-profile(have profile)的编译模式)的模式标识、编译时机等。
例如,以目标应用程序为为例,编译优化预处理模块可以根据/>的应用名称/>安装目录“data/app/***/com.tencent.mm***”、第一编译模式(speed-profile(have profile)的编译模式)的模式标识和编译时机等编译参数生成第一请求消息并发送给profile处理模块。
605、profile处理模块处理baseline profile文件。
profile处理模块从应用安装模块接收第一请求消息,并根据第一请求消息进行以下处理:
(1)、检查/data/misc/profiles/cur/0/<packagename>目录(第一配置目录)是否存在,如该路径不存在则创建该目录。其中,<packagename>表示目标应用程序的包名。
(2)、将baseline profile文件从data/app目录下移动至/data/misc/profiles/cur/0/<packagename>目录下。
(3)、设置更新isCheckForProfileUpdates标志位(第二标志位),第二标志位用于触发对baseline profile文件进行合并处理,即触发merge profile流程,为dex2oat提供有效可用的profile文件。
如图7所示,merge profile流程可以是指profile处理模块调用profman函数整合/data/misc/profiles/cur/0/<packagename>目录中的baseline profile文件中的热点函数信息。经整合后的热点函数信息被存储在data/misc/profiles/ref/<packagename>/primary.prof目录(第二配置目录)。后续,dex2oat根据第二配置目录中的文件(baselineprofile文件)进行编译。
在一些实施例中,电子设备可以在目标应用程序运行过程中收集目标应用程序的热点函数,根据收集到的热点函数生成profile文件(第二配置文件)。DM文件中的profile文件可以存储在data/app/目录下。该profile文件可以存储在/data/misc/profiles/cur/0/<packagename>目录下。如图8所示,profile处理模块可以整合/data/misc/profiles/cur/0/<packagename>目录中的baseline profile文件和电子设备根据收集到的热点函数生成profile文件生成的profile文件,以得到更加准确和全面的热点函数信息。经整合后的热点函数信息被存储在data/misc/profiles/ref/<packagename>/primary.prof目录(第二配置目录)。后续,dex2oat根据第二配置目录中的文件(baseline profile文件和电子设备根据收集到的热点函数生成profile文件生成的profile文件)进行编译。
profile处理模块完成对baseline profile文件的处理(即完成merge profile流程)后,可以通知编译优化预处理模块完成对baseline profile文件的处理(即完成mergeprofile流程)。
606、编译优化预处理模块对编译所需要的信息进行预处理。
编译优化预处理模块可以在PMS侧对编译所需要的信息进行预处理,在电子设备空闲触发编译的场景、电子设备首次开机/恢复出厂设置的场景、电子设备进行OTA升级的场景中,为编译优化的流程做参数、文件的预处理。
例如,编译优化预处理模块可以对编译所需要的信息进行安全检查和防护,根据编译所需要的信息进行核实、检查、判断编译优化的必要性等处理,并可以执行持锁操作和Split APK的处理。其中,Split APK是针对APK安装包越来越大等问题的解决机制。SplitAPK可以将一个庞大的APK拆分成多个独立的APK,在应用程序更新时,不必下载整个APK,只需单独下载某个模块即可安装更新。
607、编译优化预处理模块向编译优化模块发送第二请求消息,第二请求消息用于请求编译优化模块开启当前编译场景的编译优化。
其中,第二请求消息中可以包括目标应用程序的包名、安装目录、编译参数等编译所需要的信息。
608、编译优化模块调用ART中的dex2oat对目标应用程序的dex文件进行编译。
编译优化模块接收到第四请求消息后,可以调用ART中的dex2oat以speed-profile(have profile)的编译模式对目标应用程序的dex文件进行编译。如图9所示,具体过程包括以下步骤S1-S3。
S1、编译优化模块发送编译指令给ART的虚拟机中的dex2oat。
编译优化模块可以将目标应用程序的包名、安装目录、默认编译模式的模式标识、编译时机等编译所需要的信息添加到编译指令中,并将编译指令发送至dex2oat。
S2、dex2oat按照编译指令对安装目录中的dex文件进行编译处理。
dex2oat除了对dex文件进行校验处理,得到相应的odex文件之外,还会按照profile文件指示的热点函数的信息,对目标应用程序的dex文件中的热点函数的代码进行AOT编译,得到相应的编译产物:art文件。该art文件中包含这些热点函数的代码的地址,方便对这些热点函数进行寻址。而这些热点函数的代码为目标应用程序运行常用的函数的代码,由此,在目标应用程序运行过程中,电子设备在加载art文件到内存后,可以快速寻址并运行所寻到的代码,从而使得目标应用程序运行更流畅。
编译优化模块还可以调整编译优化参数,即对第四请求消息中的信息进行检查和调整,创建odex文件的路径以保存生成的odex文件等。
S3、dex2oat在编译完成之后向编译优化模块返回编译完成的消息。
其中,编译完成的消息中可以包含有目标应用程序的包名,以表征该目标应用程序的dex文件被编译完成。
609、编译优化模块向编译优化预处理模块发送编译优化结果。
编译优化结果用于指示dex2oat已完成目标应用程序的dex文件的编译优化。其中,编译优化结果中可以包含有目标应用程序的包名,以表征该目标应用程序的dex文件被编译完成。
本申请解决了目标编译场景(例如,电子设备空闲触发编译的场景、电子设备首次开机/恢复出厂设置的场景、电子设备进行OTA升级的场景)中,由于缺少profile文件导致无法触发speed-profile(have profile)的编译模式进行编译优化的问题。本申请提供的应用程序的编译方法和装置,可以将baseline profile技术与目标编译场景相结合,无需依赖应用市场为应用程序提供DM文件(DM文件中包括profile文件),也无需等待应用程序运行时对应用程序的热点函数进行记录以生成profile文件。本申请提供的方法可以在电子设备端(例如,手机端)对嵌入到APK中的baseline profile文件进行处理,使得在目标编译场景中,即使用户一直未使用过目标应用程序导致无法在应用程序运行时对应用程序的热点函数进行记录以生成profile文件,也可以触发speed-profile(have profile)的编译模式对应用程序进行编译优化,可以提高应用程序的性能(应用程序的启动、滑动等性能),从而为用户带来更好的体验。
在一些实施例中,若用户使用过应用程序,电子设备可以在应用程序运行时对应用程序的热点函数进行记录以生成profile文件。在目标编译场景中,可以结合baselineprofile文件和电子设备生成的profile文件得到更加准确和全面的热点函数,以speed-profile(have profile)的编译模式对应用程序进行编译优化。相比仅根据电子设备生成的profile文件进行speed-profile的编译模式的编译优化,根据baseline profile文件和电子设备生成的profile文件进行speed-profile的编译模式的编译优化可以更好地提升应用程序性能,从而为用户带来更好的体验。
需要说明的是,在电子设备首次开机/恢复出场设置后的场景或电子设备进行OTA升级的场景(OTA升级开机过程或OTA升级进入桌面后中)中,根据baseline profile文件在电子设备端以speed-profile(have profile)的编译模式对目标应用程序进行编译优化,相较于在预置阶段(电子设备烧录操作***、***应用程序以及一些三方应用程序的阶段)以speed-profile(have profile)的编译模式对目标应用程序进行编译优化更加节省存储空间。这是由于baseline profile文件的体积相较于编译优化文件(预置阶段以speed-profile(have profile)的编译模式对目标应用程序进行编译优化得到的编译优化文件)的体积更小,可以减少电子设备预置的文件数量,节省电子设备的存储空间。
基于本申请实施例提供的方法,在电子设备空闲触发编译的场景、电子设备首次开机/恢复出厂设置的场景、电子设备进行OTA升级的场景中,获取目标应用程序的baseline profile文件(基准配置文件),根据baseline profile文件对目标应用程序的dex文件进行speed-profile(have profile)的编译模式的编译得到编译优化文件。编译完成后,电子设备运行该目标应用程序时,可以直接调用编译优化文件,无需对目标应用程序的dex文件进行即时编译,节省了编译时间,提高了电子设备对应用程序的执行效率,使得应用程序的运行更加流畅,可以提高用户体验。
本申请一些实施例提供了一种电子设备,该电子设备可以包括:触摸屏、存储器和一个或多个处理器。该触摸屏、存储器和处理器耦合。该存储器用于存储计算机程序代码,该计算机程序代码包括计算机指令。当处理器执行计算机指令时,电子设备可执行上述方法实施例中电子设备执行的各个功能或者步骤。该电子设备的结构可以参考图2所示的电子设备100的结构。
本申请实施例还提供一种芯片***(例如,片上***(system on a chip,SoC)),如图10所示,该芯片***包括至少一个处理器1001和至少一个接口电路1002。处理器1001和接口电路1002可通过线路互联。例如,接口电路1002可用于从其它装置(例如电子设备的存储器)接收信号。又例如,接口电路1002可用于向其它装置(例如处理器1001或者电子设备的触摸屏)发送信号。示例性的,接口电路1002可读取存储器中存储的指令,并将该指令发送给处理器1001。当所述指令被处理器1001执行时,可使得电子设备执行上述实施例中的各个步骤。当然,该芯片***还可以包含其他分立器件,本申请实施例对此不作具体限定。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令,当所述计算机指令在上述电子设备上运行时,使得该电子设备执行上述方法实施例中电子设备执行的各个功能或者步骤。
本申请实施例还提供一种计算机程序产品,当所述计算机程序产品在电子设备上运行时,使得所述电子设备执行上述方法实施例中电子设备执行的各个功能或者步骤。
通过以上实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (8)

1.一种应用程序的编译方法,其特征在于,包括:
电子设备在目标编译场景下,确定目标应用程序的安装包是否包括基准配置文件,所述基准配置文件用于指示所述目标应用程序的安装包中的热点函数;其中,所述目标编译场景包括所述电子设备在空闲状态触发编译的场景;
若确定所述目标应用程序的安装包中包括所述基准配置文件,所述电子设备基于第一编译模式对所述目标应用程序的安装包中的dex文件进行校验,并对所述基准配置文件指示的所述热点函数进行编译处理。
2.根据权利要求1所述的方法,其特征在于,
所述目标编译场景还包括所述电子设备首次开机触发编译的场景、所述电子设备进行空中下载OTA升级触发编译的场景。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
所述电子设备在所述目标应用程序运行时对所述目标应用程序的热点函数进行记录,根据记录的热点函数生成第一配置文件;
所述电子设备基于第一编译模式对所述目标应用程序的安装包中的dex文件进行校验,并对所述基准配置文件指示的所述热点函数进行编译处理包括:
所述电子设备基于所述第一编译模式对所述目标应用程序的安装包中的dex文件进行校验,并对所述基准配置文件指示的所述热点函数和所述第一配置文件指示的所述热点函数进行编译处理。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述电子设备确定所述目标应用程序的安装包是否包括基准配置文件包括:
所述电子设备解析所述目标应用程序的安装包中的清单文件,所述清单文件中设置第一标志位,所述第一标志位用于指示所述目标应用程序的安装包中是否包含所述基准配置文件;
读取所述第一标志位,若所述第一标志位为真,代表所述目标应用程序的安装包中包含所述基准配置文件,若所述第一标志位为假,代表所述目标应用程序的安装包中不包含所述基准配置文件。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述电子设备确定所述目标应用程序的安装包是否包括基准配置文件包括:
所述电子设备在所述目标应用程序的安装目录中检测所述基准配置文件是否存在。
6.根据权利要求1所述的方法,其特征在于,所述电子设备基于第一编译模式对所述目标应用程序的安装包中的dex文件进行校验,并对所述目标应用程序的安装包中的热点函数进行编译处理之前,所述方法还包括:
所述电子设备检查第一配置目录是否存在,若所述第一配置目录不存在则创建所述第一配置目录;
所述电子设备将所述基准配置文件从安装目录移动至所述第一配置目录下;
所述电子设备设置更新第二标志位,所述第二标志位用于触发对所述基准配置文件进行合并处理,所述电子设备将所述第一配置目录下的所述基准配置文件移动至第二配置目录下。
7.一种电子设备,其特征在于,所述电子设备包括显示屏、处理器和存储器;所述存储器存储有程序指令;所述处理器用于运行所述存储器存储的所述程序指令,使得所述电子设备执行如权利要求1-6任一项所述的方法。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括程序指令,当所述程序指令在电子设备上运行时,使得所述电子设备执行如权利要求1-6任一项所述的方法。
CN202310141098.1A 2023-01-19 2023-01-19 一种应用程序的编译方法和装置 Pending CN117130617A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310141098.1A CN117130617A (zh) 2023-01-19 2023-01-19 一种应用程序的编译方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310141098.1A CN117130617A (zh) 2023-01-19 2023-01-19 一种应用程序的编译方法和装置

Publications (1)

Publication Number Publication Date
CN117130617A true CN117130617A (zh) 2023-11-28

Family

ID=88861634

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310141098.1A Pending CN117130617A (zh) 2023-01-19 2023-01-19 一种应用程序的编译方法和装置

Country Status (1)

Country Link
CN (1) CN117130617A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118069154A (zh) * 2024-04-22 2024-05-24 荣耀终端有限公司 应用编译控制方法及相关设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7818729B1 (en) * 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
CN112559088A (zh) * 2020-12-29 2021-03-26 Oppo广东移动通信有限公司 配置文件的优化方法、装置、服务器以及存储介质
CN112596751A (zh) * 2020-12-29 2021-04-02 Oppo广东移动通信有限公司 应用程序安装包的编译方法、终端、服务器及存储介质
CN112783501A (zh) * 2019-11-08 2021-05-11 Oppo广东移动通信有限公司 热点编译单元确定方法、装置及服务器
CN112948026A (zh) * 2019-11-26 2021-06-11 Oppo广东移动通信有限公司 热点代码处理方法、装置、服务器、电子设备及存储介质
CN113885870A (zh) * 2021-08-27 2022-01-04 荣耀终端有限公司 应用程序更新方法、电子设备、终端设备及***

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7818729B1 (en) * 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
CN112783501A (zh) * 2019-11-08 2021-05-11 Oppo广东移动通信有限公司 热点编译单元确定方法、装置及服务器
CN112948026A (zh) * 2019-11-26 2021-06-11 Oppo广东移动通信有限公司 热点代码处理方法、装置、服务器、电子设备及存储介质
CN112559088A (zh) * 2020-12-29 2021-03-26 Oppo广东移动通信有限公司 配置文件的优化方法、装置、服务器以及存储介质
CN112596751A (zh) * 2020-12-29 2021-04-02 Oppo广东移动通信有限公司 应用程序安装包的编译方法、终端、服务器及存储介质
CN113885870A (zh) * 2021-08-27 2022-01-04 荣耀终端有限公司 应用程序更新方法、电子设备、终端设备及***

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
袁晓筱;罗森林;杨鹏;: "Android***应用程序DEX文件保护方法研究", 信息网络安全, no. 07, 10 July 2020 (2020-07-10) *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118069154A (zh) * 2024-04-22 2024-05-24 荣耀终端有限公司 应用编译控制方法及相关设备

Similar Documents

Publication Publication Date Title
US11947974B2 (en) Application start method and electronic device
CN110633090B (zh) 补丁方法、相关装置及***
WO2021052167A1 (zh) 一种实现应用插件化的方法及电子设备
CN115309431B (zh) 一种参数更新方法、可读介质和电子设备
CN112817634B (zh) Cota包下载方法及装置
CN117130617A (zh) 一种应用程序的编译方法和装置
CN113741993B (zh) 编译插件dex文件的方法及装置
CN116643778B (zh) 一种应用程序优化方法及电子设备
CN113656089B (zh) 应用程序中的类验证方法和装置
CN117130541B (zh) 存储空间配置方法及相关设备
CN116737243B (zh) 屏幕参数补丁升级方法及终端设备
CN116795435A (zh) 兼容性管控方法及相关设备
WO2021238376A1 (zh) 功能包的加载方法、装置、服务器和电子设备
CN118363598A (zh) 一种应用程序的编译方法和装置
CN114579181A (zh) 打补丁的方法、相关设备及***
CN116521180B (zh) 一种编译优化方法、电子设备和存储介质
CN116048544B (zh) 一种弹窗广告的处理方法、电子设备及可读存储介质
CN116048685B (zh) 杂志锁屏的显示方法、图形界面及电子设备
CN116048545B (zh) 一种弹窗广告的处理方法、电子设备及可读存储介质
CN116033341B (zh) 触发围栏事件的方法和装置
WO2024131823A1 (zh) 免安装应用的升级方法及电子设备
CN117707563A (zh) 应用资源处理方法及相关设备
CN116048629A (zh) ***服务切换方法及控制装置、电子设备和存储介质
CN117850896A (zh) 一种预加载方法、电子设备、芯片及可读存储介质
CN118210496A (zh) 一种跨语言交互方法及相关装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination