Gradle 混合构建风味

2024-01-02

有没有办法在gradle中“混合”多种口味?

例如,假设我有两种口味:Red and Blue。现在假设我有两种口味,我希望它们有(子口味,如果你喜欢的话):Complex and Simple.

到目前为止我所知道的是,这需要我创建四种口味:Red-Complex, Red-Simple, Blue-Complex, Blue-Simple.

我不清楚这个项目应该如何构建。我如何定义Red之间共享的代码Red-Complex and Red-Simple口味,但也有Complex之间共享的代码Red-Complex and Blue-Complex?我不想在口味之间复制/粘贴代码。

在 gradle 中实现这一目标的最佳方法是什么?


以下是风味的工作原理:https://proandroiddev.com/advanced-android-flavors-part-1-building-white-label-apps-on-android-ade16af23bcf https://proandroiddev.com/advanced-android-flavors-part-1-building-white-label-apps-on-android-ade16af23bcf

-> 在您的 src 文件夹中,您想要创建 2 种口味,称为“红色”、“蓝色”。

-> 在 src 中创建 2 个名为“red”、“blue”的文件夹(与 main 同一级别)。

-> 文件夹具有与 main 相同的结构。

-> 在这里您可以选择覆盖任何 XML/资源/java 文件/值等。

->(当您构建 Flavor 时,与 main 具有相同名称的资源将被覆盖)。

-> 使用 build.gradle 中的示例代码为项目添加风味。

productFlavors {
      blue{
          minSdkVersion 21
          applicationId 'something'
          targetSdkVersion 28
          versionCode 1
          versionName "1.0.0"
      }
      red
      {
          minSdkVersion 21
          applicationId 'something'
          targetSdkVersion 28
          versionCode 1
          versionName '1.0.0'
      }
  }

  buildTypes {
      Debug {   }
      Release { }
  }

将给出构建变体:

blueDebug
blueRelease
redDebug
redRelease

//================ 添加子口味 ================

Here: https://proandroiddev.com/advanced-android-flavors-part-2-enter-flavor-dimensions-4ad7f486f6 https://proandroiddev.com/advanced-android-flavors-part-2-enter-flavor-dimensions-4ad7f486f6

-> 具有简单、复杂等子风格(换句话说“buildTypes”)。

-> 对于子风味或构建类型,我们使用维度。

->flavorDimensions“Flavour”、“SubFlavour”(在您的 build.gradle 中) // 可以是任意关键字,内部使用 // 将此关键字视为将口味集合定义为一个组的组 ID。

-> 根据您的口味使用它 -> 我们可以认为关键词“维度”更像是定义一组风味和子风味

flavorDimensions "Flavour", "SubFlavour" 
  productFlavors
  { 
      // group one
      Simple {
          dimension "SubFlavour"
      }
      Complex {
          dimension "SubFlavour"
      }

      //group two
      // Take a note: do not use upper case in your flavours (one which match the folder names in src)
      // Sub-Flavours can have Upper case
      blue
      {
          dimension "Flavour"
          minSdkVersion 21
          applicationId 'something'
          targetSdkVersion 28
          versionCode 1
          versionName "1.0.0"
      }
      red
      {
          dimension "Flavour"
          minSdkVersion 21
          applicationId 'something'
          targetSdkVersion 28
          versionCode 1
          versionName '1.0.0'
      }
  }

--> 通过正确配置,您将看到下面的 buildVariants。

 blueSimpleDebug
  blueSimpleRelease
  blueComplexDebug
  blueComplexRelease

  redSimpleDebug
  redSimpleRelease
  redComplexDebug
  redComplexRelease

//================= build.gradle =============== // 这里你的 build.gradle 可能看起来像这样。

