Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.2——设置Flavors和Variants
问题:
需要构建大体上一样,但是使用不同资源或者类的应用。
解决方案:
产品的flavors可以帮助你对同一个app创建不同的版本。
讨论:
build types是开发过程的一部分,一般用来将app从开发版进化到生产版。默认的build types:debug和release反应了这个。
Flavors让你能够构建同一个app的不同版本。当你想对不同版本的app自定义不同的外观,或者你需要一个免费版和收费版的app,你可以使用Flavors。
可以使用productFlavors块来声明product的flavor。
考虑下这样的场景,设置一个基于简单edittext入口的“helloworld”风格的欢迎界面。你给app设置不同的flavors:“friendly”,“arrogant”,“obsequious”:
android {
productFlavors {
arrogant {
applicationId 'com.oreilly.helloworld.arrg'
}
friendly {
applicationId 'com.oreilly.helloworld.frnd'
}
obsequious {
applicationId 'com.oreilly.helloworld.obsq'
}
}
}
每个都有不同的applicationId,这样三个都可以安装在同一个设备上面。
注:flavor的名字不可以和已经存在build type的名字或者预定义的androidTest相同。
每个产品的flavor都有下列属于自己的属性,其中,都是基于defaultConfig中相同的属性:
applicationId
minSdkVersion
targetSdkVersion
versionCode
versionName
signingConfig
每个flavor定义自己的代码设置和资源,它们是主目录的同级代码。意味着,除了app/src/main/java文件夹外,你可以把代码放在以下的目录:
app/src/arrogant/java
app/src/friendly/java
app/src/obsequious/java
你也可以增加额外的资源文件在:
app/src/arrogant/res
app/src/arrogant/res/layout
app/src/arrogant/res/values
同样的资源结构会被应用到所有flavors,如:

相似的文件结构。一个build type和一个flavor的组合被称作variant。对于默认的两个build types(debug和release)和上面展示的三个flavors(arrogant,friendly和obsequious),6种不同变体(variant)的apk可以被生成。
为了看到所有可能的变体名,可以在module的build文件中增加自定义任务:
task printVariantNames() {
doLast {
android.applicationVariants.all { variant ->
println variant.name
}
}
}
在命令行下执行./gradlew printVariantNames
为了部署一个指定的变体,android sudio提供了一个build variant的视图。可以在下拉列表中选择合适的变体:

product flavors使用后,assemble任务会构建所有可能的变体。assemble<variant>任务会构建指定的build type和flavor。你也可以使用assemble<BuildType>构建这个build type下所有的flavors,或者使用assemble<Flavor>任务构建这个flavor下所有的build type。install任务被分配到每个变体,如installArrogantDebug或者installFriendlyRelease。
Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.2——设置Flavors和Variants的更多相关文章
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.1——设置项目参数
问题: 开发的时候经常需要向项目中添加一些额外的参数或者硬编码的值. 解决方案: 使用ext块设置公用的值.如果需要从build文件中移除这些值,可以将参数放到gradle.properties文件中 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.5——在flavors间合并java代码
问题: 你想要在单独的product flavors里面增加Acitivity或者其它java类. 解决方案: 创建合适的代码目录,增加java类,将它们和main代码合并. 讨论: flavors和 ...
- Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)
如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...
- Android开发工具全面转向Android Studio(2)——AS project/module的CRUD
本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...
- 配置cordova的android开发环境(无android studio)
原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...
- 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。
AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...
- Eclipse搭建Android开发环境并运行Android项目
Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档
问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.1——推荐配置
问题: 你想要提高Gradle的构建效率. 解决方案: 使用下面推荐的技术组合. 讨论: 首先,这里没有可以影响app表现的建议.有很多你可以做的事来提高app,很多都和Android的混淆工具有关. ...
随机推荐
- 算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
下压(LIFO)栈:可以动态调整数组大小的实现 import java.util.Iterator; public class ResizingArrayStack<Item> imple ...
- odoo8.0条形码改为js方式处理
群里网友@上海-gavin 提供的odoo条形码处理,将原来的图片生成方式改为js处理方式. <div class="row text-center"> <div ...
- Docker 基础概念科普 和 常用操作介绍
Docker 基础概念 Docker是什么? Docker的思想来自于集装箱,集装箱解决了:在一艘大船上,可以把货物规整的摆放起来.并且各种各样的货物被集装箱标准化了,集装箱和集装箱之 ...
- 使用Linux环境变量教程
什么是环境变量? bash shell用一个叫作环境变量( environment variable)的特性来存储有关shell会话和工作环境的信息(这也是它们被称作环境变量的原因).这项特性允许你在 ...
- python模块学习之os
16.1. os-复杂的操作系统接口 Source code: Lib/os.py 该模块提供了使用操作系统相关功能的便携式方法. 如果您只想读或写一个文件,请参阅open(),如果要操作路径,请参阅 ...
- linux前后台任务切换管理
liuyuan@ebuinfo:/var/www/projects/PHPExcel/Examples$ vi 33chartcreate-line.php & [] liuyuan@ebui ...
- Python的实例方法,类方法,静态方法之间的区别及调用关系
如果只看这个图,很多人可能会看的一头雾水,特别是学过完全面向对象语言的同学, Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是 ...
- 【实用】如何在windows下快速截图?
如何在windows下快速截图? 快速截图是很多人的需求.截图的工具和方案也很多,但是,这里给出一个通用的,被大众认为最高效的一个解决方案. 我们都知道键盘上有一个"prt sc" ...
- 【转】Android自动化测试(UiAutomator)简要介绍
一.一个BUG引发的问题 如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”.这个问题我们如何验证呢?我想,最好的方式应该是自动化测试. 那么,自动化测试可以完成哪些任务呢? ...
- Spring4 MVC表单验证
在这篇文章中,我们将学习如何使用Spring表单标签, 表单验证使用 JSR303 的验证注解,hibernate-validators,提供了使用MessageSource和访问静态资源(如CSS, ...