今天运营同事给我发了15个应用平台对应的apk名。我第一反应就是给你个apk自己改名不就完了...于是心中一万个草泥马奔腾而过。

image

转念一想,这事儿可能不是那么简单,只怪我图样图森破。于是想到了之前看到过多渠道打包,那么就引出了第一个问题:

一、什么是多渠道

我理解的是:APP发布到不同的应用平台,监测用户是从哪个平台安装的。

二、为什么要多渠道打包

1. 统计用户安装APP来源

知道多渠道的意义就不难理解多渠道打包主要是为了我们统计分析用的。所以,这样就很清楚了我最初的想法不是不行,而是不好,对今后的产品分析没有任何帮助。

2.批量修改生成的apk文件名

根据运营给的命名规则,如果是一个个的右键-重命名,那15个还好,要真是有1000个,运营同事一定会拿刀找我的...而多渠道打包所有的都自动生成。

3.可更改包名

如果有生成不同包名的需求,通过gradle就可以解决。

4.生成不同应用名称或图标

有的时候你会在不同平台看到XX-小米版,XX-魅族版等等,或者beta版的图标和正式的不一样,其实代码还是那个代码,无非做点小小的改动,具体实现我们后面会说。

这是我所了解到的,可能还有很多我不知道的用途,欢迎大家在下面留言。

三、如何多渠道打包

多渠道打包网上大概有两种,一个是通过gradle,另一个是美团介绍的只打一个包,然后解压替换文件,两者比较美团的方法要更快,但是今天我们先不做介绍,如果想了解请看《Android多渠道打包飞一般的感觉》。。

1. 在AndroidManifest.xml中添加占位符

一般都是像友盟,腾讯统计分析SDK中使用的方案,网上友盟的较多,我实际用的是腾讯分析所以就拿腾讯的来说(其实都一样)。

首先,在AndroidManifest.xml的application标签里添加一个meta-data标签定义MTA_CHANNEL占位符,腾讯分析SDK会读取里面的value值传到后台,便于我们日后分析。

android:name="MTA_CHANNEL"

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

2. 修改app下的build.gradle文件,在android闭包中添加productFlavors属性配置占位符

apply plugin: 'com.android.application'

android {

compileSdkVersion 21

buildToolsVersion "21.1.2"

defaultConfig {

applicationId "com.aimerd.channel"

minSdkVersion 11

targetSdkVersion 21

versionCode 1

versionName "1.0.0"

multiDexEnabled true

}

buildTypes {

release {

// 不显示Log

buildConfigField "boolean", "LOG_DEBUG", "false"

//启用混淆代码的功能

minifyEnabled true

//压缩对齐生成的apk包

zipAlignEnabled true

//指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

//移除无用的资源文件

shrinkResources true

//启用multidex的支持

multiDexEnabled true

}

}

productFlavors

baidu {

manifestPlaceholders = [MTA_CHANNEL_VALUE: "baidu"]

}

_91 {

manifestPlaceholders = [MTA_CHANNEL_VALUE: "91"]

}

wandoujia {

manifestPlaceholders = [MTA_CHANNEL_VALUE: "wandoujia"]

}

xiaomi {

manifestPlaceholders = [MTA_CHANNEL_VALUE: "xiaomi"]

}

}

applicationVariants.all { variant ->

variant.outputs.each { output ->

def outputFile = output.outputFile

if (variant.buildType.name.equals('release')) {

//生成apk名字的格式:Channel1.0.0_2016-06-22_baidu.apk

//可自定义自己想要生成的格式

def fileName = "Channel${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"

output.outputFile = new File(outputFile.parent, fileName)

}

}

}

def releaseTime() {

return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))

}

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

compile 'com.android.support:appcompat-v7:21.0.3'

compile 'com.android.support:multidex:1.0.1'

}

如果觉得productFlavors重复代码太多,还可以这样写:

productFlavors {

baidu {}

_91 {}

wandoujia {}

xiaomi {}

}

//批量处理

productFlavors.all {

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

}

注意:像91和360这种数字的是不可以的,我试过"91"虽然可以编译通过,但打包的时候会报错

Error:Execution failed for task ':app:transformClassesWithRetrolambdaFor91Release'.

