使用gradle创建扩展另一个flavor的flavor

3

我有一个Android应用程序,有两个版本,免费版和高级版。我想创建另一个版本,flavorExt,它基于免费版但具有一些额外的功能。我使用gradle中的sourceSets选项完成了这个操作,如下所示:

   sourceSets {
        freeExt {
            java.srcDirs = sourceSets.free.java.srcDirs
            res.srcDirs = sourceSets.free.res.srcDirs
            resources.srcDirs = sourceSets.free.resources.srcDirs
        }
    }

现在我想给freeExt味道添加一些额外的功能,但我不知道是否可能,并且如果可能,如何实现。我已经将flavor源文件夹创建为app/src/freeExt/java/...并添加了必要的文件。我还尝试在gradle的sourceSets条目中添加以下行,但没有成功:
java.srcDirs = sourceSets.free.java.srcDirs

我想在Gradle中做的事情是否可行?如果可以,要如何实现?


有些使用情况下这很有用,但对于大多数情况,如果您在buildFlavor配置中进行了太多操作以至于需要扩展它,那么您可能正在超出它的预期使用范围。如果您确实需要使用它,正如@Tanis.7x所述,维度将是您最好的选择。 - c.dunlap
1个回答

5
我建议为添加的功能创建第二种口味维度。您可以在此处找到有关多个口味维度的文档
您的 build.gradle 文件应如下所示:
android {

    flavorDimensions "tier", "extras"

    productFlavors {
        free {
          dimension "tier"
          ...
        }

        full {
          dimension "tier"
          ...
        }

        withExtras {
          dimension "extras"
          ...
        }

        noExtras {
          dimension "extras"
          ...
        }
    }
}

Android Gradle插件将使用每个维度中的每个flavor的叉积生成变体。因此,您最终将得到一个freeWithExtrasfreeNoExtrasfullWithExtrasfullNoExtras。您不一定需要发布所有四种变体。

这种方法中的withExtras口味不是基于free口味的,而是freeWithExtras变体将包含两种口味的所有代码。我的建议基本上是不要担心扩展现有口味,而是将额外内容抽象成一个新口味。 - Bryan Herbst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接