多渠道打包
在开发完一个应用即将要上线的时候,应用会选择很多个应用平台去上线项目,并且通过后台去分析每个平台的下载量,这样我们就有必要对每个平台做一个唯一标识了,而往往这个标识会存放在安装包中,每个下载平台上线的是带有标识的安装包,这样就能够区分,不同平台的应用下载量了。
那么,问题又来,一般上线的项目都会有很多的渠道可供下载的,这么多带有唯一标识和合法签名的安装包难道需要我们一个一个手动打包吗?哈哈(我长笑一声),当然不能手动来了。下面就为大家带来几种自动化打包方案。
一 ,gradle自动化打包方案
这种打包方案是Android Studio自带的方案,比较原生。
步骤一:使用占位符的方式在清单文件中配置渠道
<meta-data android:value="573e8baae0f55a3532000010" android:name="UMENG_APPKEY"/>
<meta-data android:value="${UMENG_CHANNEL}" android:name="UMENG_CHANNEL"/>
步骤二:配置集合productFlavors
productFlavors{
AppChina{
manifestPlaceholders=[UMENG_CHANNEL:"AppChina"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL: "wandoujia"]
}
}
步骤三:然后走正常签名打包的流程 Build — Generate Signed APK,在Flavors中就有需要打的各种包了
步骤四:可以通过友盟统计的方式,来验证apk是否区分渠道了
二,美团多渠道打包方案
gradle方式打包有一个缺点,就是耗时非常多,不能够快速打包,而美团多渠道打包能够实现快速打包(1分钟900个不是梦),本人也是强烈建议各位看官使用这种方式。
各位看官莫急,我们先了解了解这个原理如何,挺有意思的哦。
原理:每一次正常打包的过程粗略的讲是这样的.R/.java — .class — .dex — resources.ap_ — release.keystore — signed apk,这一套过程是很需要时间的,如果打N多个这样的包,需要多少时间可想而知了,所以美团的技术团队通过META-INF特殊性和读取文件名的方式就轻松跳过了这么多流程。
大家还记得META-INF特殊性吗?就是在签名apk的时候,会将应用的资源目录结构记载下来,并在每次安装的时候进行签名验证,所以当我们修改资源目录之后就不能安装了,但是每一次的签名验证不会验证META-INF文件加下的目录结构,所以我们将一个带有渠道名字的文件放在这个文件夹下,并通过不断修改这个文件和获取这个文件带有的渠道名,就是实现快速多渠道的打包。
好吧,说了好多,直接展示实现步骤吧!
步骤一:下载相关工具https://github.com/GavinCT/AndroidMultiChannelBuildTool
步骤二:生成一个已经签名的 apk 程序内部使用 java工具获取 meta-data 下面的渠道变量 com.yinleiquan.myapp.MainActivity
public void showChannel(View view){
// 获取当前apk的渠道变量值发送给服务端
String channel = ChannelUtil.getChannel(this);
Log.i(TAG, "onCreate: "+channel);
Toast.makeText(this,"channel="+channel,Toast.LENGTH_LONG).show();
}
其中的ChannelUtil 可以从下载的工具代码里面复制。
步骤三:这个生成多个安装包的脚本工具使用的python,所以我们要想使用需要安装python环境。
下载地址:https://www.python.org/downloads/windows/
安装过成不多陈述了,详细步骤可参照
http://jingyan.baidu.com/article/e73e26c0bad76224acb6a766.html
步骤四:在安装python完毕之后,就可以使用这个脚本工具了。
1.首先创建一个空文件,等待写入 META-INF 目录作为 channel_xxx 文件
2.获取渠道列表。
3.找到初始 apk
4.遍历渠道号并写入 apk。