多渠道打包

所谓多渠道打包,实际上就是在代码层面上标记不同的渠道名,从而便于统计不同的应用市场该apk的下载量,例如91市场、应用宝、豌豆荚等。而且有些时候有些包还可以从网页的外链或者一些非市场的渠道进行下载。这些都需要进行统计,因此多渠道打包,便成了打包任务的重中之重。

利用Gradle进行多渠道打包,将开发者从之前繁杂的ant打包中解放出来。Gradle的强大功能,将多渠道打包变得异常简单,只需要在Gradle脚本中进行简单配置,即可完成多渠道打包。

创建渠道占位符

首先在AndroidMainifest文件的Application节点下,创建如下所示的meta-data节点。

  1. <meta-data
  2. android:name="PRODUCT"
  3. android:value="${CHANNEL_VALUE}"/>

其中“${CHANNEL_VALUE}”就是要进行替换的渠道占位符。

配置Gradle脚本

在项目的Gradle脚本的android领域中,添加productFlavors领域,并增加定义的渠道名。同时,使用manifestPlaceholders指定要替换渠道占位符的值,代码如下所示。

  1. productFlavors {
  2. product1 {
  3. manifestPlaceholders = [CHANNEL_VALUE: "PRODUCT1"]
  4. }
  5. product2 {
  6. manifestPlaceholders = [CHANNEL_VALUE: "PRODUCT2"]
  7. }
  8. product3 {
  9. manifestPlaceholders = [CHANNEL_VALUE: "PRODUCT3"]
  10. }
  11. }

笔者一共定义了三个不同的渠道——product1、product2、product3。每个渠道都将指定值赋给渠道占位符CHANNEL_VALUE。这样配置后,就完成了整个多渠道的打包工作。在终端中执行gradle build即可开始构建,在构建完毕后系统会在项目的/app/build/outputs/apk文件夹下看到所有生成的渠道包,如图4.17所示。

多渠道打包 - 图1 图4.17 渠道包

每个渠道包都有三种,debug、release(系统默认的两种buildType)和xys(自定义的buildType)。

实际上除了渠道名,AndroidMainifest文件中的其他设置,同样可以使用占位符进行配置。只要利用manifestPlaceholders进行替换即可,原理与多渠道类似。这一个技巧可以让项目能够直接在编译脚本——build.gradle中进行动态参数控制,便于统一管理。更进一步,在Module中同样可以进行这些动态参数的控制。例如某些Module的封装,需要配置一些验证Key作为参数,如果这些Key写在Module中,Module就失去了通用性。因此借助manifestPlaceholders,开发者可以将动态参数配置到Module中,通过主项目的manifestPlaceholders进行传递,相关内容开发者可以参考笔者的博客,地址如下所示。

http://blog.csdn.net/eclipsexys/article/details/51283232