一种应用程序安装包生成方法及装置
技术领域
本发明属于软件技术领域,尤其涉及一种应用程序安装包生成方法及装置。
背景技术
随着智能终端飞速发展,基于智能终端的各类应用程序(Application,APP)应运而生。
随着各类APP不断增多,APP推广显得日益重要,常见的APP推广方式是通过广告投放,例如,在网页或其它APP中投放某一APP产品的广告。为了使广告带来大量的用户,让更多的用户使用该APP产品,投放的广告中均包含APP安装包(例如,Android安装包,APK)的下载链接,利用该下载链接直接从网页下载APP安装包。
但是,从网页下载APP安装包并安装的过程中,发送APP安装包下载请求的网页信息无法传递到APP内,即哪个页面发起的APP安装包的下载请求无法传递到APP内,导致APP下载请求的来源追踪失败。
发明内容
有鉴于此,本发明的目的在于提供一种安装包生成方法及装置,以解决APP安装包无法包含下载请求的来源问题,其公开的技术方案如下:
第一方面,本发明公开了一种应用程序安装包生成方法应用于服务器,所述方法包括:
当接收到来自网页的下载请求后,获取目标应用程序的原始APK文件,其中,所述下载请求用于请求下载目标应用程序的安装包;
解析所述原始APK文件获得APK签名块;
在所述APK签名块中添加所述下载请求对应的渠道信息,得到新的APK签名块;
基于所述新的APK签名块及所述原始APK文件,生成所述目标应用程序的目标APK文件。
可选地,所述当接收到来自网页的下载请求后,获取目标应用程序的原始APK文件,包括:
解析所述下载请求获得所述目标应用程序的标识信息;
依据所述标识信息获取所述目标应用程序的原始APK文件。
可选地,所述解析所述原始APK文件,获得APK签名块,包括:
解析所述原始APK文件获得中央目录字段的起始位置;
解析所述原始APK文件中的APK签名块长度字段,得到所述APK签名块的位置;
依据所述APK签名块的位置获得所述APK签名块。
可选地,所述在所述APK签名块的内容中添加所述下载请求对应的渠道信息,得到新的APK签名块,包括:
确定所述APK签名块中的自定义信息字段的位置;
在所述自定义信息字段添加自定义ID-值对序列;
在所述自定义ID-值对序列中“值”对应的字段中添加所述下载请求对应的渠道信息,得到新的APK签名块。
可选地,所述基于所述新的APK签名块及所述原始APK文件,生成所述目标应用程序的目标APK文件,包括:
将所述原始APK文件中APK签名块的内容替换为所述新的APK签名块的内容;
基于所述新的APK签名块占用的字节数,修改所述APK文件中的中央目录偏移量,得到所述目标应用程序的目标APK文件。
可选地,所述方法还包括:
生成所述目标应用程序的目标APK文件下载链接;
响应所述下载请求,返回所述下载链接。
第二方面,本发明公开了一种应用程序安装包生成装置,应用于服务器,所述装置包括:
第一获取单元,用于当接收到来自网页的下载请求后,获取所述目标应用程序的原始APK文件,其中,所述下载请求用于请求下载目标应用程序的安装包;
解析单元,用于解析所述原始APK文件获得APK签名块;
第二获取单元,用于在所述APK签名块中添加所述下载请求对应的渠道信息,得到新的APK签名块;
第一生成单元,用于基于所述新的APK签名块及所述原始APK文件,生成所述目标应用程序的目标APK文件。
可选地,所述第一获取单元,包括:
第一解析模块,用于解析所述下载请求获得所述目标应用程序的标识信息;
第一获取模块,用于依据所述标识信息获取所述目标应用程序的原始APK文件。
可选地,所述解析单元,包括:
第二解析模块,用于解析所述原始APK文件获得中央目录字段的起始位置;
第三解析模块,用于解析所述原始APK文件中的APK签名块长度字段,得到所述APK签名块的位置;
第二获取模块,用于依据所述APK签名块的位置获得所述APK签名块。
可选地,所述第二获取单元,包括:
确定模块,用于确定所述APK签名块中的自定义信息字段的位置;
添加模块,用于在所述自定义信息字段添加自定义ID-值对序列;
第三获取模块,用于在所述自定义ID-值对序列中“值”对应的字段中添加所述下载请求对应的渠道信息,得到新的APK签名块。
本发明提供的应用程序安装包生成方法,在接收到来自网页的APK文件的下载请求后,获得与该下载请求相匹配的目标APP的原始APK文件。然后,解析该原始APK文件得到APK签名块,并在该APK签名块中添加该下载请求对应的渠道信息得到新的APK签名块;最后,基于新的APK签名块及原始APK文件生成目标APP的目标APK文件。该方法利用APK文件的APK签名特点,在APK签名块中增加渠道信息,不影响APK文件的签名校验,实现了在采用V2签名原理的APK文件中增加渠道信息,以方便下一步分析APP下载渠道信息。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例公开的一种应用程序安装包生成方法的流程示意图;
图2为本发明实施例公开的APK文件的结构示意图;
图3为本发明实施例公开的APK签名块的结构示意图;
图4为本发明实施例公开的web客户端和服务器之间的应用程序安装包生成的交互过程的流程示意图;
图5为本发明实施例公开的一种应用程序安装包生成装置的结构示意图;
图6为本发明实施例公开的另一种应用程序安装包生成装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
背景技术中,从网页下载APP安装包并安装的过程中,发送APP安装包下载请求的网页信息无法传递到APP内,即哪个页面发起的APP安装包的下载请求无法传递到APP内,导致APP下载请求的来源追踪失败。
以APK文件为例,为了解决无法在APK文件中添加相应的渠道信息的技术问题,现有技术提供了基于V1签名技术的APK打包方案,APK文件本质是一个ZIP压缩包,而ZIP格式是固定的,主要包括三部分,第一部分是内容块,所有的压缩文件都存储在内容块中且该内容块包含了ZIP中所有文件的记录。第二部分是中央目录,用于存放目录信息。最后一部分是中央目录结尾记录,主要记录中央目录大小、偏移量和ZIP注释信息等。V1签名只校验第一部分的所有压缩文件,不校验后两部分(即中央目录和中央目录结尾记录)的内容。因此,基于V1签名的APK打包方案是将渠道信息写入中央目录结尾记录中,这样,不需要解压缩APK文件不需要重新签名,只需在中央目录结尾记录中的注释字段中添加渠道信息,耗时短且不影响V1签名校验。
但是,在Android7.0之后新增加了V2签名,V2签名会校验整个APK文件的数据摘要,导致上述V1签名打包方案失败。发明人在研究本发明方案的过程中发现:与V1签名的APK文件相比,V2签名的APK文件增加了APK签名块,即基于V2签名的APK文件包括四部分,第一部分是内容块、第二部分是APK签名块、第三部分是中央目录,第四部分是中央目录结尾记录。APK签名块作用是保护第一、三、四部分的完整性,以及保护APK签名块中的具体签名数据的完整性,并不关注APK签名块中的其它内容。因此,本发明提供了一种应用程序安装包生成方法及装置,该方法在APK签名块中添加渠道信息,得到基于V2签名的APK文件,该方案支持Android7.0以上版本新增的V2签名,同时具有基于V1签名的APK打包方案的所有优点。
如图1所示,为本发明实施例公开的一种应用程序安装包生成方法的流程示意图,该方法应用于服务器上,该方法具体可以包括如下步骤:
S101:当接收到来自网页的下载请求后,获取所述目标应用程序的原始APK文件,其中,所述下载请求用于请求下载目标应用程序的安装包。
在执行S101的过程中,以web客户端为例,用户通过web客户端向服务器发送下载请求,该服务器接收到该下载请求后获取目标应用程序的原始APK文件。
需要说明的是,每一个版本的APP具有一个唯一标识,且下载请求中携带目标APP的标识信息。因此,服务器解析下载请求获得目标APP的唯一标识,并依据该唯一标识获得目标APP的原始APK文件。
S102:解析所述原始APK文件获得APK签名块。
需要说明的是,APK文件本质是一个ZIP压缩包,ZIP压缩包主要包括内容块(Contents of ZIP entries)、中央目录(Central Directory)和中央目录结尾记录(Endof Central Directory,EOCD)构成。
如图2所示,基于V2签名技术的APK文件包括:内容块、中央目录、APK签名块和中央目录结尾记录。与V1签名方案相比,V2签名为保证数据完整性,在内容块和中央目录之间插入一个APK签名块,从而保证了原始ZIP数据的完整性。
中央目录存放着目录信息,每个中央目录的文件头主要记录了压缩算法、注释信息、本地文件头的起始偏移量等,方便快速定位数据。
中央目录结尾记录包含中央目录条目数、中央目录size、中央目录起始偏移量、ZIP文件注释内容等。通过中央目录的起始偏移量和size即可定位到中央目录。
APK签名块包含了分块长度(size of block)、ID-值对序列、自定义信息和魔数。
其中,自定义信息不是必须包含的字段,可以根据实际需求选择是否包含该字段。
魔数用于定位APK签名块的位置,该魔数字段为固定值0X7109871a。
结合上述的基于V2签名的APK文件的结构,解析原始APK文件获得APK签名块的过程如下:
在该原始APK文件末尾查找ZIP中央目录结尾记录,然后从该ZIP中央目录结尾记录中读取中央目录的起始偏移量,通过魔数可以快速确定中央目录前面可能是APK签名块,最后通过APK签名块的长度字段(Size of block)值可以高效地找到APK签名块在文件中的起始位置。
S103:在所述APK签名块中添加所述下载请求对应的渠道信息,得到新的APK签名块。
如图3所示,APK签名块主要包括分块长度、ID-值对序列分块长度、自定义信息、分块长度、魔数。其中,两个分块长度字段的内容相同,而且,ID-值对序列中包含一个长度前缀。
两个分块长度字段均为8字节的64位无符号整型数据,用于指示该APK签名块的长度。
ID-值对序列字段包括ID-值对长度字段、ID字段和Value字段,其中ID-值对长度是8字节;ID字段的长度是4字节该ID为0X7109871a;该ID对应的Value中存储签名数据,存储签名数据的字段的长度可变。
自定义信息字段用于存储任何辅助信息。
魔数字段的长度为16字节。
由于V2签名方案只验证ID为0X7109871a对应ID-值对序列的签名数据。不验证APK签名块中的其它信息,所以,可以在APK签名块的自定义信息字段中添加一个渠道信息得到新的APK签名块。
在本发明的一个实施例中,可以在APK签名块的自定义信息字段添加一个自定义ID-值序列,该自定义ID-值对序列包含ID-值对序列的长度、ID和value,其中,ID-值对的长度为8字节;ID字段为32位无符号整型数据,即4字节;value为可变长度,该Value中存储添加的渠道信息。
需要说明的是,可以在APK签名块的自定义信息中添加任何辅助信息。
S104:基于所述新的APK签名块及所述原始APK文件,生成所述目标应用程序的目标APK文件。
在本发明的一个实施例中,将原始APK文件中APK签名块的内容替换为新的APK签名块的内容,基于该新的APK签名块占用的字节数,修改该APK文件中的中央目录偏移量(即,EOCD的中央目录偏移量),得到该目标应用程序的目标APK文件。
由于在自定义字段添加了渠道信息,所以需要修改EOCD的中央目录偏移量,修改EOCD的中央目录偏移量不会导致数据摘要校验失败。
本发明实施例提供的一种应用程序安装包生成方法,在接收到来自网页的APK文件的下载请求后,获得与该下载请求相匹配的目标APP的原始APK文件。然后,解析该原始APK文件得到APK签名块,并在该APK签名块中添加该下载请求对应的渠道信息得到新的APK签名块,最后,基于新的APK签名块及原始APK文件生成目标APP的目标APK文件。该方法利用APK文件的APK签名特点,在APK签名块中增加渠道信息,不影响APK文件的签名校验,实现了在采用V2签名原理的APK文件中增加渠道信息,以方便下一步分析APP下载渠道信息。
如图4所示,为本发明实施例公开的web客户端和服务器之间的应用程序安装包生成的交互过程的流程示意图,具体包括如下步骤:
S401:web客户端发送请求下载目标应用程序的安装包的下载请求至服务器。
S402:所述服务器响应所述下载请求,获取所述目标应用程序的原始APK文件。
S403:所述服务器解析所述原始APK文件获得APK签名块。
S404:所述服务器在所述APK签名块中添加所述下载请求对应的渠道信息,得到新的APK签名块。
S405:所述服务器基于所述新的APK签名块及所述原始APK文件,生成所述目标应用程序的目标APK文件。
S406:所述服务器生成所述目标应用程序的目标APK文件的下载链接。
S407:所述服务器响应所述web客户端发送的所述下载请求,并将所述下载链接发送至所述web客户端。
S408:所述web客户端根据所述下载链接下载所述目标APK文件并安装。
需要说明的是,web客户端安装目标APK文件之后,可以将该目标APK文件中的渠道信息上传至收集渠道信息的服务器中。
本发明实施例的应用长须安装包生成方法,利用APK文件的APK签名特点,在APK签名块中增加渠道信息,不影响APK文件的签名校验,实现了在采用V2签名原理的APK文件中增加渠道信息,发送给web客户端,web客户端在安装携带渠道信息的APK文件后,以方便下一步分析APP下载渠道信息。
基于图1的公开的一种应用程序安装包生成方法,本发明实施例还对应公开了一种应用程序安装包生成装置,应用于服务器,其结构示意图如图5所示,具体包括:
第一获取单元501,用于当接收到来自网页的下载请求后,获取目标应用程序的原始APK文件,其中,所述下载请求用于请求下载目标应用程序的安装包。
进一步的,所述第一获取单元501,包括:
第一解析模块,用于解析所述下载请求获得所述目标应用程序的标识信息。
第一获取模块,用于依据所述标识信息获取所述目标应用程序的原始APK文件。
解析单元502,用于解析所述原始APK文件获得APK签名块。
进一步的,所述解析单元502,包括:
第二解析模块,用于解析所述原始APK文件获得中央目录字段的起始位置。
第三解析模块,用于解析所述原始APK文件中的APK签名块长度字段,得到所述APK签名块的位置。
第二获取模块,用于依据所述APK签名块的位置获得所述APK签名块。
第二获取单元503,用于在所述APK签名块中添加所述下载请求对应的渠道信息,得到新的APK签名块。
进一步的,所述第二获取单元503,包括:
确定模块,用于确定所述APK签名块中的自定义信息字段的位置。
添加模块,用于在所述自定义信息字段添加自定义ID-值对序列。
第三获取模块,用于在所述自定义ID-值对序列中“值”对应的字段中添加所述下载请求对应的渠道信息,得到新的APK签名块。
第一生成单元504,用于基于所述新的APK签名块及所述原始APK文件,生成所述目标应用程序的目标APK文件。
进一步的,所述第一生成单元504,包括:
替换模块,用于将所述原始APK文件中APK签名块的内容替换为所述新的APK签名块的内容。
第四获取模块,用于基于所述新的APK签名块占用的字节数,修改所述APK文件中的中央目录偏移量,得到所述目标应用程序的目标APK文件。
如图6所示,示出了本发明实施例提供的另一种应用程序安装包生成装置的结构示意图,该装置在图5所示实施例的基础上,还包括:第二生成单元601和响应单元602。
所述第二生成单元601,用于生成所述目标应用程序的目标APK文件下载链接。
所述响应单元602,用于响应所述下载请求,返回所述下载链接。
上述本发明实施例公开的应用程序安装包生成装置中的各个单元和模块具体的原理和执行过程,与上述本发明实施例公开的应用程序安装包生成方法相同,可参见上述本发明实施例公开的应用程序安装包生成方法中相应的部分,这里不再进行赘述。
本发明公开了一种应用程序安装包生成装置,在接收到来自网页的APK文件的下载请求后,获得与该下载请求相匹配的目标APP的原始APK文件。然后,解析该原始APK文件得到APK签名块,并在该APK签名块中添加该下载请求对应的渠道信息得到新的APK签名块,最后,基于新的APK签名块及原始APK文件生成目标APP的目标APK文件。该装置利用APK文件的APK签名特点,在APK签名块中增加渠道信息,不影响APK文件的签名校验,实现了在采用V2签名原理的APK文件中增加渠道信息,以方便下一步分析APP下载渠道信息。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请各实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请各实施例中的装置及终端中的模块和子模块可以根据实际需要进行合并、划分和删减。
本申请所提供的几个实施例中,应该理解到,所揭露的终端,装置和方法,可以通过其它的方式实现。例如,以上所描述的终端实施例仅仅是示意性的,例如,模块或子模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个子模块或模块可以结合或者可以集成到另一个模块,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块或子模块可以是或者也可以不是物理上分开的,作为模块或子模块的部件可以是或者也可以不是物理模块或子模块,即可以位于一个地方,或者也可以分布到多个网络模块或子模块上。可以根据实际的需要选择其中的部分或者全部模块或子模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块或子模块可以集成在一个处理模块中,也可以是各个模块或子模块单独物理存在,也可以两个或两个以上模块或子模块集成在一个模块中。上述集成的模块或子模块既可以采用硬件的形式实现,也可以采用软件功能模块或子模块的形式实现。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。