问题:

需要构建大体上一样,但是使用不同资源或者类的应用。

解决方案:

产品的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的更多相关文章

  1. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.1——设置项目参数

    问题: 开发的时候经常需要向项目中添加一些额外的参数或者硬编码的值. 解决方案: 使用ext块设置公用的值.如果需要从build文件中移除这些值,可以将参数放到gradle.properties文件中 ...

  2. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.5——在flavors间合并java代码

    问题: 你想要在单独的product flavors里面增加Acitivity或者其它java类. 解决方案: 创建合适的代码目录,增加java类,将它们和main代码合并. 讨论: flavors和 ...

  3. Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)

    如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...

  4. Android开发工具全面转向Android Studio(2)——AS project/module的CRUD

    本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...

  5. 配置cordova的android开发环境(无android studio)

    原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...

  6. 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。

    AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...

  7. Eclipse搭建Android开发环境并运行Android项目

    Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...

  8. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档

    问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...

  9. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.1——推荐配置

    问题: 你想要提高Gradle的构建效率. 解决方案: 使用下面推荐的技术组合. 讨论: 首先,这里没有可以影响app表现的建议.有很多你可以做的事来提高app,很多都和Android的混淆工具有关. ...

随机推荐

  1. JavaScript basics: 2 ways to get child elements with JavaScript

    原文: https://blog.mrfrontend.org/2017/10/2-ways-get-child-elements-javascript/ Along the lines of oth ...

  2. 在虚拟机安装 Linux Server (ubuntu-14.04-server)

    在虚拟机安装 Linux Server (ubuntu-14.04-server) 过程  从下载開始到成功安装历时约1小时 还算快的啦 可能国庆假期间网速快点吧 1. 下载安装文件 watermar ...

  3. 【CI】系列一:总体环境规划

    上周花了点时间把CI环境再次给搞起来了,但是觉得在实体机中总觉得不是很安心,安全性不足,另外没有做备份,安全性.扩展性等都不足,且不好迁移. 因为目前只给了我一台PC及,配置其实也不怎么样.但是却需要 ...

  4. require.js - 详解

    测试结构如下 index.html <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  5. struts2中Action訪问servlet的两种方式

    一.IoC方式                在struts2框架中,能够通过IoC方式将servlet对象注入到Action中.通常须要Action实现下面接口: a. ServletRequest ...

  6. #1214 - The used table type doesn't support FULLTEXT indexes解决办法

    #1214 - The used table type doesn't support FULLTEXT indexes报此错误的原因是:InnoDB不支持FULLTEXT类型的索引. 网上的解决办法 ...

  7. J2EE的体系架构——J2EE

    J2EE是Java2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计.开发.组装和部署企业应用.J2EE使用多 ...

  8. TensorFlow学习笔记 补充2—— 生成特殊张量

    1. 生成tensor tf.zeros(shape, dtype=tf.float32, name=None) tf.zeros_like(tensor, dtype=None, name=None ...

  9. php常见的类库-文件操作类

    工作中经常用php操作文件,因此把常用文件操作整理出来: class hylaz_file{ /** * Read file * @param string $pathname * @return s ...

  10. Atitit. camel分词器 分词引擎 camel拆分 的实现设计

    Atitit. camel分词器 分词引擎 camel拆分 的实现设计 1. camel分词器1 1.1. 实现的界定符号大写字母小写字母数字1 1.2. 特殊处理 对于JSONObject 多个大写 ...