一种带有渠道数据的应用文件打包系统及方法
本发明涉及网络技术领域,具体是涉及一种带有渠道数据的应用文件打包系统及方法。
背景技术
安卓安装包(Android package APK)是一种安卓操作系统的应用程序安装文件格式,安卓应用的程序代码必须先进行编译,然后被打包成为安卓APK文件,并发送到安卓的各个应用市场上,即各个渠道。当软件开发商将应用发布到多个渠道时,需要对在渠道中运行的应用的用户量等数据进行统计分析,因此有必要预先将有关渠道的渠道数据写入安卓APK文件,即对安卓APK文件进行多渠道打包,带有渠道数据的APK文件安装后,应用运行时将渠道数据和采集的用户量等数据发送给软件开发商。传统的多渠道打包技术依赖于APK提供的AndroidManifest文件,在AndroidManifest文件中写入渠道数据,如渠道名,然后对更改后的AndroidManifest文件重新编译打包,当渠道数量较多时,导致打包速度慢,效率低。
发明内容
针对现有技术中存在的缺陷,本发明的主要目的在于提供一种带有渠道数据的应用文件打包系统,本发明的另一目的在于提供一种带有渠道数据的应用文件打包方法,直接将渠道名写入APK文件尾部的注释中,无需解压缩和重新编译APK文件,就获得带有渠道数据的APK文件,从而节省大量的时间,提高了应用文件的打包效率。
本发明提供一种带有渠道数据的应用文件打包系统,所述系统包括压缩模块、列表模块、渠道数据模块、注释模块和读取模块;
压缩模块,用于将读取模块和待打包的应用文件编译和压缩为安卓安装包APK文件;
列表模块,用于创建渠道列表文件,将多个渠道的渠道名存入所述渠道列表文件;
渠道数据模块,用于从所述渠道列表文件中依次获取多个渠道的渠道名,对于获取的任一个渠道的渠道名,根据所述渠道名和预设的标识符生成相应的渠道数据,所述预设的标识符用于表示APK文件带有渠道名;
注释模块,用于从渠道数据模块依次获取生成的渠道数据,对于获取的任一个渠道数据,将所述渠道数据写入APK文件尾部的注释中,获得带有所述渠道数据的APK文件;
读取模块,用于从带有所述渠道数据的APK文件中读取渠道名。
在上述技术方案的基础上,所述渠道名为文本格式的数据,所述渠道列表文件包括逐行的文本格式的数据,每一行包括一个渠道的渠道名。
在上述技术方案的基础上,所述渠道数据包括所述渠道名、所述渠道名的字节长度n、所述预设的标识符和总字节长度T,所述总字节长度T的计算依据公式:T=n+2+2,其中,所述渠道名的字节长度n和所述预设的标识符的字节长度均为2。
本发明还提供一种带有渠道数据的应用文件打包方法,包括以下步骤:
S1.压缩模块将读取模块和待打包的应用文件编译和压缩为安卓安装包APK文件;
S2.列表模块创建渠道列表文件,将多个渠道的渠道名存入所述渠道列表文件;
S3.渠道数据模块从所述渠道列表文件中依次获取多个渠道的渠道名,对于获取的任一个渠道的渠道名,根据所述渠道名和预设的标识符生成相应的渠道数据,所述预设的标识符用于表示APK文件带有渠道名;
S4.注释模块从渠道数据模块依次获取生成的渠道数据,对于获取的任一个渠道数据,将所述渠道数据写入APK文件尾部的注释中,获得带有所述渠道数据的APK文件。
在上述技术方案的基础上,所述渠道名为文本格式的数据,所述渠道列表文件包括逐行的文本格式的数据,每一行包括一个渠道的渠道名。
在上述技术方案的基础上,所述渠道数据包括所述渠道名、所述渠道名的字节长度n、所述预设的标识符和总字节长度T,所述总字节长度T的计算依据公式:T=n+2+2,其中,所述渠道名的字节长度n和所述预设的标识符的字节长度均为2。
在上述技术方案的基础上,步骤S3中,渠道数据模块从所述渠道列表文件中依次获取多个渠道的渠道名,对于获取的任一个渠道的渠道名,根据所述渠道名和预设的标识符,计算所述渠道名的字节长度n和总字节长度T,并生成相应的渠道数据。
在上述技术方案的基础上,步骤S4包括:
注释模块从渠道数据模块依次获取生成的渠道数据,对于获取的任一个渠道数据,将文件读写指针位移到APK文件尾部的注释,并反向偏移2个字节,写入所述渠道数据中的所述总字节长度T;将文件读写指针位移到APK文件尾部的注释,依次写入所述渠道名、所述渠道名的字节长度n和所述预设的标识符,获得带有所述渠道数据的APK文件。
在上述技术方案的基础上,所述方法还包括:
S5.读取模块从带有所述渠道数据的APK文件中读取渠道名。
在上述技术方案的基础上,步骤S5包括:
应用运行时,读取模块打开带有所述渠道数据的APK文件,将文件读取指针偏移到APK文件尾部的注释,以小端模式读取APK文件尾部的注释的2个字节;判断读取的字节是否与所述预设的标识符相同,若否,抛出异常;若是,将文件读取指针反向偏移2个字节,并读取2个字节的第一数据作为所述渠道名的字节长度n,将文件读取指针反向偏移n+4个字节,并读取n个字节的数据作为该APK文件带有的渠道名。
与现有技术相比,本发明的优点如下:
(1)本发明能够直接将带有渠道名的渠道数据写入APK文件尾部的注释中,无需解压缩和重新编译APK文件,就获得带有渠道数据的APK文件,从而节省大量的时间,提高了应用文件的打包效率。
(2)本发明将多个渠道的渠道名存入渠道列表文件,便于自动从渠道列表文件中依次获取渠道名,当渠道数量较多时,可以进一步提高打包的速度,使得打包过程简单、可靠、成本低。
(3)本发明中的渠道数据包括2个字节表示有渠道名的标识符,便于读取模块迅速地读取APK文件中带有的渠道名。
(4)本发明中的读取模块从带有渠道数据的APK文件安装后生成的应用文件中读取渠道信息,在应用运行时,将该应用所在渠道的用户量等数据发送给软件开发商,便于软件开发商及时地对数据进行统计分析。
附图说明
图1是本发明实施例带有渠道数据的应用文件打包系统示意图;
图2是本发明实施例带有渠道数据的应用文件打包方法流程图。
附图标记:
压缩模块1,列表模块2,渠道数据模块3,注释模块4,读取模块5。
具体实施方式
术语说明:
安卓安装包APK文件本质是一个压缩文件,其文件格式包括文件头(Local fileheader),文件(file#),……,核心目录(Central directory)和核心目录结束标识(End ofcentral directory),其中,APK文件尾部的核心目录结束标识的第20字节开始有记录压缩文件注释的字段,第20-22字节表示注释的长度,从第22字节开始记录注释。
Zip:一种文件压缩格式。
渠道:应用市场。
Python是一种面向对象、解释型计算机程序设计语言,Python具有丰富和强大的库,其中:
Python io模块是输入输出或者读写模块,io模块的open函数既能打开文件也能创建文件,并且还能设置当前打开的文件的模式是读还是写。readline函数一次读取一行,write函数是写文件函数,可以将数据写入到open函数打开或创建的文件当中。
RandomAccessFile是Java的一个工具类,通过这个工具类可以对文件进行随机位置的读写。
大小端模式:
大端模式是一种存储模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
小端模式是一种存储模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
下面结合附图及具体实施例对本发明作进一步的详细描述。
由于安卓安装包APK文件本质是一个压缩文件,而且默认的APK文件没有注释,因此可以将渠道名写入APK文件尾部的第22字节开始的注释中。
基于上述原理,本发明实施例提供一种带有渠道数据的应用文件打包系统,参见图2所示,包括压缩模块1、列表模块2、渠道数据模块3、注释模块4和读取模块5。
压缩模块1用于将读取模块5和待打包的应用文件编译和压缩为安卓安装包APK文件。
列表模块2用于创建渠道列表文件,将多个渠道的渠道名存入渠道列表文件。
渠道名为文本格式的数据,渠道列表文件包括逐行的文本格式的数据,每一行包括一个渠道的渠道名。
具体的,渠道列表文件可以为文本格式文件,例如txt文件,每一行包括一个渠道的渠道名。
本发明将多个渠道的渠道名存入渠道列表文件,便于自动从渠道列表文件中依次获取渠道名,当渠道数量较多时,可以进一步提高打包的速度,使得打包过程简单、可靠、成本低。
渠道数据模块3用于从渠道列表文件中依次获取多个渠道的渠道名,对于获取的任一个渠道的渠道名,根据渠道名和预设的标识符生成相应的渠道数据,预设的标识符用于表示APK文件带有渠道名。
渠道数据包括渠道名、渠道名的字节长度n、预设的标识符和总字节长度T,总字节长度T的计算依据公式:T=n+2+2,其中,渠道名的字节长度n和预设的标识符的字节长度均为2。
预设的标识符为字符格式,例如‘ch’,‘ch’的字节长度为2。
本发明中的渠道数据包括2个字节表示有渠道名的标识符,便于读取模块5迅速地读取APK文件中带有的渠道名。
注释模块4用于从渠道数据模块3依次获取生成的渠道数据,对于获取的任一个渠道数据,将渠道数据写入APK文件尾部的注释中,获得带有渠道数据的APK文件。
本发明能够直接将带有渠道名的渠道数据写入APK文件尾部的注释中,无需解压缩和重新编译APK文件,就获得带有渠道数据的APK文件,从而节省大量的时间,提高了应用文件的打包效率。
读取模块5用于从带有所述渠道数据的APK文件中读取渠道名。
本发明中的读取模块5从带有渠道数据的APK文件安装后生成的应用文件中读取渠道信息,在应用运行时,将该应用所在渠道的用户量等数据发送给软件开发商,便于软件开发商及时地对数据进行统计分析。
本发明实施例提供一种带有渠道数据的应用文件打包方法,参见图2所示,包括以下步骤:
S1.压缩模块1将读取模块5和待打包的应用文件编译和压缩为安卓安装包APK文件。
S2.列表模块2创建渠道列表文件,将多个渠道的渠道名存入所述渠道列表文件。
渠道名为文本格式的数据,渠道列表文件包括逐行的文本格式的数据,每一行包括一个渠道的渠道名。
具体的,渠道列表文件可以为文本格式文件,例如txt文件,每一行包括一个渠道的渠道名。
S3.渠道数据模块3从渠道列表文件中依次获取多个渠道的渠道名,对于获取的任一个渠道的渠道名,根据渠道名和预设的标识符生成相应的渠道数据,预设的标识符用于表示APK文件带有渠道名。
渠道数据包括渠道名、渠道名的字节长度n、预设的标识符和总字节长度T,总字节长度T的计算依据公式:T=n+2+2,其中,渠道名的字节长度n和预设的标识符的字节长度均为2。
预设的标识符为字符格式,例如‘ch’,‘ch’的字节长度为2。
步骤S3中,渠道数据模块3从渠道列表文件中依次获取多个渠道的渠道名,对于获取的任一个渠道的渠道名,根据渠道名和预设的标识符,计算渠道名的字节长度n和总字节长度T,并生成相应的渠道数据。
以下以Python语言为例,具体说明步骤S3。
通过Python io模块的open函数打开渠道列表文件,通过readline函数从打开的渠道列表文件中读取一个渠道名,计算该渠道名的字节长度n和总字节长度T。
S4.注释模块4用于从渠道数据模块3依次获取生成的渠道数据,对于获取的任一个渠道数据,将渠道数据写入APK文件尾部的注释中,获得带有渠道数据的APK文件。
步骤S4包括:
注释模块4从渠道数据模块3依次获取生成的渠道数据,对于获取的任一个渠道数据,将文件读写指针位移到APK文件尾部的注释,并反向偏移2个字节,写入渠道数据中的总字节长度T;将文件读写指针位移到APK文件尾部的注释,依次写入渠道名、渠道名的字节长度n和预设的标识符,获得带有渠道数据的APK文件。
以下以Python语言为例,具体说明步骤S4。
通过Python io模块的open函数打开APK文件,通过fseek函数将文件读写指针位移到APK文件尾部,并反向偏移2个字节,由于默认的APK文件没有注释,注释长度和注释内容的数据均为0,所以此时APK文件尾部反向偏移2字节就是注释长度。通过Python io模块的write函数写入总字节长度T,通过fseek函数将文件读写指针位移到APK文件尾部,通过Python io模块的write函数依次写入渠道名、渠道名的字节长度n和预设的标识符。
渠道数据包括渠道名、该渠道名的字节长度n、预设的标识符和总字节长度T,参见表1所示,将总字节长度T写入APK文件尾部的第20字节,从APK文件尾部的第22字节开始写入渠道名以及渠道名的字节长度n,并在后面追加2个字节表示是否有渠道名的标识符,便于迅速地读取带有渠道数据的APK文件中的渠道名。
表1写入渠道数据后的APK文件尾部的核心目录结束标识
本方法还包括:
S5.读取模块5从带有渠道数据的APK文件中读取渠道名。
步骤S5包括:
应用运行时,读取模块5打开带有渠道数据的APK文件,将文件读取指针偏移到APK文件尾部的注释,以小端模式读取APK文件尾部的注释的2个字节;判断读取的字节是否与预设的标识符相同,若否,抛出异常;若是,将文件读取指针反向偏移2个字节,并读取2个字节的第一数据作为渠道名的字节长度n,将文件读取指针反向偏移n+4个字节,并读取n个字节的数据作为该APK文件带有的渠道名。
带有渠道数据的APK文件安装后,读取模块5可以通过Java的RandomAccessFile工具类实现读取该应用的渠道名。具体的,通过RandomAccessFile工具类打开该APK文件,通过RandomAccessFile的seek函数将文件读取指针偏移到该APK文件尾部的注释,以小端模式读取APK文件尾部的注释的2个字节。判断读取的字节是否与预设的标识符相同,若否,抛出异常;若是,通过seek函数将文件读取指针反向偏移2个字节,并读取2个字节的第一数据作为渠道名的字节长度n,通过seek函数将文件读取指针反向偏移n+4个字节,并读取n个字节的数据作为该APK文件带有的渠道名。
本发明可以通过Python语言实现所有渠道的渠道名打包步骤,应用运行时,通过Java的RandomAccessFile工具类实现读取该应用的渠道名,打包和读取过程简单、迅速、成本低。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。