相关疑难解决方法(0)

Gradle:Multi-Dimension Flavor ApplicationId

我有一个相对复杂的项目,每个应用程序需要两个风味维度.我在下面的示例中更简单地重写了它:

flavorDimensions "shape", "color"

productFlavors {

     blue {
         flavorDimension "color"
     }

     red {
         flavorDimension "color"
     }

     green {
         flavorDimension "color"
     }


     square {
         flavorDimension "shape"
     }

     circle {
         flavorDimension "shape"
     }
Run Code Online (Sandbox Code Playgroud)

我希望能够为每个变体设置不同的applicationId,例如:squareblue将具有与circleblue不同的applicationId.我无法在颜色维度中设置applicationId,因为它对于每个形状都是相同的.在上面的例子中我需要有6个不同的applicationIds.这些ID也不遵循任何模式,它们可以是任何东西.

我在这里看到了答案:如何使用flavorDimensions为每个风味组合设置不同的applicationId?但这意味着我需要手动设置,这对我的项目来说是不可行的,因为变种的数量(1000s).

我真正想要做的是在颜色维度上设置两个应用程序,然后在构建时根据形状维度选择正确的一个.我已经尝试过定义变量但是没有取得任何成功,它们只是被最后一个变量覆盖了.

groovy android gradle android-studio

8
推荐指数
1
解决办法
4763
查看次数

使用flavor尺寸时设置Android applicationId的正确方法是什么?

我在我的项目中使用了flavor维度,并且我一直在使用for循环将applicationId设置为我生成的flavor:

flavorDimensions "appname", "brand"

productFlavors {

   user {
        dimension "appname"
   }

   installer {
        dimension "appname"
   }

   branda {
        dimension "brand"
   }

   brandb {
        dimension "brand"
   }

   brandc {
        dimension "brand"
   }

   brandd {
        dimension "brand"
   }

}
Run Code Online (Sandbox Code Playgroud)

我过滤那些我现在不支持的:

variantFilter { variant ->
  def names = variant.flavors*.name

  if (names.contains("installer") && (names.contains("brandc") || names.contains("brancd")) ) {
      variant.ignore = true
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我根据flavor名称更新applicationId:

applicationVariants.all { variant ->
def flavorString = variant.getVariantData().getVariantConfiguration().getFlavorName()
def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor();

switch (flavorString) {
/**
 * user
 */
case …
Run Code Online (Sandbox Code Playgroud)

java android gradle android-gradle-plugin

8
推荐指数
1
解决办法
1001
查看次数

配置特定的gradle风味组合

我想知道是否可以为特定的风味组组合提供文件或配置设置.例如,我有2个风味组,每组有2种不同的风味:

风味组:版本

  • V2
  • V3

风味组:类型

  • 自由
  • 充分

订购"类型","版本"时,我可以构建我的应用程序的4种不同风格:

  • FreeV2
  • FreeV3
  • FullV2
  • FullV3

我的源代码树看起来像这样:

/src
    /free
        /res
    /full
        /res
    /v2
        /java
        /res
        AndroidManifest.xml (features and permissions for v2 flavors)
    /v3
        /java
        /res
        AndroidManifest.xml (features and permissions for v3 flavors)
Run Code Online (Sandbox Code Playgroud)

这正是我想要的,对我的项目非常有效.但是,我希望我能为特定的风味组合组合提供文件.例如,我想为FullV3和FullV2提供不同的AndroidManifests.我不认为这是可能的,或者?例如:

/src
    /free
        /res
    /full
        /res
    /v2
        /java
        /res
        AndroidManifest.xml (features and permissions for v2 flavors)
    /v3
        /java
        /res
        AndroidManifest.xml (features and permissions for v3 flavors)
    /fullv3
        AndroidManifest.xml (features and permissions for full v3 only!)
    /fullv2
        AndroidManifest.xml (features and permissions …
Run Code Online (Sandbox Code Playgroud)

android gradle android-studio android-gradle-plugin

6
推荐指数
2
解决办法
5554
查看次数

Android Gradle - 在特定的productFlavor上添加packageNameSuffix

我有一个Gradle Android项目,使用此产品组和Flavors配置:

/*
 * Define different flavor groups
 */
flavorGroups 'market', 'version'

/*
 * Defile product flavors
 */
productFlavors {

    amazon {
        flavorGroup 'market'
    }

    google {
        flavorGroup 'market'
    }

    flav1 {
        flavorGroup 'version'
        packageName 'com.company.flav1'
    }

    flav2 {
        flavorGroup 'version'
        packageName 'com.company.flav2'
    }

    flav3 {
        flavorGroup 'version'
        packageName 'com.company.flav3'
    }
}

// .. Other stuff
Run Code Online (Sandbox Code Playgroud)

它很棒.所有源和资源都正确合并.但由于特定原因,我需要包后缀.amzamazon产品风味.我怎样才能做到这一点?

我试过这种方式:

amazon {
    flavorGroup 'market'
    packageNameSuffix '.amz'
}
Run Code Online (Sandbox Code Playgroud)

gradle抛出一个例外.

android gradle android-gradle-plugin

6
推荐指数
1
解决办法
3215
查看次数

使用 Gradle Kotlin-DSL 时,如何使用flavorDimensions为每种风味组合设置不同的applicationId?

我正在使用 Kotlinscript 文件将 Android 应用程序转换为 Gradle Kotlin-DSL。

我在转换逻辑时遇到问题applicationId。我们不使用defaultConfigurationwith applicationIdplus 各种applicationIdSuffix口味来表达我们的口味,而是使用自定义逻辑。这个逻辑在这个 SO 答案中进行了描述,下面是常规代码:

flavorDimensions "price", "dataset"

productFlavors {
    free { dimension "price" }
    paid { dimension "price" }
    dataset1 { dimension "dataset" }
    dataset2 { dimension "dataset" }
}

android.applicationVariants.all { variant ->
    def mergedFlavor = variant.mergedFlavor
    switch (variant.flavorName) {
        case "freeDataset1":
            mergedFlavor.setApplicationId("com.beansys.freeappdataset1")
            break
        case "freeDataset2":
            mergedFlavor.setApplicationId("com.beansys.freedataset2")
            break
        case "paidDataset1":
            mergedFlavor.setApplicationId("com.beansys.dataset1paid")  
            break
        case "paidDataset2":
            mergedFlavor.setApplicationId("com.beansys.mypaiddataset2")
            break
    }
}
Run Code Online (Sandbox Code Playgroud)

对于 kotlin,我无法改变groovy 中的类似applicationId …

android gradle gradle-kotlin-dsl

6
推荐指数
1
解决办法
3319
查看次数