谈谈我的Android多渠道打包方式

概述

每当发新版本时,Android客户端会被分发到各个应用市场,比如应用宝,360手机助手,小米应用市场等。为了统计这些市场的效果(活跃数,下单数等),需要有一种方法来唯一标识它们。

给每一个应用市场设置一个channel ID,用来区分不同的应用市场;客户端访问API时会在请求参数中带上渠道号和设备信息,以便后台接下来计算不同渠道的效果。

根据渠道列表,在每次发版时,都会打包相对应的渠道包发布到对应的应用市场,下面是我项目中使用到的方式和一些工具。

gradle自带的productFlavor方式

在AndroidManifest.xml的< application >节点中添加如下< meta-data >元素,用来定义渠道的来源:

android:value="${CHANNEL_VALUE}" />

在app对应的build.gradle中配置productFlavor:

android {

defaultConfig {

manifestPlaceholders = [CHANNEL_VALUE: "x2"]

}

productFlavors {

x2 {}

x3 {}

x4 {}

x5 {}

x6 {}

x7 {}

x7 {}

x8 {}

x9 {}

x10 {}

}

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]

}

}

输出的APK文件名格式(可选项):

android.applicationVariants.all { variant ->

variant.outputs.each { output ->

def outputFile = output.outputFile

if (outputFile != null && outputFile.name.endsWith('.apk')) {

File outputDirectory = new File(outputFile.parent);

def fileName

if (variant.buildType.name == "release") {

fileName = "lrzm${variant.productFlavors[0].name}.apk"

} else {

fileName = "lrzm${variant.productFlavors[0].name}_beta.apk"

}

output.outputFile = new File(outputDirectory, fileName)

}

}

}

app下build.gradle配置截图:

配置就完成了,遍历渠道列表,逐个替换并打包:

程序启动时读取渠道号:

private String getChannel(Context context) {

try {

PackageManager pm = context.getPackageManager();

ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);

return appInfo.metaData.getString("CHANNEL");

} catch (PackageManager.NameNotFoundException ignored) {

}

return "";

}

Packer-Ng

新一代多渠道打包神器,github 地址

简直就是神器,作者说 【100个渠道包只需10秒】。其实真的有这么快!

修改项目根目录的 build.gradle :

buildscript {

repositories {

mavenCentral()

}

dependencies{

classpath 'com.mcxiaoke.gradle:packer:1.0.+'

}

}

修改Android项目的 build.gradle :

apply plugin: 'packer'

创建多渠道文件markets.txt

渠道打包的命令行参数格式示例(在项目根目录执行):

./gradlew -Pmarket=markets.txt clean archiveApkRelease

其他配置可参考github上的使用说明。

最后打包运行:

速度就比打包单个apk慢一点点,看下结果:

输出的名字有进行了配置,所以apk的名字很长。

archiveNameFormat = ‘${appPkg}-${flavorName}-${buildType}-v${versionName}-${versionCode}-${fileMD5}’

其他工具

360加固保

腾讯云·乐固

在使用这两个工具加固应用,他们都有多渠道打包这个辅助功能,貌似360加固保多渠道支持的多一些。

总结

对于多渠道打包,如果能直接修改apk的渠道号,而不需要再重新签名能节省不少打包的时间。幸运的是我们找到了这种方法。直接解压apk,解压后的根目录会有一个META-INF目录,如下图所示:

如果在META-INF目录内添加空文件,可以不用重新签名应用。因此,通过为不同渠道的应用添加不同的空文件,可以唯一标识一个渠道。

也看来很多相关的文章,目前推荐还是Packer-Ng方式,节省不少的时间,可以玩玩!

