问题:

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

解决方案:

产品的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. Namenode 没启动

    内容来源:http://blog.csdn.net/love666666shen/article/details/74350358 Question:多次格式化文件系统导致datanode无法启动 R ...

  2. linux的chmod命令

    chmod命令用来变更文件或目录的权限.在UNIX系统家族里,文件或目录权限的控制分别以读取.写入.执行3种一般权限来区分,另有3种特殊权限可供运用.用户可以使用chmod指令去变更文件与目录的权限, ...

  3. How to backup a remote PostgreSQL db and restore it locally?

    pg_dump and pg_restore 来备份和恢复数据库中的数据. 原文:  https://ksearch.wordpress.com/2012/09/28/how-to-backup-a- ...

  4. 【Java】Java_10 常量与变量

    1.变量(variable) 1.1 我们通过变量来操纵存储空间中的数据,变量就是指代这个存储空间!空间位置是确定的,但是里面放置什么值不确定! 1.2 Java是一种强类型语言,每个变量都必须声明其 ...

  5. <转>windows下编译lua源码

    因为之前一直使用 lua for windows 来搭建lua的使用环境,但是最新的 lua for windows 还没有lua5.2,我又想用这个版本的lua,所以被逼无奈只能自己编一下lua源码 ...

  6. Jpa调用存储过程及参数

    public List<Object> findAllEntityListBySearch(Long inputInfoId, int flag) throws Exception { L ...

  7. Quartz简介 用 Quartz 进行作业调度

    http://www.ibm.com/developerworks/cn/java/j-quartz/现代的 Web 应用程序框架在范围和复杂性方面都有所发展,应用程序的每个底层组件也必须相应地发展. ...

  8. Spring mvc 注解@ResponseBody 返回内容编码问题

    @ResponseBody 在@Controller 类方法中能够让字符串直接返回内容. 其返回处理的类是org.springframework.http.converter.StringHttpMe ...

  9. Atitit.跨语言反射api 兼容性提升与增强 java c#。Net  php  js

    Atitit.跨语言反射api 兼容性提升与增强 java c#.Net  php  js 1. 什么是反射1 1.1.       反射提供的主要功能:1 1.2.       实现反射的过程:1 ...

  10. 【转载】html标签语义化

    Html语义化标签-语义化你的HTML标签和属性   1 语义化你的HTML标签和属性 1.1 <Hx> 1.2 <p> 1.3 <ul>.<ol>.& ...