《Gradle权威指南》--Android Gradle多渠道构建
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多渠道构建的更多相关文章
- 《Gradle权威指南》--Gradle插件
No1: 应用插件 apply plugin:'java' apply plugin:org.gradle.api.plugins.JavaPlugin apply plugin:JavaPlugin ...
- 《gradle权威指南》--Gradle入门
No1: Window下搭建Gradle:添加GRADLE_HOME环境变量,然后把GRADLE_HOME\bin添加到PATH系统变量里保存即可.完成后打开CMD,运行gradle -v来验证 No ...
- 《Gradle权威指南》--Gradle构建脚本基础
No1: 设置文件默认名是setting.gradle,放在根目录下,大多数作用都是为了配置子工程 No2: 一个Project包含很多个Task.Task就是一个操作,一个原子性的操作.其实它是Pr ...
- 《Gradle权威指南》--Gradle任务
No1: 多种方式创建任务 def Task ex41CreateTask1 = task(ex41CreateTask1) ex41CreateTask1.doLast{ println " ...
- 读书笔记--Android Gradle权威指南(下)
前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...
- 读书笔记--Android Gradle权威指南(上)
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...
- Gradle系列之Android Gradle插件
原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...
- Gradle系列之Android Gradle基础配置
原文发于微信公众号 jzman-blog,欢迎关注交流. 通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: ...
- Gradle系列之Android Gradle高级配置
本篇文章主要在之前学习的基础上,从实际开发的角度学习如何对 Android Gradle 来进行自定义以满足不同的开发需求,下面是 Gradle 系列的几篇文章: Gradle系列之初识Gradle ...
随机推荐
- ElasticSearch学习
官方文档 https://www.elastic.co/cn/ http://www.learnes.net/
- 11、Logback日志框架介绍和SpringBoot整合实战 2节课
1.新日志框架LogBack介绍 简介:日志介绍和新日志框架Logback讲解 1.常用处理java的日志组件 slf4j,log4j,logback,common-logging 等 ...
- git命令行工作环境配置【转】
转自:http://www.cocoachina.com/ios/20171115/21163.html 本文为CocoaChina网友whf5566投稿 前言 笔者一直使用git的图形化工具sour ...
- 【sky第二期--PID算法】--【智能车论坛】
[sky第二期--PID算法] 想学PID的可以来[智能车论坛]这里有我发布的资料http://bbs.tekbots.eefocus.com/forum.php?mod=viewthread& ...
- nodejs xpath
var fs = require('fs');var xpath = require('xpath');var dom = require('xmldom').DOMParser; // Read t ...
- C#实现图片叠加,图片上嵌入文字,文字生成图片的方法
/// <summary> /// 图片叠加 /// </summary> /// <param name="sender"& ...
- 005_awk案例实战
一.工作经验总结. (1)日志案例: 10.100.194.39 10.100.194.39 1019-03-16T11:01:04+08:00 www.uuwatch.com^^3FF91DE01B ...
- Windows2008 r2 x64下安装FTP工具File Zilla server报错:could not load tls libraries filezilla
安装file zilla server的时候报错: could not load tls libraries filezilla 搜索了下发现是新版本有这个问题,降低到0.9.43就没这个问题了
- 罗克韦尔 Allen-Bradley MicroLogix 1400 查看、设置IP
=============================================== 2019/4/14_第1次修改 ccb_warlock == ...
- jmeter之ip欺骗
说明:我看有的博客说官方文档是在jmeter2.5以上的版本有此功能的实现~ 我的是2.13版本,也可以实现 . 准备工作: 使用IP欺骗功能必须得本地有多个可用IP,通常普通的PC机只有一个物理网卡 ...