CN109800030B - 一种应用程序运行方法、装置及终端 - Google Patents
一种应用程序运行方法、装置及终端 Download PDFInfo
- Publication number
- CN109800030B CN109800030B CN201910034073.5A CN201910034073A CN109800030B CN 109800030 B CN109800030 B CN 109800030B CN 201910034073 A CN201910034073 A CN 201910034073A CN 109800030 B CN109800030 B CN 109800030B
- Authority
- CN
- China
- Prior art keywords
- application program
- running
- main
- main application
- information
- 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
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种应用程序运行方法、装置及终端,属于计算机技术领域,其中,应用程序运行方法包括:在次应用程序安装时,为次应用程序所对应的主应用程序注册所述主应用程序运行时的系统资源;当次应用程序运行时,下载并解析主应用程序的安装包,得到主应用程序的目标运行信息;根据主应用程序的目标运行信息,将次应用程序的运行环境替换为主应用程序的运行环境;在主应用程序的运行环境下,根据注册的主应用程序运行时的系统资源运行主应用程序。本发明在用户无感知的情况下,实现了主应用程序的下载且无需安装即可动态加载主应用程序的代码和资源,平滑过渡运行主应用程序,达到了在不影响用户体验情况下的主应用程序的运行。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种应用程序运行方法、装置及终端。
背景技术
随着互联网技术的发展,智能终端的使用越来越频繁,其中应用安卓系统的智能终端占据了重要的市场位置。
在安卓系统中,一般需要先下载并安装应用程序的安装包后才能运行相应的应用程序。而一般应用程序的正式版安装包都非常大,例如有些新闻App(Application,应用程序)的正式版安装包大小超过了20M,在用户处于非wifi且流量套餐不是很充裕的情况下,大部分用户会选择放弃下载使用该应用程序,不仅影响了用户的体验效果,而且降低了对于应用程序的下载率,不利于应用程序的推广。
现有技术中针对上述问题提供了一种与正式版安装包相对应的轻量版安装包,该轻量版安装包为正式版安装包的精简版本,会砍掉应用程序的部分功能,因此轻量版安装包的大小相对于正式版安装包会小很多,例如,上述20M的正式版安装包经过精简后得到的轻量版安装包可以只有5M,从而减小了用户下载使用时的流量顾虑,有利于提高应用程序的下载率以及应用程序的推广。
但是,由于轻量版的应用程序对正式版的应用程序的功能进行了大量删减,相关功能缺失,用户体验效果差,而当用户需要用到正式版时,还需要自己重新下载和安装正式版本,过程繁琐,降低了用户的体验。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种应用程序运行方法、装置及终端。所述技术方案如下:
一方面,提供了一种应用程序运行方法,所述方法包括:
在次应用程序安装时,为所述次应用程序所对应的主应用程序注册所述主应用程序运行时的系统资源;
当所述次应用程序运行时,下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息;
根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境;
在所述主应用程序的运行环境下,根据注册的所述主应用程序运行时的系统资源运行所述主应用程序。
另一方面,提供了一种应用程序运行装置,所述装置包括:
注册模块,用于在次应用程序安装时,为所述次应用程序所对应的主应用程序注册所述主应用程序运行时的系统资源;
下载解析模块,用于在所述次应用程序运行时,下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息;
替换模块,用于根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境;
运行模块,用于在所述主应用程序的运行环境下,根据注册的所述主应用程序运行时的系统资源运行所述主应用程序。
另一方面,提供了一种终端,包括处理器和存储装置;
所述存储装置,用于存储计算机程序指令;
所述处理器,调用所述计算机程序指令,用于在次应用程序安装时,为所述次应用程序所对应的主应用程序注册所述主应用程序运行时的系统资源;
当所述次应用程序运行时,下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息;
根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境;
在所述主应用程序的运行环境下,根据注册的所述主应用程序运行时的系统资源运行所述主应用程序。
另一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述的应用程序运行方法。
本发明实施例提供的技术方案带来的有益效果是:
本发明实施例通过在次应用程序安装时,为与次应用程序对应的主应用程序注册该主应用程序运行时的系统资源,当次应用程序运行时,下载并解析主应用程序的安装包,得到主应用程序的目标运行信息,根据主应用程序的目标运行信息将次应用程序的运行环境替换为主应用程序的运行环境,然后在主应用程序的运行环境下,根据上述注册的主应用程序运行时的系统资源运行主应用程序,从而在用户无感知的情况下,实现主应用程序的下载且无需安装即可动态加载主应用程序的代码和资源,平滑过渡运行主应用程序,达到了在不影响用户体验情况下的主应用程序的运行。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种应用程序运行方法的流程示意图;
图2是本发明实施例提供的下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息的一种流程示意图;
图3是本发明实施例提供的根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境的一种流程示意图;
图4是本发明实施例提供的一种应用程序运行装置的结构示意图;
图5是本发明实施例提供的下载解析模块的一种结构示意图;
图6是本发明实施例提供的下载解析模块的另一种结构示意图;
图7是本发明实施例提供的下载解析模块的另一种结构示意图;
图8是本发明实施例提供的替换模块的一种结构示意图;
图9是本发明实施例提供的运行模块的一种结构示意图;
图10是本发明实施例提供的一种终端的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图1,其所示为本发明实施例提供的一种应用程序运行方法的流程示意图,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。具体的如图1所示,所述方法包括:
S101,在次应用程序安装时,为所述次应用程序所对应的主应用程序注册所述主应用程序运行时的系统资源。
在本说明书实施例中,主应用程序和次应用程序为同一应用程序的不同版本,该应用程序可以是新闻类的应用程序,也可以是游戏类的应用程度等等,本发明对此不作限定。
具体的,主应用程序为应用程序的正式版或者全量版的安装包所对应的应用程序,次应用程序为应用程序的轻量版或者极速版的安装包所对应的应用程序。其中,应用程序的轻量版或者极速版的安装包为其正式版或者全量版的安装包的精简版本,即将正式版或者全量版的安装包中的部分功能删除,因此,次应用程序的安装包的大小比主应用程序的安装包要小很多,从而用户在下载并安装次应用程序的安装包时,可以减小用户下载的流量以及时间消耗,有利于实现应用程序的推广,并降低应用程序的推广成本,提高应用程序的下载率和转换率。
在本说明书实施例中,次应用程序为已经安装在终端中的应用程序,在次应用程序安装时,通过对下载的次应用程序的安装包进行解压,可以得到该安装包中的文件集合,其中包括Manifest配置文件,即Android应用程序配置文件,主要用于声明应用程序的属性,以及声明相关系统组件,以便安装运行的时候,注册给安卓系统。
对于安卓系统而言,Android应用程序以安装包的形式传递给用户进行安装,该安装包中具有用于封装实现各个组件的程序代码的代码文件(即为Dex文件)以及用于表达应用程序所用的各个组件的注册信息以及权限申请信息等内容的Manifest配置文件。其中,安卓应用程序的组件也可以称为类对象,主要包括Activity(活动)组件,Service(服务)组件,Broadcast Receiver(广播接收器)组件,Content Provider(数据库)组件。当然,并非每个应用程序都需包含上述四个类型的组件,各个组件都需要在安卓系统中注册才能使用,即每一个组件都需要在Manifest配置文件中进行配置,因此,应用程序的安装包中的Manifest配置文件中有列出应用程序所包含的所有组件。
在本说明书实施例中,次应用程序的安装包中的应用配置信息包括第一应用配置信息和第二应用配置信息,其中,第一应用配置信息与次应用程序的组件信息相对应,用于向安卓系统声明次应用程序的各组件运行所需的系统资源;第二应用配置信息与主应用程序的组件信息相对应,用于向安卓系统声明主应用程序的各个组件运行所需的系统资源。在次应用程序安装时,可以通过第一应用配置信息为次应用程序的各组件注册各个组件在安卓系统中运行时所需的系统资源,可以通过第二应用配置信息为主应用程序的各个组件注册各个组件在安卓系统中运行时所需的系统资源,以确保后续主应用程序的正常运行。
实际应用中,可以在打包次应用程序的安装包时,将次应用程序的Manifest文件(即第一应用配置信息)与主应用程序的Manifest配置文件(即第二应用配置信息)进行合并,具体的,可以在次应用程序的Manifest配置文件中直接添加主应用程序的Manifest配置文件,当次应用程序的Manifest配置文件中的组件与主应用程序的Manifest配置文件中的组件相同时,保留其一,例如可以保留次应用程序的Manifest配置文件中的该组件,将主应用程序的Manifest配置文件中的该组件删除。
在本说明书实施例中,由于次应用程序的安装包中的应用配置信息包含了与次应用程序对应的第一应用配置信息以及与主应用程序对应的第二应用配置信息,次应用程序在安装时依据上述应用配置信息声明给系统的组件会比次应用程序自身的组件多。为了确保次应用程序的正常运行,避免在非主应用程序运行模式下的组件启动导致的应用程序崩溃问题,可以在次应用程序的安装包打包时,在其Dex文件中设置一预设替代组件,该预设替代组件与次应用程序的安装包中的第二应用配置信息相对应。
需要说明的是,次应用程序为所对应的主应用程序注册所述主应用程序运行时的系统资源包括但不限于主应用程序运行所需的程序资源和进程资源。
S103,当所述次应用程序运行时,下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息。
在本说明书实施例中,当在终端中运行次应用程序时,可以在后台进行主应用程序的安装包的下载和解析,以得到主应用程序的目标运行信息,该目标运行信息可以包括主应用程序的Dex文件以及各种资源等等。
由于主应用程序的安装包中一般包括多个Dex文件,当首次加载主应用程序时,需要对这多个Dex文件进行全量的编译,这个过程非常的耗时,且会占用大量的系统资源,极容易在加载过程中导致应用程序出现ANR(Application Not Responding,应用无响应)现象,ANR现象是Android应用程序运行过程中的一种卡死状态,此时会弹窗提示“应用无响应,是否退出“,跟应用崩溃一样,是一种灾难性错误状态。
为了避免在后续主应用程序的加载过程中出现ANR现象,本说明书实施例中的下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息可以采用图2的方法,如图2所示,该方法可以包括:
S201,获取所述主应用程序的安装包的下载地址。
具体的,当次应用程序在运行时,且处于无线网络环境时,终端可以在后台根据应用程序的名称获取对应的主应用程序的安装包的下载地址。
S203,根据所述下载地址,获取所述主应用程序的安装包。
在本说明书实施例中,终端可以根据主应用程序的安装包的下载地址下载到主应用程序的安装包,一般在获取主应用程序的安装包的同时还可以获取到主应用程序的安装包的属性信息,该属性信息可以包括安装包的基本信息和签名信息,其中的基本信息可以包括安装包的大小、版本号以及md5值等等。
为了防止下载到错误的主应用程序的安装包或者防止主应用程序的安装包被篡改,在本说明书实施例中,还可以根据主应用程序的安装包的属性信息对该安装包进行校验,在校验通过时,才执行步骤205,在校验不通过时,重新根据下载地址进行主应用程序的安装包的下载。
在根据主应用程序的安装包的属性信息对该安装包进行校验时,可以将主应用程序的安装包的签名信息与次应用程序的签名信息进行比对,在二者一致时,继续校核主应用程序的安装包的基本信息,当校核结果为该基本信息准确时,可以确定校验通过;当签名信息以及基本信息中的任何一个不符合要求,则确定校验未通过。
S205,解析所述主应用程序的安装包,得到所述主应用程序的运行信息。
解析主应用程序的安装包得到的运行信息包括安装包中的Dex文件,So文件(即动态链接库,是二进制文件)以及资源,可以将上述解析得到的运行信息拷贝存储到终端的指定数据目录中。
S207,对所述主应用程序的运行信息进行预编译,得到所述主应用程序的目标运行信息。
在本说明书实施例中,上述解析得到的运行信息经过预编译后转换成可以被安卓虚拟机直接运行的机器码文件即Oat文件,也就是说得到的主应用程序的目标运行信息是一个预编译后的Oat文件。
Oat文件是安卓虚拟机运行的文件,是一种二进制可运行文件,包含Dex文件和编译出的本地机器指令文件,其文件格式类似于网络数据报文,包含文件头和文件体,文件头的Oatdata、Oatexec和Oatlastword字段分别描述Dex文件位置和本地机器指令的起止位置。在预编译过程中,Dex文件会被工具dex2oat翻译成本地机器指令,最终得到一个ELF格式的Oat文件,安卓虚拟机加载Oat文件后不需要经过处理就可以直接运行,没有了从字节码转换成机器码的过程,因此可以使得运行速度更快。
具体的,预编译可以采用渐进的方式,即在次应用程序处于前台运行模式时,可以对运行信息进行部分编译,这之后,当系统处于锁屏状态,或者次应用程序退到后台等场景下,再对运行信息进行全量的编译,从而可以在主应用程序加载之前完成运行信息的编译,得到目标运行信息。
由于上述对于主应用程序的运行信息的预编译是在次应用程序的运行过程中由后台进行的,因此不会对次应用程序的运行产生影响,用户无感知。并且预编译后得到的目标运行信息在后续主应用程序的加载过程中可以直接加载运行,无需再次编译,从而避免了后续主应用程序的加载过程中出现的ANR现象。
在本说明书实施例中,由于主应用程序并未安装在本地,次应用程序在运行时,系统依据次应用程序注册的系统资源(包括次应用程序为主应用程序注册的系统资源)是无法获取主应用程序的各个组件的,为了避免次应用程序运行时,因系统找不到组件而导致的应用程序崩溃,在所述次应用程序运行时,可以判断待加载的所述次应用程序的组件是否存在,当判断的结果为待加载的次应用程序的组件不存在时,系统可以获取次应用程序的Dex文件中的预设替代组件,运行该预设替代组件。实际应用中,在该预设替代组件运行后,可以对用户进行提示以引导用户进行主应用程序的启动。
S105,根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境。
由于主应用程序的安装包没有安装在本地,而采用别人的上下文环境是无法得到自己的资源的,因此也就无法通过次应用程序的上下文环境去取到主应用程序的安装包中的资源,比如图片、文本等,因此,需要为主应用程序构造其运行所需的运行环境。
在本说明书实施例中,可以根据主应用程序的目标运行信息将次应用程序的运行环境替换为主应用程序的运行环境,由此形成主应用程序的运行环境。由于在次应用程序的运行环境被替换的过程中,次应用程序的运行将会受到影响,为了不影响用户对于应用程序的使用,可以在再次运行次应用程序时,执行步骤S105。具体的,可以在次应用程序重启或者由后台切换到前台时,执行步骤S105。
在本说明书实施例中,在根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境之前,还可以对预编译得到的目标运行信息进行检查,以确保目标运行信息的完整和正确,若检查的结果为目标运行信息不完整或者存在错误,则当前不执行步骤S105,而是继续次应用程序的运行,并在后台重新进行主应用程序的运行信息的预编译。
在本说明书实施例中,所述根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境可以采用图3中的方法,如图3所示,该方法可以包括:
S301,根据所述目标运行信息创建所述主应用程序的类加载器,并将所述次应用程序的类加载器替换为所述主应用程序的类加载器。
具体的,可以将主应用程序的Dex文件的路径添加到类加载器中的路径列表pathlist中,创建根据路径查找加载类的类加载器。还可以对类加载器中的mparent成员进行修改,创建首先通过parent找加载类的类加载器,如此,系统在找对应类的时候,就可以直接调用mparentfindclass()函数去查找,而不必先调用findloadedclass()函数找类。
一般安卓应用程序的组件的运行,需要先创建出组件的对象才能去执行对应的生命周期。正常情况下,运行已经安装的应用程序时,创建对象的过程是由系统中应用程序的主进程Activity Thread通过其所持有的LoadedApk去创建对象,而Loaded Apk创建的时候是利用其所创建和持有的PathClassLoader去加载类,并通过加载的类创建出对象。为了能够将主应用程序的各个组件运行起来,即次应用程序再次运行的时候LoadedApk要加载主应用程序的类,需要将次应用程序的类加载器PathClassLoader替换为上述创建的类加载器DexClassLoader。
S303,根据所述目标运行信息创建所述主应用程序的资源对象,并将所述次应用程序的资源对象替换为所述主应用程序的资源对象。
一般安卓应用程序在运行的过程中,是通过Asset Manager资源管理器来读取打包在安装包文件里面的资源文件的。应用程序的每一个组件都关联一个用来描述组件运行的上下文环境的ContextImpl对象,通过调用ContextImpl对象的成员函数init可以初始化组件运行的上下文环境,其中包括创建用来访问应用程序资源的Resources对象和AssetManager对象。ContextImpl.init函数中的参数packageInfo指向的是一个LoadedApk对象,这个LoadedApk对象描述的是当前正在启动的组件所属的安装包。用来访问应用程序资源的Resources对象是通过调用参数packageInfo所指向的一个LoadedApk对象的成员函数getResources来创建的。
具体的,可以对资源Resources类的创建函数中的成员变量massets进行修改,以在启动主应用程序的各组件时通过所述massets来调取相应的主应用程序的资源。还可以对资源管理器Asset Manager中的Asset Path函数进行修改,修改后的Asset Path函数指向主应用程序的安装包中的资源文件,以在启动主应用程序的各组件时通过所述AssetManager调取所述Asset Path函数来获取所述主应用程序的资源文件中的对应资源。当然,还可以通过其他的方式来创建主应用程序的资源对象,例如通过AssetManager对象的成员函数addAssetPath来添加指定的主应用程序的资源文件路径到资源管理器Asset Manager中Asset Path函数中,本发明对此不作限定。
为了让系统能够访问到主应用程序的资源,需要将次应用程序的资源对象替换为上述创建的主应用程序的资源对象,具体的,可以用上述创建出的主应用程序的资源对象替换掉系统的ContextImpl和LoadedApk中的次应用程序的Resources(资源)对象。
S305,根据所述目标运行信息创建所述主应用程序的入口对象,并将所述次应用程序的入口对象替换为所述主应用程序的入口对象。
一般安卓系统启动已安装的应用程序的时候,会创建出应用程序在Manifest中声明的入口对象,并执行其onCreate()函数,这是应用程序启动时最早的入口。
在本说明书实施例中,将系统持有次应用程序的类加载器和资源对象替换成主应用程序的类加载器和资源对象的操作正是发生在次应用程序的入口(Application)对象的onCreate()函数中,因此,在系统创建Manifest配置文件中声明的入口(Application)对象时,次应用程序还没有被替换,因此加载的仍然是次应用程序的类,主应用程序的入口(Application)对象并没有得到加载和创建。
由于入口(Application)对象作为应用程序的入口,因此需要单独代替系统创建出主应用程序的入口(Application)对象,并将系统的主进程ActivityThread和LoadedApk中持有的次应用程序的入口(Application)对象替换成主应用程序的入口对象。
在本说明书实施例中,可以采用反射机制来创建主应用程序的入口对象。其中,反射机制可以为Java反射机制,Java反射机制是在运行状态中,对任意一个类都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态调用对象的方法的功能即为Java语言的反射机制。当然,反射机制不限于上述的Java反射机制,还可以为C语言反射机制或者C++语言反射机制,本发明对此不作限定。
S107,在所述主应用程序的运行环境下,根据注册的所述主应用程序运行时的系统资源运行所述主应用程序。
在本说明书实施例中,通过步骤S105将系统中的次应用程序的运行环境替换为了主应用程序的运行环境,那么在该主应程序的运行环境下,就可以根据注册的主应用程序运行时的系统资源运行主应用程序,具体的为实现主应用程序的各个组件的加载运行。
通过本说明书实施例的上述方法可以在不安装主应用程序的安装包的前提下,实现主应用程序的运行,而且由于是将次应用程序的运行环境完全替换为了主应用程序的运行环境,即将次应程序替换为了主应用程序,因此,在主应用程序的运行时,可以采用主应用程序的账号体系(例如微信账号、QQ账号等)进行主应用程序的登录。而现有技术中的插件框架是无法使用插件自身的账号体系来登录宿主应用程序的。
考虑到主应用程序的通知栏中RemoteView和界面切换时执行切换动画,均是由系统的服务端进行资源查找和加载,而服务端持有的资源文件以及资源文件的标识只能是已安装的次应用程序的(主应用程序并未安装),主应用程序的资源仅在主应用程序运行之后由用户主动在应用程序运行客户端进行替换。因此,对于主应用程序通知栏消息中的资源,例如图标、布局文件和自定义切换动画的动画文件等,可能在已安装的次应用程序的安装包中并不存在对应的资源,如此在主应用程序运行时,可能会出现加载的资源找不到而导致应用程序崩溃退出,或者资源加载错误而出现不可预知的问题。
鉴于此,在本发明实施例中,在次应用程序的安装包以及主应用程序的安装包打包时,可以预先设置一个public.xml文件,该public.xml文件中指明需要固定标识的预设资源,即这部分预设资源在次应用程序的安装包以及主应用程序的安装包中应具有相同的资源标识,那么在打包次应用程序的安装包以及主应用程序的安装包时,可以将上述该public.xml文件中的预设资源在次应用程序的安装包和主应用程序的安装包设置为相同的预设资源标识。
相应的,在主应用程序运行时,可以获取主应用程序的预设资源标识,然后获取与所述主应用程序的预设资源标识相匹配的所述次应用程序的预设资源标识,根据所述次应用程序的预设资源标识,启动所述预设资源标识对应的预设资源,如此,在主应用程序的运行过程中可以确保相应的预设资源的加载运行。当然,上述的预设资源可以是通知栏中RemoteView和界面切换时执行切换动画资源,也可以是其他的需要由系统的服务端进行查找和加载的资源,本发明对此不作限定。
综上,本发明实施例通过在次应用程序安装时,为与次应用程序对应的主应用程序注册该主应用程序运行时的系统资源,当次应用程序运行时,下载并解析主应用程序的安装包,得到主应用程序的目标运行信息,根据主应用程序的目标运行信息将次应用程序的运行环境替换为主应用程序的运行环境,然后在主应用程序的运行环境下,根据上述注册的主应用程序运行时的系统资源运行主应用程序,从而在用户无感知的情况下,实现主应用程序的下载且无需安装即可动态加载主应用程序的代码和资源,平滑过渡运行主应用程序,达到了在不影响用户体验情况下的主应用程序的运行,且有效的避免了主应用程序运行时出现的ANR现象。
此外,本发明在提高应用程序下载量转化率,降低应用程序推广成本的同时,保证了完整的功能和产品体验,同时还不需要产品技术团队并行维护两个版本的应用程序,节省了大量的人力。
与上述几种实施例提供的应用程序运行方法相对应,本发明实施例还提供一种应用程序运行装置,由于本发明实施例提供的应用程序运行装置与上述几种实施例提供的应用程序运行方法相对应,因此前述应用程序运行方法的实施方式也适用于本实施例提供的应用程序运行装置,在本实施例中不再详细描述。
请参阅图4,其所示为本发明实施例提供的一种应用程序运行装置的结构示意图,如图4所示,该装置可以包括:
注册模块410,用于在次应用程序安装时,为所述次应用程序所对应的主应用程序注册所述主应用程序运行时的系统资源;
下载解析模块420,用于在所述次应用程序运行时,下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息;
替换模块430,用于根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境;
运行模块440,用于在所述主应用程序的运行环境下,根据注册的所述主应用程序运行时的系统资源运行所述主应用程序。
可选的,所述次应用程序的安装包中的应用配置信息包括第一应用配置信息和第二应用配置信息,所述第一应用配置信息与所述次应用程序的组件信息相对应,所述第二应用配置信息与所述主应用程序的组件信息相对应;
相应的,注册模块410具体可以用于在次应用程序安装时,根据所述第二应用配置信息为所述主应用程序的各组件注册运行时的系统资源。
可选的,如图5所示,下载解析模块420可以包括:
第一获取模块4210,用于获取所述主应用程序的安装包的下载地址;
下载模块4220,用于根据所述下载地址,获取所述主应用程序的安装包;
解析模块4230,用于解析所述主应用程序的安装包,得到所述主应用程序的运行信息;
预编译模块4240,用于对所述主应用程序的运行信息进行预编译,得到所述主应用程序的目标运行信息。
在一具体实施例中,如图6所示,下载解析模块420还可以包括:
第二获取模块4250,用于获取所述主应用程序的安装包的属性信息;
校验模块4260,用于根据所述属性信息对所述主应用程序的安装包进行校验。
在另一具体实施例中,如图7所示,下载解析模块420还可以包括:
判断模块4270,用于在所述次应用程序运行时,判断待加载的所述次应用程序的组件是否存在;
第三获取模块4280,用于在判断的结果为否时,获取预设替代组件;所述预设替代组件预先打包在所述次应用程序的安装包中;
运行子模块4290,用于运行所述预设替代组件。
在一具体实施例中,所述根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境包括:
再次运行所述次应用程序,根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境。
具体的,如图8所示,替换模块430可以包括:
第一替换子模块4310,用于根据所述目标运行信息创建所述主应用程序的类加载器,并将所述次应用程序的类加载器替换为所述主应用程序的类加载器;
第二替换子模块4320,用于根据所述目标运行信息创建所述主应用程序的资源对象,并将所述次应用程序的资源对象替换为所述主应用程序的资源对象;
第三替换子模块4330,用于根据所述目标运行信息创建所述主应用程序的入口对象,并将所述次应用程序的入口对象替换为所述主应用程序的入口对象。
可选的,如图9所示,运行模块440可以包括:
第四获取模块4410,用于在所述主应用程序运行时,获取所述主应用程序的预设资源标识;
第五获取模块4420,用于获取与所述主应用程序的预设资源标识相匹配的所述次应用程序的预设资源标识;
启动模块4430,用于根据所述次应用程序的预设资源标识,启动所述预设资源标识对应的预设资源。
需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
请参阅图10,其所示为本发明实施例提供的一种终端的结构示意图,该终端用于实施上述实施例中提供的应用程序运行方法。具体来讲:
终端1000可以包括RF(Radio Frequency,射频)电路1010、包括有一个或一个以上计算机可读存储介质的存储器1020、输入单元1030、显示单元1040、视频传感器1050、音频电路1060、WiFi(wireless fidelity,无线保真)模块1070、包括有一个或者一个以上处理核心的处理器1080、以及电源100等部件。本领域技术人员可以理解,图10中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路1010可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器1080处理;另外,将涉及上行的数据发送给基站。通常,RF电路1010包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、LNA(Low Noise Amplifier,低噪声放大器)、双工器等。此外,RF电路1010还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSM(Global System ofMobile communication,全球移动通讯系统)、GPRS(General Packet Radio Service,通用分组无线服务)、CDMA(Code Division Multiple Access,码分多址)、WCDMA(Wideband Code DivisionMultiple Access,宽带码分多址)、LTE(Long Term Evolution,长期演进)、电子邮件、SMS(Short Messaging Service,短消息服务)等。
存储器1020可用于存储软件程序以及模块,处理器1080通过运行存储在存储器1020的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器1020可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端1000的使用所创建的数据(比如视频数据、电话本等)等。此外,存储器1020可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器1020还可以包括存储器控制器,以提供处理器1080和输入单元1030对存储器1020的访问。
输入单元1030可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元1030可包括图像输入设备1031以及其他输入设备1032。图像输入设备1031可以是摄像头,也可以是光电扫描设备。除了图像输入设备1031,输入单元1030还可以包括其他输入设备1032。具体地,其他输入设备1032可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元1040可用于显示由用户输入的信息或提供给用户的信息以及终端1000的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元1040可包括显示面板1041,可选的,可以采用LCD(Liquid Crystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode,有机发光二极管)等形式来配置显示面板1041。
终端1000可包括至少一种视频传感器1050,视频传感器用于获取用户的视频信息。终端1000还可以包括其它传感器(未示出),比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1041的亮度,接近传感器可在终端1000移动到耳边时,关闭显示面板1041和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端1000还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
视频电路1060、扬声器1061,传声器1062可提供用户与终端1000之间的视频接口。音频电路1060可将接收到的音频数据转换后的电信号,传输到扬声器1061,由扬声器1061转换为声音信号输出;另一方面,传声器1062将收集的声音信号转换为电信号,由音频电路1060接收后转换为音频数据,再将音频数据输出处理器1080处理后,经RF电路1010以发送给比如另一终端,或者将音频数据输出至存储器1020以便进一步处理。音频电路1060还可能包括耳塞插孔,以提供外设耳机与终端1000的通信。
WiFi属于短距离无线传输技术,终端1000通过WiFi模块1070可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图10示出了WiFi模块1070,但是可以理解的是,其并不属于终端1000的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器1080是终端1000的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1020内的软件程序和/或模块,以及调用存储在存储器1020内的数据,执行终端1000的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1080可包括一个或多个处理核心;优选的,处理器1080可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1080中。
终端1000还包括给各个部件供电的电源100(比如电池),优选的,电源可以通过电源管理系统与处理器1080逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源100还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端1000还可以包括蓝牙模块等,在此不再赘述。
具体在本实施例中,终端1000还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行。上述一个或者一个以上程序包含用于执行上述方法实施例提供的应用程序运行方法的指令。
本发明的实施例还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器,所述存储介质可设置于终端之中以保存用于实现方法实施例中的一种音效调节方法相关的至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或指令集可由终端的处理器加载并执行以实现上述方法实施例提供的应用程序运行方法。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种应用程序运行方法,其特征在于,所述方法包括:
在次应用程序安装时,通过所述次应用程序的安装包中的应用配置信息为所述次应用程序所对应的主应用程序注册所述主应用程序运行时的系统资源;所述主应用程序和所述次应用程序为同一应用程序的不同版本;
当所述次应用程序运行时,下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息;
根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境;
在所述主应用程序的运行环境下,根据注册的所述主应用程序运行时的系统资源运行所述主应用程序。
2.根据权利要求1所述的应用程序运行方法,其特征在于,所述次应用程序的安装包中的应用配置信息包括第一应用配置信息和第二应用配置信息,所述第一应用配置信息与所述次应用程序的组件信息相对应,所述第二应用配置信息与所述主应用程序的组件信息相对应;
相应的,在次应用程序安装时,为所述次应用程序所对应的主应用程序注册所述主应用程序运行时的系统资源包括:
在次应用程序安装时,根据所述第二应用配置信息为所述主应用程序的各组件注册运行时的系统资源。
3.根据权利要求1所述的应用程序运行方法,其特征在于,所述下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息包括:
获取所述主应用程序的安装包的下载地址;
根据所述下载地址,获取所述主应用程序的安装包;
解析所述主应用程序的安装包,得到所述主应用程序的运行信息;
对所述主应用程序的运行信息进行预编译,得到所述主应用程序的目标运行信息。
4.根据权利要求3所述的应用程序运行方法,其特征在于,在解析所述主应用程序的安装包,得到所述主应用程序的运行信息之前,所述方法还包括:
获取所述主应用程序的安装包的属性信息;
根据所述属性信息对所述主应用程序的安装包进行校验;
在校验通过时,执行所述解析所述主应用程序的安装包的步骤。
5.根据权利要求1所述的应用程序运行方法,其特征在于,所述根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境包括:
再次运行所述次应用程序,根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境。
6.根据权利要求5所述的应用程序运行方法,其特征在于,所述根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境包括:
根据所述目标运行信息创建所述主应用程序的类加载器,并将所述次应用程序的类加载器替换为所述主应用程序的类加载器;
根据所述目标运行信息创建所述主应用程序的资源对象,并将所述次应用程序的资源对象替换为所述主应用程序的资源对象;
根据所述目标运行信息创建所述主应用程序的入口对象,并将所述次应用程序的入口对象替换为所述主应用程序的入口对象。
7.根据权利要求1所述的应用程序运行方法,其特征在于,所述方法还包括:
在所述主应用程序运行时,获取所述主应用程序的预设资源标识;
获取与所述主应用程序的预设资源标识相匹配的所述次应用程序的预设资源标识;
根据所述次应用程序的预设资源标识,启动所述预设资源标识对应的预设资源。
8.根据权利要求1所述的应用程序运行方法,其特征在于,所述方法还包括:
在所述次应用程序运行时,判断待加载的所述次应用程序的组件是否存在;
在判断的结果为否时,获取预设替代组件;所述预设替代组件预先打包在所述次应用程序的安装包中;
运行所述预设替代组件。
9.一种应用程序运行装置,其特征在于,所述装置包括:
注册模块,用于在次应用程序安装时,通过所述次应用程序的安装包中的应用配置信息为所述次应用程序所对应的主应用程序注册所述主应用程序运行时的系统资源;所述主应用程序和所述次应用程序为同一应用程序的不同版本;
下载解析模块,用于在所述次应用程序运行时,下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息;
替换模块,用于根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境;
运行模块,用于在所述主应用程序的运行环境下,根据注册的所述主应用程序运行时的系统资源运行所述主应用程序。
10.一种终端,其特征在于,包括处理器和存储装置;
所述存储装置,用于存储计算机程序指令;
所述处理器,调用所述计算机程序指令,用于在次应用程序安装时,通过所述次应用程序的安装包中的应用配置信息为所述次应用程序所对应的主应用程序注册所述主应用程序运行时的系统资源;所述主应用程序和所述次应用程序为同一应用程序的不同版本;
当所述次应用程序运行时,下载并解析所述主应用程序的安装包,得到所述主应用程序的目标运行信息;
根据所述主应用程序的目标运行信息,将所述次应用程序的运行环境替换为所述主应用程序的运行环境;
在所述主应用程序的运行环境下,根据注册的所述主应用程序运行时的系统资源运行所述主应用程序。
11.一种计算机可读存储介质,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行以实现权利要求1-8中任一项所述的应用程序运行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910034073.5A CN109800030B (zh) | 2019-01-14 | 2019-01-14 | 一种应用程序运行方法、装置及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910034073.5A CN109800030B (zh) | 2019-01-14 | 2019-01-14 | 一种应用程序运行方法、装置及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109800030A CN109800030A (zh) | 2019-05-24 |
CN109800030B true CN109800030B (zh) | 2021-07-16 |
Family
ID=66558914
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910034073.5A Active CN109800030B (zh) | 2019-01-14 | 2019-01-14 | 一种应用程序运行方法、装置及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109800030B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112379936A (zh) * | 2019-07-29 | 2021-02-19 | 阿里巴巴集团控股有限公司 | 用于终端设备运行应用程序的方法、装置、设备及介质 |
CN111414308B (zh) * | 2020-03-26 | 2023-08-22 | 抖音视界有限公司 | 应用程序包的处理方法和应用程序的运行方法、装置 |
CN112083935A (zh) * | 2020-08-26 | 2020-12-15 | 武汉普利商用机器有限公司 | 一种安卓平台的程序卸载方法及装置 |
CN112083928A (zh) * | 2020-08-31 | 2020-12-15 | 广州新视展投资咨询有限公司 | 应用程序安装包的构建方法、应用程序运行方法及装置 |
CN112988266B (zh) * | 2021-02-10 | 2024-04-19 | 北京奇艺世纪科技有限公司 | 一种资源管理方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105094922A (zh) * | 2015-08-17 | 2015-11-25 | 北京奇虎科技有限公司 | 应用程序免安装运行控制方法及其装置 |
CN106775879A (zh) * | 2016-12-22 | 2017-05-31 | 福建天泉教育科技有限公司 | 基于安卓系统客户端的vr应用免安装方法及其系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814032A (zh) * | 2010-02-08 | 2010-08-25 | 河南大学 | 利用Delphi资源文件生成Windows应用程序的资源封装方法 |
GB2528679A (en) * | 2014-07-28 | 2016-02-03 | Ibm | Software discovery in an environment with heterogeneous machine groups |
-
2019
- 2019-01-14 CN CN201910034073.5A patent/CN109800030B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105094922A (zh) * | 2015-08-17 | 2015-11-25 | 北京奇虎科技有限公司 | 应用程序免安装运行控制方法及其装置 |
CN106775879A (zh) * | 2016-12-22 | 2017-05-31 | 福建天泉教育科技有限公司 | 基于安卓系统客户端的vr应用免安装方法及其系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109800030A (zh) | 2019-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109800030B (zh) | 一种应用程序运行方法、装置及终端 | |
CN106970790B (zh) | 一种应用程序创建的方法、相关设备及系统 | |
CN108536594B (zh) | 页面测试方法、装置及存储设备 | |
CN109408136B (zh) | 信息处理方法、装置、存储介质及电子设备 | |
CN108241500B (zh) | 一种硬件组件的修复方法、装置、系统和存储介质 | |
CN107741844B (zh) | 一种应用安装包的生成方法和装置 | |
US20150163232A1 (en) | Method, device and system for detecting malware in a mobile terminal | |
CN112882772B (zh) | 移动终端应用界面的配置方法、移动终端及存储介质 | |
CN106502703B (zh) | 一种函数调用方法和装置 | |
CN109857403B (zh) | 一种页面更新、页面处理方法及装置 | |
CN109933381B (zh) | 一种内核的加载方法及装置 | |
CN106713608B (zh) | 应用的功能状态修改方法、装置及终端 | |
WO2021027772A1 (zh) | 一种应用切换运行的方法及设备 | |
CN110489679B (zh) | 一种浏览器内核的处理方法、装置及存储介质 | |
CN108182090B (zh) | 基于blink内核的Flash插件加载方法及装置 | |
CN112965832B (zh) | 一种远程过程调用rpc服务调用方法和相关装置 | |
US9928134B2 (en) | Method and apparatus for repairing dynamic link library file | |
CN112328304B (zh) | 一种脚本适配方法、系统、设备及计算机存储介质 | |
CN109145598B (zh) | 脚本文件的病毒检测方法、装置、终端及存储介质 | |
CN106708501A (zh) | 活动监控方法及装置 | |
US20220292141A1 (en) | Quick Application Startup Method and Related Apparatus | |
CN110032394B (zh) | 一种无源码文件的分析方法、装置和存储介质 | |
CN110309454B (zh) | 一种界面显示方法、装置、设备及存储介质 | |
CN108984375B (zh) | 一种内容抓取方法、装置、系统以及存储介质 | |
CN108549552B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |