No1:

Build Variant = Build Type + Product Flavor

Build Variant:构建的产物

Build Type:构建的类型

Product Flavor:构建的渠道

android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
productFlavors{
google{}
baidu{}
}
}

No2:

Flurry多渠道和友盟多渠道构建

Flurry本身没有渠道的概念,它有Application,所以可以把一个Application当成一个渠道,每个Application都有一个Key,称为Flurry Key;友盟本身有渠道的概念,只要我们在AndroidManifest.xml配置标注即可。

android{
compileSdkVersion
buildToolsVersion "23.0.1" defaultConfig{
applicationId "org.flysnow.app.example112"
minSdkVersion
targetSdkVersion
versionCode
versionName '1.0.0'
resConfig 'zh'
}
buildTypes{
release{
minifyEnabled true
projuardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
zipAlignEnabled true
}
}
productFlavors{
google{
buildConfigField 'String','FLURRY_KEY','"BHJKOUASDASFKLZL"'
}
baidu{
buildConfigField 'String','FLURRY_KEY','"HJSDKHFJDSF23478"'
}
}
}

这样每个渠道的BuildConfig类中都会有名字为FLURRY_KEY常量定义

友盟渠道是在AndroidManifest.xml中配置的

<meta-data android :value="Channel ID" android:name="UMENG_CHANNEL"/>

其中Channel ID就是渠道值

No3:

多渠道构建定制--其实就是对Android Gradle插件的ProductFlavor的配置,通过配置ProductFlavor达到灵活地控制每个渠道的目的

applicationId就是该渠道的包名

android{
...
productFlavors{
google{
applicationId "org.flysnow.app.example112.google"
}
}
}

consumerProguardFiles--只对Android库项目有用

android{
productFlavors{
google{
consumerProguardFiles 'proguard-rules.pro','proguard-android.txt'
}
}
}

testApplicationId--测试包名

android{
...
productFlavors{
google{
testApplicationId "org.flysnow.app.example112.test"
}
}
}

testFunctionalTest--是否为功能测试,testHandleProfiling--是否启用分析功能

android{
productFlavors{
google{
testFunctionalTest true
testHandleProfiling true
}
}
}

testInstrumentationRunner--用来配置运行测试使用的Instrumentation Runner的类名

android{
productFlavors{
google{
testInstrumentationRunner 'android.test.InstrumentationTestRunner'
}
}
}

testInstrumentationRunnerArguments--用来配置Instrumentation Runner使用的参数

android{
productFlavors{
google{
testInstrumentationRunnerArguments.put("coverage",'true')
}
}
}

useJack--用于标记是否启用Jack和Jill这个全新的、高性能的编译器

android{
productFlavors{
google{
useJact true
}
}
}

dimension --多维度,理解为对ProdcutFlavor进行分组。用flavorDimensions声明维度,才能在ProductFlavor中使用

android{
flavorDimensions "abi","version"//优先级:abi>version>defaultConfig
productFlavors{
free{
dimension 'version'
}
paid{
dimension 'version'
}
x86{
dimension 'abi'
}
arm{
dimension 'abi'
}
}
}

会生成

ArmFreeDebug

ArmFreeRelease

ArmPaidDebug

ArmPaidRelease

x86FreeDebug

x86FreeRelease

x86PaidDebug

x86PaidRelease

No4:

提高多渠道构建的效率-美团方案

1)利用Android Gradle打一个基本包

2)基于该包复制一个,文件名要能区分出产品、打包时间、版本、渠道等

3)对复制出来的apk文件进行修改,在其META-INF目录下新增空文件,但是空文件的文件名要有意义,必须包含能区分渠道的名字,如:mtchannel_google

4)重复步骤2)步骤3生成我们所需的所有渠道包apk,这个可以使用Python这类脚本来做

5)生成了我们所有发布渠道的apk包

使用:

在apk启动(Application onCreate)时候,读取我们写apk中META-INF目录下的前缀mtchannel_文件,如果找到的话,把文件名取出来,然后就可以得到渠道标识(Google)了

