一种带有渠道信息的应用文件打包系统及方法与流程

文档序号:12463294阅读:178来源:国知局
一种带有渠道信息的应用文件打包系统及方法与流程



背景技术:

安卓安装包(Android package APK)是一种安卓操作系统的应用程序安装文件格式,安卓应用的程序代码必须先进行编译,然后被打包成为安卓APK文件,并发送到安卓的各个应用市场上,即各个渠道。当软件开发商将应用发布到多个渠道时,需要对在渠道中运行的应用的用户量等数据进行统计分析,因此有必要预先将有关渠道的渠道信息写入安卓APK文件,即对安卓APK文件进行多渠道打包,带有渠道信息的APK文件安装后,应用运行时将渠道信息和采集的用户量等数据发送给软件开发商。传统的多渠道打包技术依赖于APK提供的AndroidManifest文件,在AndroidManifest文件中写入渠道信息,如渠道名,然后对更改后的AndroidManifest文件重新编译打包,当渠道数量较多时,导致打包速度慢,效率低。



技术实现要素:

针对现有技术中存在的缺陷,本发明的主要目的在于提供一种带有渠道信息的应用文件打包系统,本发明的另一目的在于提供一种带有渠道信息的应用文件打包方法,无需重新编译,就获得带有渠道信息的APK文件,从而节省大量的时间,提高了带有渠道信息的应用文件的打包效率。

本发明提供一种带有渠道信息的应用文件打包系统,所述系统包括压缩模块、解压缩模块、列表模块、渠道文件模块和读取模块;

压缩模块,用于将读取模块和待打包的应用文件编译和压缩为安卓安装包APK文件;

解压缩模块,用于将APK文件解压缩到指定的目录,所述指定的目录包括APK文件解压缩后生成的META-INF目录;

列表模块,用于创建渠道列表文件,将多个渠道的渠道信息存入所述渠道列表文件,所述渠道信息包括渠道的渠道名;

渠道文件模块,用于从所述渠道列表文件中依次获取多个渠道的渠道信息,对于获取的任一个渠道的渠道信息,在META-INF目录中创建一渠道文件,将所述渠道信息存入所述渠道文件中,对所述指定的目录中的所有文件进行压缩,获得带有所述渠道信息的APK文件;

读取模块,用于从带有所述渠道信息的APK文件安装后生成的应用文件中读取所述渠道信息。

在上述技术方案的基础上,所述渠道信息为文本格式的数据,所述渠道列表文件包括逐行的文本格式的数据,每一行包括一个渠道的渠道信息。

在上述技术方案的基础上,带有所述渠道信息的APK文件安装后生成应用文件,应用运行时,所述读取模块通过安卓上下文环境Context获得该应用的属性对象,并通过所述属性对象获取该应用的源目录;以所述源目录作为安卓ZipFile类的参数创建安卓ZipFile类的对象;从创建的安卓ZipFile类的对象里查找所述渠道文件,打开找到的渠道文件,从找到的渠道文件中获取存储的渠道信息。

本发明还提供一种带有渠道信息的应用文件打包方法,包括以下步骤:

S1.压缩模块将读取模块和将待打包的应用文件编译和压缩为安卓安装包APK文件;

S2.解压缩模块将APK文件解压缩到指定的目录,所述指定的目录包括APK文件解压缩后生成的META-INF目录;

S3.列表模块创建渠道列表文件,将多个渠道的渠道信息存入所述渠道列表文件,所述渠道信息包括渠道的渠道名;

S4.渠道文件模块从所述渠道列表文件中依次获取多个渠道的渠道信息,对于获取的任一个渠道的渠道信息,在META-INF目录中创建一渠道文件,将所述渠道信息存入所述渠道文件中,对所述指定的目录中的所有文件进行压缩,获得带有所述渠道信息的APK文件。

在上述技术方案的基础上,所述渠道信息为文本格式的数据,所述渠道列表文件包括逐行的文本格式的数据,每一行包括一个渠道的渠道信息。

在上述技术方案的基础上,步骤S4中,从所述渠道列表文件中逐行读取渠道的渠道信息。

