应用程序的运行方法和装置
技术领域
本申请涉及互联网技术领域,尤其涉及一种应用程序的运行方法和装置。
背景技术
在智能化时代,用户使用的应用程序(APP)越来越多,在应用程序运行之前需要先下载安装应用程序。目前应用程序的安装包通常会比较大,例如,100M左右。用户从应用商店下载安装包时,就会占用终端较大的磁盘空间,另外,还会耗费较大的下载流量和下载时间,这些都会增加资源开销。
发明内容
本申请旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本申请的一个目的在于提出一种应用程序的运行方法,该方法可以减小应用程序安装包的大小,从而降低资源开销。
本申请的另一个目的在于提出一种应用程序的运行装置。
为达到上述目的,本申请第一方面实施例提出的应用程序的运行方法,包括:根据应用程序的原始文件,生成类描述文件,并将所述类描述文件放入安装包内,所述类描述文件是用于描述类的文本文件,所述类描述文件的大小小于对应的类的大小;在用户需要运行所述应用程序之前,下载所述安装包;在运行所述应用程序时,从所述安装包内获取所述类描述文件,并根据所述类描述文件生成类。
本申请第一方面实施例提出的应用程序的运行方法,通过在安装包内包含类描述文件,类描述文件的大小是小于类的,因此,相对于现有直接在安装包中包含类的方式,通过在安装包内包含类描述文件,可以减少应用程序安装包的大小,从而降低资源开销。
为达到上述目的,本申请第二方面实施例提出的应用程序的运行装置,包括:生成模块,用于根据应用程序的原始文件,生成类描述文件,并将所述类描述文件放入安装包内,所述类描述文件是用于描述类的文本文件,所述类描述文件的大小小于对应的类的大小;下载模块,用于在用户需要运行所述应用程序之前,下载所述安装包;运行模块,用于在运行所述应用程序时,从所述安装包内获取所述类描述文件,并根据所述类描述文件生成类。
本申请第二方面实施例提出的应用程序的运行装置,通过在安装包内包含类描述文件,类描述文件的大小是小于类的,因此,相对于现有直接在安装包中包含类的方式,通过在安装包内包含类描述文件,可以减少应用程序安装包的大小,从而降低资源开销。
本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1是本申请一实施例提出的应用程序的运行方法的流程示意图;
图2是现有技术中应用程序的运行方法的示意图;
图3是本申请另一实施例提出的应用程序的运行方法的流程示意图;
图4是本申请实施例中根据类描述文件生成类的流程示意图;
图5是本申请另一实施例提出的应用程序的运行装置的结构示意图;
图6是本申请另一实施例提出的应用程序的运行装置的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的模块或具有相同或类似功能的模块。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能理解为对本申请的限制。相反,本申请的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
图1是本申请一实施例提出的应用程序的运行方法的流程示意图,该方法包括:
S11:根据应用程序的原始文件,生成类描述文件,并将所述类描述文件放入安装包内,所述类描述文件是用于描述类的文本文件,所述类描述文件的大小小于对应的类的大小。
其中,原始文件例如包括:头文件(.h文件)和源文件(.m文件)。
类描述文件是一种文本文件,用于描述类的相关信息,类是计算机编程中的一种基本信息。类描述文件的大小是小于对应的类的大小的。
例如,一种类名(className)叫收银员(MERCHANTAPPOperator),收银员有类描述信息(classDescription),类描述信息例如包含属性描述信息,属性描述信息例如包括:收银员id(operatorId),收银员名字(operatorName),收银员所在店铺名(shopName)等。
以ios系统为例,可以采用预先编写的脚本,从原始文件转换为类描述文件(.plist文件)。其中,类描述文件中所需的内容可以在原始文件中找到,只是原始文件和类描述文件具有不同的格式,因此,可以预先编写脚本以实现原始文件与类描述文件之间的转换。
另外,在生成类描述文件后,可以将其保存在预设目录下,预设目录例如是resource bundle。
在生成类描述文件后,可以将其放入安装包内,以供用户下载安装。
一些实施例中,参见图2,所述根据应用程序的原始文件,生成类描述文件,并将所述类描述文件放入安装包内,包括:
S111:根据头文件和源文件生成类描述文件。
生成流程可以参见上述相关描述,在此不再赘述。
S112:删除源文件。
S113:在删除源文件后,将头文件和类描述文件放入安装包内,以供用户下载所述安装包。
由于类描述文件和头文件都比较小,上述得到的安装包也比较小,用户可以直接在应用商店下载上述的安装包。
可选的,为了进一步降低安装包的大小,在得到上述的安装包后,还可以对该安装包进行压缩,例如,在将头文件和类描述文件放入安装包后,该方法还可以包括:
S114:对安装包进行压缩,以供用户下载压缩后的安装包。
例如,在应用商店内呈现的是压缩后的安装包,用户可以下载压缩后的安装包。
S12:在用户需要运行应用程序之前,下载所述安装包。
例如,用户可以从应用商店下载应用程序的安装包,该安装包内包含类描述文件。
为了更好的区分本申请与现有技术,如图3所示,给出了现有技术中运行应用程序的流程示意图,参见图3,现有技术中,在生成安装包时,需要先根据源文件编译生成中间文件(.o文件)(S31),再根据中间文件链接打包生成安装包(S32),以ios系统为例,安装包可以称为ipa包。其中,经过编译和链接打包后,ipa包中会包含应用程序对应的类。之后,可以将ipa放在应用商店中供用户下载,用户下载后,会先将ipa包下载保存到终端的磁盘上(S33),当需要运行应用程序时,将ipa包从磁盘中读取到终端的内存中并运行(S34),从而实现应用程序的正常运行。通常ipa是比较大的,因此不论是在下载还是在保存时都需要消耗较大的资源。
与现有技术不同的是,本实施例中不需要对原始文件进行编译和链接打包,而是采用类描述文件,类描述文件是一种文本文件,相对于现有的ipa包,类描述文件的大小是很小的,从而可以降低下载以及保存时所需的资源。
S13:在运行所述应用程序时,从所述安装包内获取所述类描述文件,并根据所述类描述文件生成类。
在下载的安装包是压缩后的安装包时,在使用安装包时,可以先对安装包进行解压缩,以获取类描述文件等信息。在下载的安装包是未压缩的,则可以直接从安装包中获取类描述文件等信息。
为了保证应用程序的正常运行,需要生成应用程序所包含的类。现有技术中,通过对源文件编译和打包可以生成类,从而使得保存在磁盘中的ipa包中包含类,在运行应用程序时,可以直接从磁盘中获取类以实现应用程序的正常运行。
本实施例中,由于为了减小安装包的大小,在安装包中包含的是类描述文件,而不是类,为了保证应用程序的正常运行,需要先根据类描述文件生成类。
例如,用户在下载安装包后,可以将安装包保存在终端的磁盘上,在运行应用程序时,可以从磁盘上获取安装包内的类描述文件,将类描述文件读取到内存中,在内存中根据类描述文件生成类。
一些实施例中,参见图4,根据类描述文件生成类的流程可以包括:
S41:根据类描述文件获取类名、父类名和属性。
例如,类描述文件中包含待生成的类的类名和属性描述信息,如,类名(className)是收银员(MERCHANTAPPOperator),属性描述信息包括:收银员id(operatorId),收银员名字(operatorName),收银员所在店铺名(shopName)等。因此,可以从类描述文件中获取类名和属性描述信息。
在获取属性描述信息后,可以根据属性描述信息创建属性,例如,可以直接根据属性描述信息创建属性变量(ivar)、访问器(property)和指针(IMP)。
如果类描述文件中包含类名对应的父类名,则可以直接从类描述文件中获取父类名,如果类描述文件中不包含类名对应的父类名,则可以根据父类名的创建规则,根据类名创建并返回父类名,从而得到父类名。
S42:根据所述类名、父类名和属性,采用ios runtime技术提供的方法,生成类。
ios runtime(运行时)提供了多种方法可以创建类,例如,一种方法是:
objc_allocateClassPair(Class superclass,const char*name,size_textraBytes)
说明:第一个参数superclass是父类的类对象,第二个name是类名,第三个是额外分配字节,通常为0。
该方法的上述参数中用到了父类名和类名,另外,该方法在运行时会用到属性,从而可以根据父类名、类名和属性采用上述方法创建类。
本实施例中,通过在安装包内包含类描述文件,类描述文件的大小是小于类的,因此,相对于现有直接在安装包中包含类的方式,通过在安装包内包含类描述文件,可以减少应用程序安装包的大小,从而降低资源开销。
图5是本申请另一实施例提出的应用程序的运行装置的结构示意图,该装置50包括:生成模块51,下载模块52和运行模块53。
生成模块51,用于根据应用程序的原始文件,生成类描述文件,并将所述类描述文件放入安装包内,所述类描述文件是用于描述类的文本文件,所述类描述文件的大小小于对应的类的大小;
其中,原始文件例如包括:头文件(.h文件)和源文件(.m文件)。
类描述文件是一种文本文件,用于描述类的相关信息,类是计算机编程中的一种基本信息。类描述文件的大小是小于对应的类的大小的。
例如,一种类名(className)叫收银员(MERCHANTAPPOperator),收银员有类描述信息(classDescription),类描述信息例如包含属性描述信息,属性描述信息例如包括:收银员id(operatorId),收银员名字(operatorName),收银员所在店铺名(shopName)等。
可选的,所述生成模块用于根据应用程序的原始文件,生成类描述文件,包括:
根据预设的脚本进行格式转换,将应用程序的原始文件转换为类描述文件。
以ios系统为例,可以采用预先编写的脚本,从原始文件转换为类描述文件(.plist文件)。其中,类描述文件中所需的内容可以在原始文件中找到,只是原始文件和类描述文件具有不同的格式,因此,可以预先编写脚本以实现原始文件与类描述文件之间的转换。
另外,在生成类描述文件后,可以将其保存在预设目录下,预设目录例如是resource bundle。
在生成类描述文件后,可以将其放入安装包内,以供用户下载安装。
一些实施例中,参见图6,生成模块51包括:
第一单元511,用于根据所述头文件和所述源文件生成类描述文件;
生成流程可以参见上述相关描述,在此不再赘述。
第二单元512,用于删除源文件;
第三单元513,用于在删除源文件后,将所述头文件和所述类描述文件放入安装包内,以供用户下载所述安装包。
由于类描述文件和头文件都比较小,上述得到的安装包也比较小,用户可以直接在应用商店下载上述的安装包。
可选的,所述生成模块51还包括:
第四单元514,用于对安装包进行压缩,以供用户下载压缩后的安装包。
为了进一步降低安装包的大小,在得到上述的安装包后,还可以对该安装包进行压缩。
例如,在应用商店内呈现的是压缩后的安装包,用户可以下载压缩后的安装包。
下载模块52,用于在用户需要运行所述应用程序之前,下载所述安装包;
例如,用户可以从应用商店下载应用程序的安装包,该安装包内包含类描述文件。
与现有技术不同的是,本实施例中不需要对原始文件进行编译和链接打包,而是采用类描述文件,类描述文件是一种文本文件,相对于现有的ipa包,类描述文件的大小是很小的,从而可以降低下载以及保存时所需的资源。
运行模块53,用于在运行所述应用程序时,从所述安装包内获取所述类描述文件,并根据所述类描述文件生成类。
在下载的安装包是压缩后的安装包时,在使用安装包时,可以先对安装包进行解压缩,以获取类描述文件等信息。在下载的安装包是未压缩的,则可以直接从安装包中获取类描述文件等信息。
为了保证应用程序的正常运行,需要生成应用程序所包含的类。现有技术中,通过对源文件编译和打包可以生成类,从而使得保存在磁盘中的ipa包中包含类,在运行应用程序时,可以直接从磁盘中获取类以实现应用程序的正常运行。
本实施例中,由于为了减小安装包的大小,在安装包中包含的是类描述文件,而不是类,为了保证应用程序的正常运行,需要先根据类描述文件生成类。
例如,用户在下载安装包后,可以将安装包保存在终端的磁盘上,在运行应用程序时,可以从磁盘上获取安装包内的类描述文件,将类描述文件读取到内存中,在内存中根据类描述文件生成类。
一些实施例中,所述运行模块53用于根据所述类描述文件生成类,包括:
根据类描述文件获取类名、父类名和属性;
根据所述类名、父类名和属性,采用ios运行时runtime技术提供的方法,生成类。
例如,类描述文件中包含待生成的类的类名和属性描述信息,如,类名(className)是收银员(MERCHANTAPPOperator),属性描述信息包括:收银员id(operatorId),收银员名字(operatorName),收银员所在店铺名(shopName)等。因此,可以从类描述文件中获取类名和属性描述信息。
在获取属性描述信息后,可以根据属性描述信息创建属性,例如,可以直接根据属性描述信息创建属性变量(ivar)、访问器(property)和指针(IMP)。
如果类描述文件中包含类名对应的父类名,则可以直接从类描述文件中获取父类名,如果类描述文件中不包含类名对应的父类名,则可以根据父类名的创建规则,根据类名创建并返回父类名,从而得到父类名。
ios runtime(运行时)提供了多种方法可以创建类,例如,一种方法是:
objc_allocateClassPair(Class superclass,const char*name,size_textraBytes)
说明:第一个参数superclass是父类的类对象,第二个name是类名,第三个是额外分配字节,通常为0。
该方法的上述参数中用到了父类名和类名,另外,该方法在运行时会用到属性,从而可以根据父类名、类名和属性采用上述方法创建类。
本实施例中,通过在安装包内包含类描述文件,类描述文件的大小是小于类的,因此,相对于现有直接在安装包中包含类的方式,通过在安装包内包含类描述文件,可以减少应用程序安装包的大小,从而降低资源开销。
需要说明的是,在本申请的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本申请的描述中,除非另有说明,“多个”的含义是指至少两个。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。