产品口味和来源层次结构
Product flavors and source hierarchies
我的应用有两种风格,为简单起见,将其称为 flavora
和 flavorb
。
productFlavors {
flavora {
resValue "string", 'app_name', "App Name Flavor A"
applicationIdSuffix ".flavora"
}
flavorb {
resValue "string", 'app_name', "App Name Flavor B"
applicationIdSuffix ".flavorb"
}
}
我希望两种风格都使用所有相同的布局、所有相同的 java 代码、所有相同的资源等等,除了我希望 flavora
和 flavorb
使用不同的布局文件 flavor_dependent_layout.xml
和 Java class FlavorDependentJavaClass
.
的实现
这是正确的做法吗:
sourceSets {
main {
res.srcDirs = ['src/main/res']
java.srcDirs = ['src/main/java']
}
flavora {
res.srcDirs = ['src/flavora/res', 'src/main/res']
java.srcDirs = ['src/flavora/java', 'src/main/java']
}
flavorb {
res.srcDirs = ['src/flavorb/res', 'src/main/res']
java.srcDirs = ['src/flavorb/java', 'src/main/java']
}
}
然后我只需要创建必要的文件夹来放置相应的文件,就可以自然地从那里开始工作了?例如,它怎么知道我已经为两种口味都包含了 class,以防万一我尝试执行一种方法而它只针对一种口味存在?
(此外,我是否必须明确提及资产文件夹?因为我也有“/src/main/assets”)
Is this the correct way to do it:
没有
只需创建 src/flavora/res/
、src/flavora/java/
、src/flavorb/res/
和 src/flavorb/java/
,然后将内容放入其中。它们将自动 添加到适当的构建路径中。您不需要调整 srcDirs
.
How does it know that I've included the class for both flavors in case I try to perform a method and it only exists for one flavor, for example?
这是一个构建错误。使用 Java 代码,如果你想在 flavors 中使用它:
- 相同的class不能存在于
main
中
main
中引用的任何内容必须同时存在于 flavora
和 flavorb
中
因此,例如,如果您在 src/flavora/java/
内某处和 src/flavorb/java/
内某处有一个 AdStrategy
class,您就不会 也 在 src/main/java/
中有 AdStrategy
。 main
在 AdStrategy
上引用的任何内容(构造函数、方法等)都必须存在于 flavora
和 flavorb
对 AdStrategy
的实现中。在构建时,当您构建 flavora
时,会自动使用 src/main/java/
和 src/flavora/java/
树,并且您在 main
中引用的任何内容都需要解析(对于 flavorb
建造)。
我的应用有两种风格,为简单起见,将其称为 flavora
和 flavorb
。
productFlavors {
flavora {
resValue "string", 'app_name', "App Name Flavor A"
applicationIdSuffix ".flavora"
}
flavorb {
resValue "string", 'app_name', "App Name Flavor B"
applicationIdSuffix ".flavorb"
}
}
我希望两种风格都使用所有相同的布局、所有相同的 java 代码、所有相同的资源等等,除了我希望 flavora
和 flavorb
使用不同的布局文件 flavor_dependent_layout.xml
和 Java class FlavorDependentJavaClass
.
这是正确的做法吗:
sourceSets {
main {
res.srcDirs = ['src/main/res']
java.srcDirs = ['src/main/java']
}
flavora {
res.srcDirs = ['src/flavora/res', 'src/main/res']
java.srcDirs = ['src/flavora/java', 'src/main/java']
}
flavorb {
res.srcDirs = ['src/flavorb/res', 'src/main/res']
java.srcDirs = ['src/flavorb/java', 'src/main/java']
}
}
然后我只需要创建必要的文件夹来放置相应的文件,就可以自然地从那里开始工作了?例如,它怎么知道我已经为两种口味都包含了 class,以防万一我尝试执行一种方法而它只针对一种口味存在?
(此外,我是否必须明确提及资产文件夹?因为我也有“/src/main/assets”)
Is this the correct way to do it:
没有
只需创建 src/flavora/res/
、src/flavora/java/
、src/flavorb/res/
和 src/flavorb/java/
,然后将内容放入其中。它们将自动 添加到适当的构建路径中。您不需要调整 srcDirs
.
How does it know that I've included the class for both flavors in case I try to perform a method and it only exists for one flavor, for example?
这是一个构建错误。使用 Java 代码,如果你想在 flavors 中使用它:
- 相同的class不能存在于
main
中
main
中引用的任何内容必须同时存在于flavora
和flavorb
中
因此,例如,如果您在 src/flavora/java/
内某处和 src/flavorb/java/
内某处有一个 AdStrategy
class,您就不会 也 在 src/main/java/
中有 AdStrategy
。 main
在 AdStrategy
上引用的任何内容(构造函数、方法等)都必须存在于 flavora
和 flavorb
对 AdStrategy
的实现中。在构建时,当您构建 flavora
时,会自动使用 src/main/java/
和 src/flavora/java/
树,并且您在 main
中引用的任何内容都需要解析(对于 flavorb
建造)。