在上述技术方案的基础上,步骤S4包括:

S4.1渠道文件模块获取所述渠道列表文件中渠道的总数;

S4.2从所述渠道列表文件中获取第一个渠道的渠道信息,将第一个渠道作为当前渠道;

S4.3记录已经读取的渠道的总数和所述当前渠道在所述渠道列表文件中的位置;

S4.4在META-INF目录中创建一渠道文件,将所述当前渠道的渠道信息存入所述渠道文件中;

S4.5对所述指定的目录中的所有文件进行压缩,获得带有所述渠道信息的APK文件;

S4.6判断已经读取的渠道的总数是否等于所述渠道列表文件中渠道的总数,若是,结束;若否,进入S4.7;

S4.7根据所述当前渠道在所述渠道列表文件中的位置,获取所述当前渠道的位置之后的渠道作为更新后的当前渠道,获取更新后的当前渠道的渠道信息,进入S4.3。

在上述技术方案的基础上,步骤S4.5包括:

S4.5a以所述指定的目录作为参数创建Python ZipFile函数的对象,所述Python ZipFile函数的对象包括成员函数write和作为输出结果的压缩文件,所述压缩文件的文件名后缀为zip;

S4.5b遍历所述指定的目录中的所有文件,并通过成员函数write将遍历的文件依次写入所述压缩文件;

S4.5c将所述压缩文件的文件名后缀zip更改为apk。

在上述技术方案的基础上,所述方法还包括:

S5.读取模块从带有所述渠道信息的APK文件安装后生成的应用文件中读取所述渠道信息。

在上述技术方案的基础上,步骤S5包括:

S5.1应用运行时,读取模块通过安卓上下文环境Context获得该应用的属性对象,并通过所述属性对象获取该应用的源目录;

S5.2以所述源目录作为参数创建安卓ZipFile类的对象;

S5.3从创建的安卓ZipFile类的对象里查找所述渠道文件,打开找到的渠道文件,从找到的渠道文件中获取存储的渠道信息。

与现有技术相比,本发明的优点如下:

(1)本发明将渠道信息存入在META-INF目录中创建的渠道文件中,然后对所有文件重新进行压缩,无需重新编译,就获得带有渠道信息的APK文件,从而节省大量的时间,提高了带有渠道信息的应用文件的打包效率。

(2)本发明将多个渠道的渠道信息存入渠道列表文件,便于自动从渠道列表文件中依次获取渠道信息,从而获得带有渠道信息的APK文件,当渠道数量较多时,可以进一步提高打包的速度,使得打包过程简单、可靠、成本低。

(3)本发明中的读取模块从带有渠道信息的APK文件安装后生成的应用文件中读取渠道信息,应用运行时将该应用所在渠道和用户量等数据发送给软件开发商,便于软件开发商及时地对数据进行统计分析。

附图说明

图1是本发明实施例带有渠道信息的应用文件打包系统示意图;

图2是本发明实施例带有渠道信息的应用文件打包方法流程图;

图3是步骤S4的具体流程图。

附图标记:

压缩模块1,解压缩模块2,列表模块3,渠道文件模块4,读取模块5。

具体实施方式

术语说明:

APK文件解压缩之后的目录内包含被编译的代码文件.dex、文件资源resources、目录assets、证书certificates、签名目录META-INF和清单文件manifest file。AndroidManifest是APK内部清单文件,用于注册APK使用的一些系统组件。

Zip:一种文件压缩格式。

渠道:应用市场。

Python是一种面向对象、解释型计算机程序设计语言,Python具有丰富和强大的库,其中:

Python io模块是输入输出或者读写模块,io模块的open函数既能打开文件也能创建文件,并且还能设置当前打开的文件的模式是读还是写。readline函数一次读取一行。write函数是写文件函数,可以将数据写入到open函数打开或创建的文件当中。

Python zipfile模块是专门处理zip的模块,zipfile模块的extractall函数的作用是将一个指定zip文件中的所有文件解压缩到指定的目录下。