《Gradle权威指南》--Android Gradle多渠道构建的更多相关文章

  1. 《Gradle权威指南》--Gradle插件

    No1: 应用插件 apply plugin:'java' apply plugin:org.gradle.api.plugins.JavaPlugin apply plugin:JavaPlugin ...

  2. 《gradle权威指南》--Gradle入门

    No1: Window下搭建Gradle:添加GRADLE_HOME环境变量,然后把GRADLE_HOME\bin添加到PATH系统变量里保存即可.完成后打开CMD,运行gradle -v来验证 No ...

  3. 《Gradle权威指南》--Gradle构建脚本基础

    No1: 设置文件默认名是setting.gradle,放在根目录下,大多数作用都是为了配置子工程 No2: 一个Project包含很多个Task.Task就是一个操作,一个原子性的操作.其实它是Pr ...

  4. 《Gradle权威指南》--Gradle任务

    No1: 多种方式创建任务 def Task ex41CreateTask1 = task(ex41CreateTask1) ex41CreateTask1.doLast{ println " ...

  5. 读书笔记--Android Gradle权威指南(下)

    前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...

  6. 读书笔记--Android Gradle权威指南(上)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...

  7. Gradle系列之Android Gradle插件

    原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...

  8. Gradle系列之Android Gradle基础配置

    原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...

  9. Gradle系列之Android Gradle高级配置

    本篇文章主要在之前学习的基础上,从实际开发的角度学习如何对 Android Gradle 来进行自定义以满足不同的开发需求,下面是 Gradle 系列的几篇文章: Gradle系列之初识Gradle ...

随机推荐

  1. SpringBoot2.x个性化启动banner设置和debug日志

    3.SpringBoot2.x个性化启动banner设置和debug日志 简介:自定义应用启动的趣味性日志图标和查看调试日志 1.启动获取更多信息 java -jar xxx.jar --debug ...

  2. python 数据类型详解

    python数据类型详解 参考网址:http://www.cnblogs.com/linjiqin/p/3608541.html 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8 ...

  3. python3解析库BeautifulSoup4

    Beautiful Soup是python的一个HTML或XML的解析库,我们可以用它来方便的从网页中提取数据,它拥有强大的API和多样的解析方式. Beautiful Soup的三个特点: Beau ...

  4. 【转】mysql8.0 在window环境下的部署与配置

    [转]mysql8.0 在window环境下的部署与配置 今天在阿里云window服务器上配置mysql环境,踩了一些坑,分享出来.需要的朋友可以看看.额,或许有人要吐槽我为什么不在linux上去配置 ...

  5. Ubuntu 分辨率显示出错,分辨率不是最佳分辨率的解决办法

    本文为转载,但在Ubuntu16.04LTS下亲测有效. (1)首先使用 xrandr 命令列出当前所能检测到的分辨率,如一台显示器,最佳分辨率为 1440x900(我的显示器尽量设置1680x105 ...

  6. ES系列七、ES-倒排索引详解

    1.单词——文档矩阵 单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义.图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系. 图3-1 单词-文档矩 ...

  7. dubbo系列一、dubbo背景介绍、微服务拆分

    一.背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 二.传统应用到分布式应用的演进过程 ...

  8. zabbix3.0.4添加对指定进程的监控

    zabbix3.0.4添加对进程的监控: 主要思路: 通过 ps -ef|grep sdk-push-1.0.0.jar |grep -v grep|wc -l 这个命令来判断进程sdk-push是否 ...

  9. 虚拟机Ubuntu 18.04安装RabbitMQ 3.7.9

    Windows 10家庭中文版,VirtualBox,Ubuntu 18.04,Rabbitmq 3.7.9,Erlang/OTP 20 [erts-9.2], 在虚拟机上装好了Ubuntu,写了一个 ...

  10. js闭包实例汇总

    本文是通过实例来帮助大家深刻理解js闭包,是篇非常不错的文章,这里推荐给大家,有需要的小伙伴可以参考下 Js闭包 闭包前要了解的知识 1. 函数作用域 (1).Js语言特殊之处在于函数内部可以直接读取 ...