介绍

Android Studio的主要功能之一是将Gradle集成为Android构建系统。 虽然构建系统的总体目的是为用户获取源代码并构建可安装的文件,但对于Android而言,APK则是Gradle提供的更多功能。

Gradle处理依赖项管理,例如本地JAR文件,本机.so文件和Maven上托管的库。 它还允许轻松配置项目属性,并且使开发人员能够以相当简单的方式创建其应用程序的不同版本。 最后一项,称为构建变体,是您将在本文中学到的内容。

1.什么是构建变体?

构建变体是可以基于共享的核心源代码从Gradle生成的特定构建。 虽然标准应用程序可能具有调试发布构建类型,但是您可以通过添加flavor Dimensions来扩展它。

风味尺寸使您可以使用项目的文件夹结构来更改单个版本对用户的外观和行为。 这使开发人员可以轻松制作具有不同样式和配置的多个相似应用程序。

2.在Gradle中设置构建变体

您可以进入你的项目的build.gradle文件,添加上手flavorDimensions的项目里 android   构建节点。

flavorDimensions "number", "color"

这定义了您的构建变体可以使用的尺寸。 您生成的每个内部版本都需要具有每个维度的产品风格 。 这意味着,如果您的应用仅需要一个维度(一种常见的情况),则可以更改 flavorDimensions行仅定义一个维度。

flavorDimensions定义下,可以定义productFlavors 。 在此示例中,我们将使事情保持简单,并为每个维度定义两种风格。

productFlavors {blue {applicationId "com.tutsplus.bluevariant"flavorDimension "color"}green {applicationId "com.tutsplus.greenvariant"flavorDimension "color"}one {flavorDimension "number"}two {flavorDimension "number"}
}

您创建的每个构建都需要一个唯一的 applicationId以便将其与其他版本区分开。 由于您构建的任何应用程序在每个维度上都至少具有一种风格,因此只需要在一个维度的每个节点中定义applicationId

现在,您已经在build.gradle中定义了构建变体的所有内容 ,您可以打开Android Studio左下角的Build Variants面板,以查看可以构建哪些变体。

您会注意到,添加的每种口味都会使变体的数量呈指数增长。 另请注意, 调试发布buildType s的扔进维度的矩阵。


3.使用项目结构

现在,您可以安装不同版本的应用程序,但是没有什么区别。 在这里,您真正可以利用Gradle构建系统来发挥自己的优势。

Gradle使用项目的文件夹结构来确定将用于编译应用程序的文件。 在您的项目结构app / src /下  您会看到目录。 这是您所有Java源代码和核心资源的所在地。 您可以在main旁边添加其他目录以反映应用程序的产品风格,以便为每个构建变体添加自定义资源。

main中也定义了产品风味中存在的任何资源将自动优先。


我们可以通过查看main / res / values / colors.xml来查看实际情况 。 如果您的项目尚未定义colorPrimary值,请继续进行定义。 如果从本文开始的新的空项目开始,则应该看到#3F51B5的预定义值。 运行应用程序应将colorPrimary值显示为应用程序中Toolbar的颜色。


如果您在green / src / values /下创建一个新的colors.xml文件,   您可以使用其他值覆盖colorPrimary属性。 在这种情况下,我们使用#00FF00

<?xml version="1.0" encoding="utf-8"?>
<resources><color name="colorPrimary">#00FF00</color>
</resources>

创建文件并设置颜色后,请返回Android Studio中的“ 构建变体”面板,然后选择oneGreenDebug构建变体。 然后,您可以编译并运行该应用程序的该变体。


即使绿色变体已将工具栏变为绿色,也不会覆盖main中的其他属性。 这使您可以在main中设置通用属性,并且仅更改应该有所不同的内容。

这不仅适用于颜色,而且您可以更改资源文件夹中存在的任何内容,例如字符串,样式,尺寸和整数。 当与带注释的资源文件夹(例如用于更高像素密度设备的values-xhdpi)结合使用时,您将能够精确控制用户从您的应用程序中看到的内容,以确保他们获得最佳体验。

另外,由于为每个颜色尺寸设置了不同的applicationId值,因此可以在设备上安装同一应用程序的多个版本。

结论

Gradle是一个功能强大的工具,不仅可以构建APK,而且可以让您对自定义构建进行细粒度的控制。 在本文中,您学习了如何使用不同的资源创建应用程序的构建变体,以便您可以轻松地在单独构建每个应用程序的一小部分时间内生产出多个相似的应用程序。

虽然Gradle仍然是一个相当新的构建系统,但它已经证明它是每个Android开发人员都应该满意的非常有用的构建系统。