Python os模块是Python的系统模块,包含了大量的系统操作函数,walk函数用于遍历一个指定目录下的所有文件。

应用的属性对象ApplicationInfo存储了应用的一些基本信息,包括应用名版本号,应用源目录sourceDir等数据。

安卓操作系统包括:

安卓Context是应用运行的环境。

安卓ZipFile类用于操作zip文件的工具类。

安卓IntputStreamReader类用于将指定流转换成reader对象供BufferedReader读取的工具类。

安卓BufferedReader类用于读取流的工具类。

下面结合附图及具体实施例对本发明作进一步的详细描述。

对安卓安装包APK文件内部的一些文件修改后,都需要重新进行签名打包,但是对APK文件解压缩后的META-INF目录进行修改后,不需要重新进行签名打包。

基于上述原理,本发明实施例提供一种带有渠道信息的应用文件打包系统,参见图1所示,本系统包括压缩模块1、解压缩模块2、列表模块3、渠道文件模块4和读取模块5。

压缩模块1用于将读取模块5和待打包的应用文件编译和压缩为安卓安装包APK文件。

解压缩模块2用于将APK文件解压缩到指定的目录,指定的目录包括APK文件解压缩后生成的META-INF目录。

列表模块3用于创建渠道列表文件,将多个渠道的渠道信息存入渠道列表文件,渠道信息包括渠道的渠道名。

渠道信息为文本格式的数据,渠道列表文件包括逐行的文本格式的数据,每一行包括一个渠道的渠道信息。

具体的,渠道列表文件可以为文本格式文件,例如txt文件,每一行包括一个渠道的渠道信息。

本发明中渠道信息为文本格式的数据,渠道列表文件包括逐行的文本格式的数据,能够进一步提高读取和写入渠道信息的速度。

渠道文件模块4用于从渠道列表文件中依次获取多个渠道的渠道信息,对于获取的任一个渠道的渠道信息,在META-INF目录中创建一渠道文件,将渠道信息存入渠道文件中,对指定的目录中的所有文件进行压缩,获得带有渠道信息的APK文件。

具体的,渠道文件可以为文本格式文件,例如txt文件。

本发明将多个渠道的渠道信息存入渠道列表文件,便于自动从渠道列表文件中依次获取渠道信息,从而获得带有渠道信息的APK文件,当渠道数量较多时,可以进一步提高打包的速度,使得打包过程简单、可靠、成本低。

本发明将渠道信息存入在META-INF目录中创建的渠道文件中,然后对所有文件重新进行压缩,无需重新编译,就获得带有渠道信息的APK文件,从而节省大量的时间,提高了带有渠道信息的应用文件的打包效率。

读取模块5用于从带有渠道信息的APK文件安装后生成的应用文件中读取渠道信息。

带有渠道信息的APK文件安装后生成应用文件,应用运行时,读取模块5通过安卓上下文环境Context获得该应用的属性对象,并通过属性对象获取该应用的源目录;以源目录作为安卓ZipFile类的参数创建安卓ZipFile类的对象;从创建的安卓ZipFile类的对象里查找渠道文件,打开找到的渠道文件,从找到的渠道文件中获取存储的渠道信息。

本发明中的读取模块5从带有渠道信息的APK文件安装后生成的应用文件中读取渠道信息,在应用运行时,将该应用所在渠道的用户量等数据发送给软件开发商,便于软件开发商及时地对数据进行统计分析。

本发明实施例提供一种带有渠道信息的应用文件打包方法,参见图2所示,包括以下步骤:

S1.压缩模块1将读取模块5和将待打包的应用文件编译和压缩为安卓安装包APK文件。

S2.解压缩模块2将APK文件解压缩到指定的目录,指定的目录包括APK文件解压缩后生成的META-INF目录。

具体的,可以通过Python zipfile模块中的extractall函数将APK文件解压缩到指定的目录中,APK文件解压缩之后的目录内包含被编译的代码文件.dex、文件资源resources、目录assets、证书certificates、签名目录META-INF和清单文件manifest file。实现上述过程的代码如下:

