Android多渠道打包两种方式(带秒速打包)
2016-10-28 15:35
507 查看
多渠道打包,主要是为了统计不同的渠道上包的下载数量,统计可以用umeng统计或者mta统计,本文用的是mta统计。
其实多渠道打包的实现与统计是没有关系的,多渠道打包与统计之间的关系是我们要把String类型的渠道号交给统计。例如mta统计里
用这行代码把渠道号交给mta统计。
抛开多渠道打包来说,我们完全可以直接
这样设置,但是如果这样来做,我们就需要改一个渠道号打包一个apk,重复操作,何必把自己当作机器呢?让AS一次性把所有渠道打包好就好的啦!
由此引出第一种方式,利用manifest和gradle来处理
(1)manifest文件里配置
(2)gradle文件里配置
(3)把各渠道号交给统计
附:Utils.getChannel(this)代码(作用是获取manifest里的渠道号value值appInfo.metaData.getString(“InstallChannel”);)
(4)在AS的terminal里输入
总结:**此种方式的缺点就是打包忒慢,15个包得打10min,因为这种打包方式需要修改manifest 文件中
的value值, 然后继续签名 ,因此耗时。每打一次apk包都需要构建一次**
(1) 拷贝
(2) 代码中通过 ChannelUtil.getChannel(this)方法获取渠道号并交给统计StatConfig.setInstallChannel(ChannelUtil.getChannel(this));。
(3)
(4) 生成一个原生apk并放置apk到
总结:这种打包方式能直接修改apk的渠道号,不需要再重新签名,思路:直接解压apk,解压后的根目录会有一个META-INF目录,在META-INF目录内添加空文件,可以不用重新签名应用,因此,通过为不同渠道的应用添加不同的空文件,可以唯一标识一个渠道。1、python代码用来给apk添加空的渠道文件,文件名即渠道名2、Java代码中读取空渠道文件名。3、把渠道名交给统计。这样,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件即可。
*在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅—生成渠道包)已经行不通了,使用美团的WALLE
https://zhuanlan.zhihu.com/p/24920734?refer=c_63840855*
参考:https://github.com/GavinCT/AndroidMultiChannelBuildTool
http://tech.meituan.com/mt-apk-packaging.html
http://gold.xitu.io/entry/577383c66be3ff006adc92a3
http://blog.csdn.net/u011733020/article/details/51175635
其实多渠道打包的实现与统计是没有关系的,多渠道打包与统计之间的关系是我们要把String类型的渠道号交给统计。例如mta统计里
StatConfig.setInstallChannel(ChannelUtil.getChannel(this));//设置apk渠道信息
用这行代码把渠道号交给mta统计。
抛开多渠道打包来说,我们完全可以直接
StatConfig.setInstallChannel("渠道号");//设置apk渠道信息
这样设置,但是如果这样来做,我们就需要改一个渠道号打包一个apk,重复操作,何必把自己当作机器呢?让AS一次性把所有渠道打包好就好的啦!
由此引出第一种方式,利用manifest和gradle来处理
(1)manifest文件里配置
<meta-data android:name="InstallChannel" android:value="${CHANNEL_VALUE}" />
(2)gradle文件里配置
android { //配置keystore签名 signingConfigs { debug { // No debug config } staging { // No staging config } release { storeFile file("xxxxxx.jks") storePassword "xxxxxx" keyAlias "xxxxxxxx" keyPassword "xxxxxx" } } buildTypes { debug { } staging { } release { signingConfig signingConfigs.release //配置apk名字格式 applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def releaseFileName = "xxxApp_v${defaultConfig.versionName}_${variant.productFlavors[0].name}_${variant.buildType.name}.apk" output.outputFile = new File(outputFile.parent, releaseFileName) } } } } } // 多渠道打包 productFlavors { _91 {} _360 {} AnzhuoM {} Baidu {} Huawei {} Jifeng {} Keke {} Lenovo {} Meizu {} Mi {} SogouM {} UC {} Wandoujia {} QQShare {} ITCollege {} Vivo {} } //下面代码会用上面的这些flavor的name属性去替换manifest文件里的CHANNEL_VALUE值。 productFlavors.all { flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name] } }
(3)把各渠道号交给统计
StatConfig.setInstallChannel(Utils.getChannel(this));
附:Utils.getChannel(this)代码(作用是获取manifest里的渠道号value值appInfo.metaData.getString(“InstallChannel”);)
/** * APP渠道读取 */ public static String getChannel(Context context) { ApplicationInfo appInfo; try { appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); if (appInfo != null && appInfo.metaData != null) return appInfo.metaData.getString("InstallChannel"); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return "official"; }
(4)在AS的terminal里输入
./gradlew assembleRelease,坐等all apk
总结:**此种方式的缺点就是打包忒慢,15个包得打10min,因为这种打包方式需要修改manifest 文件中
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}"/>
的value值, 然后继续签名 ,因此耗时。每打一次apk包都需要构建一次**
2. 时间就是金钱嘛,由此引出第二种秒速打包(还没开始就会结束)https://github.com/GavinCT/AndroidMultiChannelBuildTool
(1) 拷贝
ChannelUtil.java到项目中。
(2) 代码中通过 ChannelUtil.getChannel(this)方法获取渠道号并交给统计StatConfig.setInstallChannel(ChannelUtil.getChannel(this));。
(3)
..PythonTool\info\channel.txt,里面去添加自己想要的渠道。
(4) 生成一个原生apk并放置apk到
MultiChannelBuildTool.py所在目录,与脚本同级目录,终端cd到脚本所在目录,执行python MultiChannelBuildTool.py执行脚本,完成多渠道打包。
总结:这种打包方式能直接修改apk的渠道号,不需要再重新签名,思路:直接解压apk,解压后的根目录会有一个META-INF目录,在META-INF目录内添加空文件,可以不用重新签名应用,因此,通过为不同渠道的应用添加不同的空文件,可以唯一标识一个渠道。1、python代码用来给apk添加空的渠道文件,文件名即渠道名2、Java代码中读取空渠道文件名。3、把渠道名交给统计。这样,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件即可。
*在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅—生成渠道包)已经行不通了,使用美团的WALLE
https://zhuanlan.zhihu.com/p/24920734?refer=c_63840855*
参考:https://github.com/GavinCT/AndroidMultiChannelBuildTool
http://tech.meituan.com/mt-apk-packaging.html
http://gold.xitu.io/entry/577383c66be3ff006adc92a3
http://blog.csdn.net/u011733020/article/details/51175635
相关文章推荐
- android中的两种打包方式,及多渠道打包
- android gradle两种多渠道打包方式
- Android美团多渠道打包方式
- Android几种常见的多渠道(批量)打包方式介绍
- Android几种常见的多渠道(批量)打包方式介绍
- Android高阶之Android studio友盟多渠道打包方式
- 【Android 进阶】美团的多渠道打包方式
- android 中三种多渠道打包方式
- Android Studio签名打包的两种方式
- Android多渠道打包汇总(六)—— 美团的多渠道打包方式
- Android几种常见的多渠道(批量)打包方式介绍
- Android高阶之Android studio-友盟多渠道打包方式
- Android常用多渠道打包方式实践
- android中多渠道打包的三种方式
- Meteor android apk打包两种方式
- 更便捷的Android多渠道打包方式
- Android Studio签名打包的两种方式
- Android 多渠道打包的几种方式
- Android进阶之路 - AndroidStudio内自带的精简多渠道打包方式
- Android: Android Studio签名打包的两种方式(zz)