android {

    buildTypes {
        debug {   }
        release { }
        // Any other you want to add here
        // Ex, development {}
    }


    flavorDimensions "Flavour", "SubFlavour"
    productFlavors {
        Simple {
            dimension "SubFlavour"
        }
        Complex {
            dimension "SubFlavour"
        }

        Blue
        {
            dimension "Flavour"
            minSdkVersion 21
            applicationId 'something'
            targetSdkVersion 28
            versionCode 1
            versionName "1.0.0"
        }
        Red
        {
            dimension "Flavour"
            minSdkVersion 21
            applicationId 'something'
            targetSdkVersion 28
            versionCode 1
            versionName '1.0.0'
        }

    }
    sourceSets {
        main {
            aidl.srcDirs = ['src/main/aidl', 'src/main/res/animation', 'src/main/res/animations']
            res.srcDirs = [

                    'src/main/res/anim',
                    'src/main/res/layouts/xyz',
                    'src/main/res/layouts/abc',
                    'src/main/res/layouts',
                    'src/main/res/layout',
                    'src/main/res'
            ]
            resources.srcDirs = ['src/main/resources', 'src/main/resources/xml']
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java']
        }
        red {
            java.srcDirs = ['src/red/java']
            res.srcDirs = [
                    'src/red/res/layouts/xyz',
                    'src/red/res/layouts/abc',
                    'src/red/res/layouts',
                    'src/red/res'
            ]
            assets.srcDirs = ['src/red/assets']
            manifest.srcFile 'src/red/AndroidManifest.xml'
        }
        blue {
            java.srcDirs = ['src/blue/java']
            res.srcDirs = [
                    'src/blue/res/layouts/xyz',
                    'src/blue/res/layouts/abc',
                    'src/blue/res/layouts',
                    'src/blue/res'
            ]
            assets.srcDirs = ['src/blue/assets']
            manifest.srcFile 'src/blue/AndroidManifest.xml'
        }

    }

} //andorid