翻译自: https://code.tutsplus.com/tutorials/using-gradle-build-variants--cms-25005

使用Gradle构建变体相关推荐

  1. Gradle for Android(五)——构建变体

    当你在开发一个app,通常你会有几个版本.大多数情况是你需要一个开发版本,用来测试app和弄清它的质量,然后还需要一个生产版本.这些版本通常有不同的设置,例如不同的URL地址.更可能的是你可能需要一个 ...

  2. 配置构建变体build.gradle的配置

    google原文链接 https://developer.android.com/studio/build/build-variants.html#product-flavors 配置构建类型 您可以 ...

  3. Android 打包 掌握(构建变体)

    applicationId 每个 Android 应用均有一个唯一的应用 ID,像 Java 软件包名称一样,此 ID 可以在设备上和 Google Play 商店中对您的应用进行唯一标识,所以您发布 ...

  4. Gradle Flavor Dimensions 构建变体

    如果在使用  productFlavors 出现错误(Error:All flavors must now belong to a named flavor dimension. Learn more ...

  5. Android Studio下项目构建的Gradle配置及打包应用变体

    Gradle简介   Gradle是一个自动化构建工具,采用Groovy的Domain Specific Language(领域特定语言)来描述和控制构建逻辑.具有语法简洁.可读性强.配置灵活等特点. ...

  6. 【Android Gradle 插件】Extension 扩展类型 ( Module 引入插件类型 | application 插件 | library 插件 | Variants 变体列表 )

    文章目录 一.Module 引入插件类型 1.com.android.application 插件 2.com.android.library 插件 二.Extension 扩展类型 三.applic ...

  7. Gradle for Android-创建build变体

    开发app时,通常都有好几个版本.最常见的就是有一个用来手动测试及保证质量的测试版本和一个生产版本.这些版本通常都有不同的设置.例如,测试版本的API的URL就不同于生成版本的.除此之外,还可能有一个 ...

  8. 【Android Gradle 插件】主工程与依赖库变体配置 (LibraryExtension#libraryVariants|AppExtension#applicationVariants)

    文章目录 一.LibraryExtension#libraryVariants 配置 二.AppExtension#applicationVariants 配置 Android Plugin DSL ...

  9. R语言使用party包中的ctree函数构建条件推理决策树的流程和步骤、条件推理决策树是传统决策树的一个重要变体、条件推理树的分裂是基于显著性测试而不是熵/纯度/同质性度量来选择分裂

    R语言使用party包中的ctree函数构建条件推理决策树的流程和步骤(Conditional inference trees).条件推理决策树是传统决策树的一个重要变体.条件推理树的分裂是基于显著性 ...

最新文章

  1. 12种主要的Dropout方法:用于DNNs,CNNs,RNNs中的数学和可视化解释
  2. springboot源码 红色J_通达信副图指标源码之,出手就赢
  3. (九)洞悉linux下的Netfilteramp;iptables:网络地址转换原理之DNAT
  4. ObjectOutputStream 和 ObjectInputStream的使用
  5. java 反射set方法赋值_反射 根据属性名获得属性set方法并为set方法赋值
  6. hive或mysql报错Too many connections
  7. log4net异步写入日志_微信支付万亿日志在Hermes中的实践
  8. DocHub v2.3 发布,构建你自己的百度文库
  9. hashCode and equals in map
  10. echarts怎么保存图片到剪切板上_Mac上微信、QQ的聊天图片和记录保存在哪?如何清理或导出?...
  11. QT6.1.2下载和安装教程
  12. matlab 符号函数是什么意思,matlab符号函数定义
  13. DRILLNET 2.0------第十三章 尾管固井扭矩/摩阻模型
  14. build Variants创建不同配置的app(图文详解)
  15. 攻防世界(解密篇Crypto)---混合编码
  16. 错误1068:依赖服务或组无法启动
  17. 阿里云LNMP环境搭建
  18. Apsara Clouder云计算专项技能认证:云服务器ECS入门
  19. WebApi实现代理Http请求
  20. 联想卡在logo界面_联想电脑卡在载入界面如何修复 联想电脑卡在logo界面

热门文章

  1. LeetCode(Sorting) 2089Find Target Indices After Sorting Array
  2. Hadoop化繁为简(一)-从安装Linux到搭建集群环境
  3. tvoc传感器的原理
  4. Halcon 一维条码识别
  5. Android扫描识别身份证识别SDK
  6. Android变调代码,Android 之 Fmod 变音的实现
  7. 思维的力量——六顶思考帽
  8. 关机之后长按8秒复位
  9. KiCad生成炫酷的 BOM 表
  10. 【OJ】1089: 丑数