> java.lang.NullPointerException (no error message)

具体原因我不清楚,还请知道原因或者知道解决方法的告诉我一下,谢谢!

3. 打包

build->Generate Signed APK...

这个没什么好说的,很简单

AS的Terminal输入:gradle build

可一次性打包所有渠道,如果想打某个渠道的包,先输入:gradle tasks

image

找到想要打包的渠道,例如红框标出的豌豆荚,在终端输入:gradle assembleWandoujia,就会单独打包豌豆荚的包了。

注意:有的输入命令会提示'gradle'不是内部或外部命令,也不是可运行的程序或批处理文件。说明没有配置gradle的环境变量,配置成功重启即可。

4.如何更改包名

刚才提到可以根据不同业务需求,需要更改包名,在productFlavors中指定不同的applicationId即可

productFlavors {

baidu {

applicationId="com.aimerd.channel"

manifestPlaceholders = [MTA_CHANNEL_VALUE:"baidu"]

}

}

5.如何生成不同应用名称或图标

我们以baidu为例,在app模块,src目录下,新建一个与main目录同级的baidu目录(这里的名字跟productFlavors中定义的渠道名要一致):

image

把values下strings.xml中的"app_name"改成自己想要的应用名称。

哈哈哈-小米版

如果需要换图标,只需更换ic_launcher.png文件即可。

android渠道包作用,Android多渠道打包的作用及简单使用相关推荐

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

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

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

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

  3. Android渠道包测试方案

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

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

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

  5. Android使用360加固宝多渠道打包

    Android使用360加固宝多渠道打包关键点: 1.设置多渠道打包模板 格式根据软件导出的版本自行设置,模板类似下面示例: UMENG_CHANNEL 华为 huawei UMENG_CHANNEL ...

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

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

  7. 【Flavor-多渠道包】Android Studio打多渠道包

    使用Flavor配置多渠道包 目录 步骤一:配置productFlavors 步骤二:创建相应渠道目录 步骤三:同步和build 遇到的问题: 进阶配置 步骤一:配置productFlavors 在主 ...

  8. Android渠道包打包流程

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

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

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

  10. Android解包命令:unpackbootimg与打包命令:mkbootimg使用

    unpackbootimg&&mkbootimg工具     Android 产品中,内核格式是Linux标准的zImage,根文件系统采用ramdisk格式.这两者在Android下 ...

最新文章

  1. javascript定时器
  2. SDN架构的本质属性—Vecloud
  3. UVA 294 - Divisors (唯一分解)
  4. php 多维数组按值排序,按子值对php多维数组排序
  5. 11.2.7 练习题
  6. php时间戳本周,php获取今天,昨天,本周,上周,本月,上月的起止时间戳
  7. 用css3和jquery实现的渐变的动态进度条
  8. python将数值进行关联_小疯谈python:(三)数据类型之数值类型
  9. 6.828 - lab3
  10. 2021年BATJ30套大厂Android经典高频面试题,附答案
  11. 微信经典飞机大战素材
  12. 如何修改背景色?证件照背景颜色怎样换成白色?
  13. Ubuntu 18.04 桌面美化全攻略
  14. Python字符串杂谈
  15. 独家 | 想成为一名数据科学家?你得先读读这篇文章
  16. s3c2410 2.6.22.1内核移植
  17. 女程序员们的结婚要求
  18. 【C语言】机试100题及代码答案(上)
  19. 基于MODIS影像反演气溶胶
  20. android SDK buid tools 27.0.3版本离线下载

热门文章

  1. 计算机网络实验 IP网络规划与路由设计
  2. 致远SPM国资企业解决方案之督查督办管理
  3. 【Day4.7】错过湄南河夜游,去河畔夜市晚餐
  4. Hadoop介绍和环境配置
  5. xls文件格式与扩展名不匹配php,excel表格的文件格式和扩展名不匹配怎么办
  6. Get the information of all heroes in the League of Legends through the crawler.
  7. 自动化测试框架的Step By Step搭建及测试实战(1)
  8. 禁止使用计算机热点,设置Windows 10 禁止自动连接Wifi热点
  9. heka 0.11.0源码分析--主要启动流程分析
  10. Region Proposal Networks 详解