dependencies {
// yout dependencies
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gradle 混合构建风味 的相关文章

随机推荐

  • 给定两个数组,找到给出两个数组之间最接近距离的排列

    假设我有两个长度相同的数组n named A and B 这两个数组包含实数值 我们将两个数组之间的距离定义为均方距离 dist A B sqrt sum A B 2 我想找到的排列A这给出了最小距离B 最简单的方法是尝试每一个排列A并记录
  • Python3 tkinter设置图像大小

    我到处寻找一种设置图像大小的方法 图像被设置为 url 我在网站上发现了其他问题 但没有一个有效 import urllib request base64 u urllib request urlopen currentWeatherIco
  • 如何修改另一个函数收到的 XMLHttpRequest 响应文本?

    我正在尝试修改我无法修改的函数收到的responseText 该函数创建了一个我可以附加到的 XMLHttpRequest 但我无法以允许我在原始函数接收之前修改内容的方式 包装 responseText 这是完整的原始函数 functio
  • 为什么在 C 中将枚举元素分配给相同的枚举变量类型时必须对其进行强制转换?

    我有以下内容 typedef enum FLS PROG SUCCESS FLS PROG FAIL FLS ERASE SUCCESS2U FLS ERASE FAIL FLS READ SUCCESS FLS READ FAIL FLS
  • 使用 vbscript 自动实现页面滚动

    我需要使用 vbscript 拍摄页面的完整快照 为此我需要向下滚动一点 实际上 我可以在快照中拍摄页面的一半 但我还需要在下一个快照中拍摄剩余部分 页面加载后我尝试使用以下内容 ie document body doScroll page
  • MySQL 中的更改数据捕获

    在我的数据库中 我想在每次更改列的值时跟踪它 以某种方式 每次字段值更改时我们都可以知道以前的值是什么 为每次更改分配时间戳会很棒 我我使用 MySQL 作为数据库服务器 我建议你看一下Debezium http debezium io 一
  • 如何将 Visual Studio 2017.3 降级到 2017.2?

    将 VS 更新到 2017 3 破坏了我的 xunit 测试发现 2017 2 一切正常 所以我正在寻找降级的方法 无法直接降级 但可以安装特定版本 使用 Visual Studio 安装程序卸载 Visual Studio 2017 从以
  • 我的组织用户对 Azure Devops 存储库的访问受到限制

    我们最近将代码移到了 azure devops 上 我们在 azure AD 中创建了用户帐户 并将相同的用户添加到 Azure Devops 中 以便他们可以访问代码 现在我们希望限制对存储库的访问 我检查了这个网址 Azure DevO
  • Firebase 云消息传递是否符合 HIPAA?

    我想在医疗保健应用程序中使用 Firebase Cloud Messaging 我想知道 FCM 是否符合 HIPAA 标准并且是否提供 BAA 我们刚刚与第三方完成了使用端到端加密的 Firestore Chat 示例应用程序 iOS 和
  • Win32 No-MFC 中的消息映射

    我如何创建类似的结构来处理 Win32 消息 就像在 MFC 中一样 In MFC BEGIN MESSAGE MAP CSkinCtrlTestDlg CDialog AFX MSG MAP CSkinCtrlTestDlg ON BN
  • 有 Ruby 语法的权威参考文档吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找有关 Ruby 语法的权威文档 我知道核心 API 和标准库的权威文档 但是语法本身呢 例如
  • 如何从左侧而不是顶部滑动导航栏?

    Bootstrap 支持从顶部切换导航栏 屏幕较小时如何从左侧滑动 例如 在上面提供的屏幕截图中 当调整屏幕大小时 导航栏会切换并从顶部向下滑动 我宁愿希望导航栏从左侧滑动 在Bootstrap中如何实现这个功能呢 目前 根据代码 导航栏从
  • Keycloak 模板可用变量

    我在谷歌上搜索了一段时间 以便找到我可以在各种 Keycloak 模板中使用的所有可用的 变量 的文档 我所说的变量是指所有的 xxx yyy 我可以用它来在模板中注入一些动态值 通过文档我可以在这里和那里找到其中的一些 例如 user a
  • cypress - 访问主站点时出现 403 禁止错误

    我正在尝试 cy visit 我的单页应用程序 该应用程序需要在浏览器中加载我的证书才能正确运行 运行测试时 它失败并出现 403 禁止错误 有一个可怕的解决方法 我在 cypress chrome 浏览器窗口中打开一个新选项卡 然后直接转
  • C++ 中指针“this+1”指的是什么?

    我正在浏览代码G2P 推理 https www i6 informatik rwth aachen de web Software g2p html并发现了一行非常奇怪的代码 public const Node childrenEnd co
  • 按服务数据 UUID 进行 BLE 扫描过滤器

    我们有使用 服务数据 128 位 UUID AD 类型信标数据的设备 0x21 对于 Android 扫描 我们通过 MAC 地址过滤 BLE 设备 效果很好 因为我们需要更大的灵活性 所以我们想通过 UUID 进行过滤 我的代码仅适用于小
  • 处理数学函数中的错误

    数学相关函数中错误处理的良好做法是什么 我正在构建一个专门函数的库 模块 我的主要目的是使调用这些函数的代码更容易调试 而不是创建一个闪亮的用户友好的错误处理工具 下面是 VBA 中的一个简单示例 但我也有兴趣听到其他语言的信息 我不太确定
  • 创建帖子时创建 Woocommerce 产品

    我在我的 WordPress 网站上使用 Woocommerce 我在我的网站上销售各种物品 我想要的是 每次我创建有关特定商品的小帖子时 它还会创建一个 Woocommerce 产品页面 其中包含可供出售的商品 例如 我创建了一篇关于定制
  • 在实体框架中创建动态 linq 排序和搜索顺序语句时

    我正在尝试构建一个函数来根据某些参数动态生成不同的查询 我对 LINQ 语法有点困惑 不确定我是否做对了 字符串类型参数集是 search 用于搜索文本框值 searchfield 搜索内容 limit begin limit end 用于
  • Gradle 混合构建风味

    有没有办法在gradle中 混合 多种口味 例如 假设我有两种口味 Red and Blue 现在假设我有两种口味 我希望它们有 子口味 如果你喜欢的话 Complex and Simple 到目前为止我所知道的是 这需要我创建四种口味 R