Android打包那些事---多渠道打包

为什么要分渠道打包

渠道打包的目的是为了针对不同的市场,做一些统计,数据分析。来看下Umeng统计是怎么说的。

友盟帮助移动应用开发商统计和分析流量来源、内容使用、用户属性和行为数据,以便开发商利用数据进行产品、运营、推广策略的决策。
接着,再来看看百度移动统计。

如何多渠道打包

接下来介绍2中多渠道打包的方法。

  • Android Studio多渠道打包方法。
    以Umeng统计为例,具体怎么集成就不说了,看Umeng官方文档。Umeng
    在配置文件中配置
<meta-data android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}"/>

注意:该配置和4大组件同级。
接着,在gradle脚本中添加如下代码。

productFlavors {
        baidu {
        }
        wandoujia {
        }
        xiaomi {
        }

    }
    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

注意flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name],这里的要和配置文件中的value一致。一般来说,这样就可以了。Build->generate signed apk,等待便可生成签名的渠道包。生成的渠道包在build->outputs->apk目录下。或者,我们也可以在AS自带的 Terminal中,./gradlew assembleRelease(MAC版命令) 生成渠道包。或者,我们还可以右侧Gradle->Tasks->build下生成对应的渠道包。(ps:这是没签名的)。如图

。我们来看看生成的包吧。在这里我并没有签名。
Android打包那些事---多渠道打包_第1张图片
呀,名字看起来很长啊,有办法变得明显一点么。答案是有的。在gradle脚本的buildTypes下添加如下代码。

applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        // 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk
                        def fileName = "${variant.productFlavors[0].name}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }

上面的代码将apk文件重命名为渠道包名称。
接下来在代码中通过

String channel=AppUtil.getMetaValue(this,"CHANNEL_NAME");

来获取渠道名。

额,多的不多说了,这个不是重点,感兴趣的去看这2位大神。我的这些东西是模仿他们的。
stormzhang
Android弟

上面的多渠道打包方法每生成一个渠道包都要重新打包,可想而知,当渠道多的飞起的时候,这种方案也会慢的飞起。那么,就来介绍另一种方案。
美团Android自动化之旅,
那篇文章介绍了原理,这里我再简单的说下。就是在META-INF文件夹下,插入一个代表渠道的空文件。然后在java带按摩中获取文件名来当做渠道名。
github地址
这个工具非常简单。只需要将apk文件放到PythonTool目录下。
Android打包那些事---多渠道打包_第2张图片
在终端,
,
即可生成。好了,你们也快去试试吧。
Android打包那些事---多渠道打包_第3张图片
参考:

  • Github
  • 美团Android自动化之旅
  • stormzhang
  • Android弟

你可能感兴趣的:(android,打包,渠道)