gpt4 book ai didi

android - gradle 构建变体的文件夹命名约定

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:35:11 25 4
gpt4 key购买 nike

我已经为 gradle 和构建变体苦苦挣扎了一段时间。

我定义了这些构建类型:

  • 调试
  • 发布

还有这些口味:

  • 免费
  • 付费

我如何为特定构建变体定义独特的资源和 Assets ,即。免费调试?例如,我想要四个不同的应用程序名称,具体取决于构建变体,每个变体都有一个不同的图标。

最佳答案

我一直在为同样的问题而苦苦挣扎。起初我在我的源代码控制中使用了两个分支,但是让它们保持同步是一件令人头疼的事情。 Gradle 是一个非常灵活的构建系统,但默认约定并不总是足够的。这是我最终在我的代码库中解决它的方法。

我基本上得到了以下目录结构(简化):

+ src
+ main
| + res
| | + values
| | - strings.xml
| + java
| ...
+ debug
| + free
| | + res
| | + values
| | - strings.xml
| + paid
| + res
| + values
| - strings.xml
+ free
| + res
| | + values
| | - strings.xml
| + java
| ...
+ paid
+ res
| + values
| - strings.xml
+ java
...

在主文件夹中,我保留了两种口味的所有通用内容。在免费文件夹中,我保留了免费版本独有的所有内容(付费版本也一样)。 flavor 文件夹中的文件将覆盖在 main 之上。

默认覆盖规则将通过使用“src”下具有相同名称的文件夹来处理“免费”和“付费”的产品风格。对我来说,问题始于构建类型的叠加。

如果我创建了一个与 flavor 文件夹具有相同结构的调试文件夹,它将覆盖在当前使用的 flavor 文件夹之上。这导致两种风格的调试名称相同,但我希望根据风格使用不同的调试名称。经过一番研究后,我对构建文件进行了以下修改。

...

android {
buildTypes {
debug {
...
}
release {
...
}
}

productFlavors {
free {}
paid {}
}
}

android.applicationVariants.all { variant ->
if (variant.buildType.name == "release") {
...
}
else if (variant.buildType.name == "debug") {
switch (variant.name) {
case "FreeDebug":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/debug/free")
}
break;
case "PaidDebug":
variant.mergeResources.doFirst {
android.sourceSets.debug.setRoot("src/debug/paid")
}
break;
}
}
}

...

现在构建变体将通过首先覆盖以下文件夹来构建:

PaidRelease -> /src/main + /src/paid
PaidDebug -> /src/main + /src/paid + /src/debug/paid

FreeRelease -> /src/main + /src/free
FreeDebug -> /src/main + /src/free + /src/debug/free

关于android - gradle 构建变体的文件夹命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19645451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com