• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

【Gradle 学习】(七)Android 产品风格 productFlavors 变种版本

武飞扬头像
juejin
帮助1907

productFlavors 产品风格

Android Gradle 提供了productFlavors,让我们可以对生成的 APK 包进行定制。这个 DSL 最常用于多渠道打包。

它支持与 defaultConfig 相同的属性,这是因为,defaultConfig 实际上属于 ProductFlavor。

创建 prodectFlavor

自定义一个 productFlavor 也是和 buildType 一样:名称{}

android  {
    productFlavors {
        dev{
​
        }
        google{
​
        }
        baidu{
​
        }
    }
}

这样当我们运行 assembleRelease 的时候就会生成 3 个 release 包,分别是 dev、google 以及 baidu。目前看这三个包除了文件名没有什么不一样,此时还没有定制,使用的都是 defaultConfig 配置。这里的 flavor 和 defaultConfig 是一样的,可以自定义其 applicationId、versionCode 以及 versionName等信息,比如区分不同包名:

android  {
    defaultConfig{
        ……
        // Specifies a flavor dimension.
        flavorDimensions "channel"
    }
    productFlavors {
        dev{
            applicationId "cn.tina.demo.dev"
        }
        google{
            applicationId "cn.tina.demo.google"
        }
    }
}

同 buildTypes,productFlavors 也有自己代码和资源文件夹,路径为 src/<flavorName buildTypeName>/

注意:flavor 的命名不能与已存在的 Build Type 或者与 androidTest、test sourceSet 有冲突。

flavorDimensions

flavorDimensions(风格维度),所有风格都必须指定一个风格维度,即一个产品风格组。必须将所有风格分配给某个维度;否则,您将收到如下所示的构建错误。如果给定的模块仅指定一个变种维度,则 Android Gradle 插件会自动将该模块的所有变种分配给该维度。

 Error:All flavors must now belong to a named flavor dimension.
 The flavor 'flavor_name' is not assigned to a flavor dimension.

变种版本

每一个 Build Type 都会生成新的 APK。Product Flavors 同样也会做这些事情:项目的输出将会组合所有的 Build Types 和 Product Flavors(如果有定义 Flavor)。

每一种组合(包含 Build Type 和 Product Flavor)就是一个 Build Variant(构建变种版本)。

例如,在之前的 Flavor 声明例子中与默认的 debug 和 release 两个 Build Types 将会生成 4 个 Build Variants:{dev, google}{debug, release}

  • dev - debug
  • dev - release
  • google - debug
  • google - release

项目中如果没有定义 flavor 同样也会有 Build Variants,只是使用的是 default 的 flavor/config,因为是无名称的,所以生成的 build variant 列表看起来就跟 Build Type 列表一样。

多定制的变种版本

扩展:flavorDimesions 可以设置多个,如

android  {
    defaultConfig{
        ……
        // Specifies a flavor dimension.
        flavorDimensions "channel","production"
    }
    productFlavors {
        dev{
            dimension "channel"
            applicationId "cn.tina.demo.dev"
        }
        google{
            dimension "channel"
            applicationId "cn.tina.demo.google"
        }
        productA{
          dimension "production"  
        }
        productB{
          dimension "production"  
        }
    }
}

那么可以组合出4种(2*2)种产品,分别有 debug 和 release,一共是8个变种版本

构建和任务

我们前面提到每一个 Build Type 会创建自己的 assemble<name> task,但是 Build Variants 是 Build Type 和 Product Flavor 的组合。 当使用 Product Flavor 的时候,将会创建更多的 assemble-type task。分别是:

  • assemble<Variant Name> 允许直接构建一个 variant 版本,例如 assembleDevDebug
  • assemble<Build Type Name> 允许构建指定 Build Type 的所有 APK,例如 assembleDebug 将会构建 DevDebugGoogleDebug 两个 variant 版本。
  • assemble<Product Flavor Name> 允许构建指定 flavor 的所有 APK,例如 assembleDev 将会构建 DevDebugDevRelease 两个 variant 版本。 另外 assemble task 会构建所有的 variant 版本。

代码及资源集合优先级

不论是构建类型还是产品风格都可以创建对应的代合和资源文件。这里有个优先级问题,可以看出 通过 flavor BuildType 存在很多组合,不同源集包统一文件的不同版本,Gradle 将按一下顺序决定使用哪一个文件

构建版本(Debug/Release)> 产品风格(google/dev)> 产品变种(googleDebug等)> 主源集(main)

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanejig
系列文章
更多 icon
同类精品
更多 icon
继续加载