其中,source_filename和dest_dir为unzip函数的参数,source_filename表示APK文件的存储路径和文件名,dest_dir表示解压缩后的指定的目录,Apk和channel_apk.tmp分别为source_filename和dest_dir的传入值。

S3.列表模块3创建渠道列表文件,将多个渠道的渠道信息存入渠道列表文件,渠道信息包括渠道的渠道名。

渠道信息为文本格式的数据。渠道列表文件包括逐行的文本格式的数据,每一行包括一个渠道的渠道信息。

具体的,渠道列表文件可以为文本格式文件,例如txt文件,每一行包括一个渠道的渠道信息。

S4.渠道文件模块4从渠道列表文件中依次获取多个渠道的渠道信息,对于获取的任一个渠道的渠道信息,在META-INF目录中创建一渠道文件,将渠道信息存入渠道文件中,对指定的目录中的所有文件进行压缩,获得带有渠道信息的APK文件。

步骤S4中,从渠道列表文件中逐行读取渠道的渠道信息。

参见图3所示,步骤S4包括:

S4.1渠道文件模块4获取渠道列表文件中渠道的总数。

S4.2从渠道列表文件中获取第一个渠道的渠道信息,将第一个渠道作为当前渠道。

S4.3记录已经读取的渠道的总数和当前渠道在渠道列表文件中的位置。

S4.4在META-INF目录中创建一渠道文件,将当前渠道的渠道信息存入渠道文件中。

S4.5对指定的目录中的所有文件进行压缩,获得带有渠道信息的APK文件。

S4.6判断已经读取的渠道的总数是否等于渠道列表文件中渠道的总数,若是,结束;若否,进入S4.7。

S4.7根据当前渠道在渠道列表文件中的位置,获取当前渠道的位置之后的渠道作为更新后的当前渠道,获取更新后的当前渠道的渠道信息,进入S4.3。

以下以Python语言为例,具体说明步骤S4。

使用for循环语句就可以读取渠道列表文件中的所有渠道的渠道信息,循环次数为渠道列表文件中渠道的总数,通过Python io模块的open函数打开渠道列表文件,通过readline函数从打开的渠道列表文件中读取一个渠道的渠道信息作为当前渠道的渠道信息,readline函数一次读取渠道列表文件中的一行,实现上述过程的代码如下:

其中,channels.txt为渠道列表文件,channel_name为读取的渠道的渠道名。

通过Python io模块的open函数在META-INF目录中创建一渠道文件,通过Python io模块的write函数将当前渠道的渠道信息存入渠道文件中;进入步骤S4.5,步骤S4.5具体包括:

S4.5a以指定的目录作为参数创建Python ZipFile函数的对象,Python ZipFile函数的对象包括成员函数write和作为输出结果的压缩文件,压缩文件的文件名后缀为zip。

S4.5b通过Python os模块中的walk函数遍历指定的目录中的所有文件,并通过成员函数write将遍历的文件依次写入压缩文件。

S4.5c将压缩文件的文件名后缀zip更改为apk。

已经读取的渠道的总数等于渠道列表文件中渠道的总数时,循环结束,对于渠道列表文件中的每一个渠道,获得带有该渠道的渠道信息的APK文件。

本方法还包括:

S5.读取模块5从带有渠道信息的APK文件安装后生成的应用中读取渠道信息。

以下以Python语言为例,具体说明步骤S5。

步骤S5包括:

S5.1应用运行时,读取模块5通过安卓上下文环境Context获得该应用的属性对象ApplicationInfo,并通过属性对象ApplicationInfo获取该应用的源目录sourceDir。

S5.2以源目录sourceDir作为参数创建安卓ZipFile类的对象。

S5.3从创建的安卓ZipFile类的对象里查找渠道文件,通过IntputStreamReader类打开找到的渠道文件,通过BufferedReader类的readline函数从找到的渠道文件中获取存储的渠道信息。

本发明可以通过Python语言实现所有渠道的渠道名打包和读取步骤,打包和读取过程简单、迅速、成本低。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1