android 渠道包 作用,谈谈我的Android多渠道打包方式相关推荐

  1. Android 渠道包 动态生成 apk 名称

    Android 渠道包 动态生成 apk 名称 低版本打包配置 buildTypes {release {minifyEnabled trueshrinkResources truezipAlignE ...

  2. Android渠道包测试方案

    ###Android渠道包测试方案 有段时间没有写过明显关于测试相关的文章了,最近听说Android渠道包也会出现问题,于是就用python写了一个相关的测试脚本.于是乎,就有了此文... 想法说来也 ...

  3. android gradle两种多渠道打包方式

    android gradle两种多渠道打包方式 gradle多渠道打包,目前已经了解到的有两种方式: 一种是利用gradle的manifestPlaceholders属性来替换渠道值 另一种是不同的渠 ...

  4. android 渠道包 占位符配置,Android打包

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 打包的事,之前很少做,也了解的比较少,今天好好看了看,总结一下,以后要是用到了,或许可以少走些弯路. 多渠道打包 友盟多 ...

  5. 新一代开源Android渠道包生成工具Walle

    本文转载自[http://tech.meituan.com/android-apk-v2-signature-scheme.html] 在Android 7.0(Nougat)推出了新的应用签名方案A ...

  6. Android渠道包自动发布市场,Android Gradle实现打包指定渠道后自动上传到fir

    fir分三个主要步骤1.获取fir上传凭证 2.上传APK+APP logo图标 3.获取最新的下载地址供别人下载 注:python使用的是requests网络请求库 1.获取fir上传凭证 imag ...

  7. android渠道包加固,Android多渠道打包和加固那些事

    多渠道两种打包方式: 一.利用android studio的productFlavors去多渠道打包.速度慢,让人崩溃.但与市场上的一些加固无缝接入. 二.利用美团的walle,快速高效,但是在加固上 ...

  8. android 渠道包测试,Android快速批量多渠道包的“蛋生”

    对于安卓程序猿朋友来说,每当发布新版本的APP,均会分发到各大应用市场,比如腾讯应用宝,豌豆荚和360手机助手等.为了让程序猿同志们更好的区分不同的应用市场,掌握各市场APP发展状况,为了更多体现世界 ...

  9. Android渠道包自动化验证

    随着产品发布越来越快,渠道包越来越多,渠道包自动化验证重要性逐渐凸显出来,需要将大把的人力从中解放出来,且避免人工失误造成的验证不完全: 最近客户端产品尝试使用渠道包自动化测试的方法,这里说说我们目前 ...

  10. Android渠道包打包流程

    1.环境要求 Windows.JDK1.7.0以上.WinRAR 2.打包步骤 (1)从Jenkins打包平台取得最终作为发版外卖apk (2)apk重命名为src.zip(没错,就是改成一个压缩包) ...

最新文章

  1. c++中的vector的常见使用
  2. Firefox 网络调试工具
  3. STM32开发 -- PMIC、I2C详解
  4. STL源码剖析---空间配置器
  5. qt先生成json文件后程序启动时读取json文件在一组数据模拟下正常,换一组数据就出现乱码
  6. myEclipse配置java版本(环境、项目、编译)
  7. python-字典和json
  8. MySQL 入门常用命令大全
  9. 按键精灵打怪学习-多窗口多线程后台判断人物、宠物血量和宠物快乐度
  10. super-csv文档的部分翻译及基本使用
  11. ISE UCF 写法:(转载)
  12. 今日恐慌与贪婪指数为10 恐慌程度稍有上升
  13. decltype和拖尾返回类型
  14. AD20 指定层PCB图纸1:1打印步骤笔记
  15. 直播回顾 | 云原生混部系统 Koordinator 架构详解(附完整PPT)
  16. 常用的HTTP请求方法
  17. C语言克鲁斯卡尔算法的实现
  18. 上海迪士尼乐园推出全新夜间演出“奇梦之光幻影秀”
  19. 随机宏基因组测序数据质量控制和去宿主的分析流程和常见问题
  20. 如何自己开发App?如何快速生成App?

热门文章

  1. 公告模块phpcms
  2. 第二章 从优化业务流程谈信息集成的必要性
  3. 【Day5.3】斯里兰卡风格的崖差蒙空寺
  4. 高性能JSON框架之FastJson的简单使用
  5. 快乐去学习「快乐机器学习」
  6. 智能网联汽车云控系统第1部分:系统组成及基础平台架构
  7. 闹中取静:寻觅电商蓝海
  8. 工具类记录之Guawa的Splitter
  9. Python 测试题(覆盖了大多数的基础知识和进阶)
  10. LTE上行物理层传输机制(5)-CQI的传输方式