Gradle混合构造味道

时间:2015-05-13 10:16:02

标签: android gradle

有没有办法混合" gradle中的多种口味?

例如,我们说我有两种口味:RedBlue。现在让我们说我有两种口味可以让我们拥有这些口味(如果您愿意,可以使用子口味):ComplexSimple

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

我不清楚如何在项目中构建这个结构。如何定义RedRed-Complex类之间共享的Red-Simple代码,还包含Complex和{{之间共享的Red-Complex代码1}?我不想在口味之间复制/粘贴代码。

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

1 个答案:

答案 0 :(得分:0)

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

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

->在src中创建2个名为“ red”,“ blue”的文件夹(与主文件夹相同)。

->文件夹的结构与主文件夹相同。

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

->(与fla相同名称的资源在构建Flavour时将被覆盖)。

->使用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

// ================向其中添加子口味===============

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

->具有简单,复杂(如“ buildTypes”)这样的子风味。

->对于子口味或说buildType,我们使用尺寸。

-> flavorDimensions“风味”,“子风味”(在您的build.gradle中) //可以是任何关键字,在内部使用 //将此关键字视为组ID,该组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
}