首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分级:多维风味ApplicationId

分级:多维风味ApplicationId
EN

Stack Overflow用户
提问于 2014-10-28 15:39:05
回答 3查看 5.7K关注 0票数 9

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

代码语言:javascript
复制
flavorDimensions "shape", "color"

productFlavors {

     blue {
         flavorDimension "color"
     }

     red {
         flavorDimension "color"
     }

     green {
         flavorDimension "color"
     }


     square {
         flavorDimension "shape"
     }

     circle {
         flavorDimension "shape"
     }

我希望能够为每个变体设置一个不同的applicationId,例如:方形蓝色将有一个与圆圈蓝色不同的applicationId。我不能在颜色维度中设置applicationId,因为每个形状都是相同的。在上面的例子中,我需要有6个不同的applicationIds。这些Ids也不遵循任何模式,它们可能是任何东西。

我在这里看到了答案:How to set different applicationId for each flavor combination using flavorDimensions?,但这意味着我需要手动设置它,这对我的项目是不可行的,因为变体的数量(1000 S)。

我真正想做的是在颜色维度上设置两个应用程序,然后根据其生成时的形状尺寸选择正确的应用程序。我尝试过定义变量,但没有成功,它们只是被最后一个变体覆盖了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-16 01:42:18

Gradle有一个内置的extras property,所以您可以在不定义类的情况下这样做。

会出现这样的情况,可能会犯一两次错误:

代码语言:javascript
复制
productFlavors {
    blue {
        flavorDimension "color"
        ext.squareId = "yourAppId"
        ext.circleId = "yourAppId"
    }

    android.applicationVariants.all { variant ->
        def flavors = variant.getFlavors()
        if (flavors[0].name.equals("square")){
            variant.mergedFlavor.setApplicationId(flavors[1].ext.squareId)
        } ...
    }
票数 1
EN

Stack Overflow用户

发布于 2014-10-29 10:41:06

我在下面的示例中找到了一个解决方案:Gradle Android Plugin - add custom flavor attribute?

如果将这样的类添加到gradle文件中,则可以向productFlavor添加自定义属性

代码语言:javascript
复制
class AppIdExtension {
    String squareId
    String circleId

    AppIdExtension(String sId, String cId){
        squareId = sId
        circleId = cId
    }

    public void setSquareId(String id){
        squareId = id
    }

    public String getSquareId(){
        squareId
    }

    public void setCircleId(String id){
        circleId = id
    }

    public String getCircleId(){
        circleId
    }

}

然后,通过在android { }部分的开头添加以下代码,将其添加到每种风格的扩展中

代码语言:javascript
复制
productFlavors.whenObjectAdded { flavor ->
    flavor.extensions.create("shapeIds", AppIdExtension, "", "")
}

然后,在您的产品风味中,您可以为每种形状类型设置值。

代码语言:javascript
复制
blue {
        flavorDimension "color"
        platformIds.squareId "yourAppId"
        platformIds.circleId "yourAppId"
    }

最后,在productFlavors { }部分之后添加以下内容:

代码语言:javascript
复制
android.variantFilter { variant ->
    def applicationId = ""
    def flavors = variant.getFlavors()

  if(flavors[0].name.equals("square")){
      applicationId = flavors[1].platformIds.squareId
   } else if(flavors[0].name.equals("circle")){
      applicationId = flavors[1].platformIds.circleId
   }

   variant.getDefaultConfig().applicationId applicationId

}

这可能不是实现它的最优雅或最有效的方法,但它对我来说是完美的。现在,我可以在productFlavor部分中添加我的所有I,然后variantFilter根据第一种风格设置正确的applicationId。

票数 0
EN

Stack Overflow用户

发布于 2017-06-16 01:57:52

代码语言:javascript
复制
def appId = "my.custom.package"

if (appId == "some.package") { 
     ..... Change conditions based on the flavors maybe defined more variables
}

defaultConfig {
        applicationId "${appId}"
       ...............
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26612445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档