最近在工作上了解了一些与渠道包相关的信息,在此进行一下总结。
什么是渠道包?
每当发新版本时,我们编写的Android客户端应用会被分发到各个应用市场,比如豌豆荚,360手机助手等。为了统计应用这些市场的效果(活跃数,下单数等),我们需要有一种唯一标识来区分它们。渠道号就是我们用来区分不同市场的唯一标识,比方说,发布到豌豆荚市场的应用的渠道号是“wandoujia”,而发布到360手机助手的应用的渠道号则为“qihu360”。带有渠道号的包即是渠道包,当我们的应用进行打点汇报等操作时,往往会把渠道包中的渠道信息一同上传,以便后台接下来计算不同渠道的效果。
Gradle构筑渠道包的方法
在Android的Gradle中,它为我们提供了Flavor属性用于构建不同渠道的渠道包,使用方法如下:
File -> Project Structure -> Flavors 选项卡
设置Flavors过后,我们的build.gradle文件将会添加上对应的代码(当然我们也可以手动直接编写代码):
Gradle提供的Flavors允许我们设置多种多样的属性,而我们可以通过Gradle生成的BuildConfig类来读取当前渠道包的相关信息:
BuildConfig.FLAVOR
这种打渠道包的方法的优点在于可以对渠道包进行多种属性的定制,然而缺点在于每打一个渠道包都要重新执行一次编译过程,当渠道的数量较多或者工程编译过程较长时,会耗费相当多的时间,而且当渠道包多到一定程度的时候,配置渠道包的冗长的脚本也会让人抓狂。
使用apktool反编译apk加入渠道信息
apktool是用于编译以及反编译apk的工具,我们可以通过使用apktool来反编译我们打出的普通apk文件,为其中添加渠道信息后再重新编译。
具体操作流程如下:
首先我们在AndroidManifest中添加元数据的渠道信息:
<meta-data
android:name="channel"
android:value="BASE_CHANNEL" />
接着执行我们的gradle任务,在此,我们把任务分为几个步骤一一列出(下列代码写在Module的build.gradle文件中)
首先,通过apktool反编译apk: