我的应用程序有两种风格,为简单起见,请将其称为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 类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']
}
}
然后我只需创建必要的文件夹来放置相应的文件,然后它都会自然地从那里工作吗?例如,如果我尝试执行一种方法并且它只存在于一种口味中,它如何知道我已经包含了两种风格的类?
(另外,我是否必须明确提及资产文件夹?因为我也有"/src/main/assets")
正确的方法吗:
不。
只需创建src/flavora/res/
、src/flavora/java/
、src/flavorb/res/
和src/flavorb/java/
,然后把东西放进去。它们将自动添加到相应的构建路径中。您不需要调整srcDirs
。
例如,如果我尝试执行一种方法并且它只存在于一种口味中,它如何知道我已经包含了两种风格的类?
这是一个构建错误。使用 Java 代码,如果你想让它成为风格:
- 同一类不能存在于
main
- 从
main
引用的任何内容都必须存在于flavora
和flavorb
因此,例如,如果您在src/flavora/java/
内部和src/flavorb/java/
内部的某个地方有一个AdStrategy
类,那么您也不会在src/main/java/
中AdStrategy
。而main
引用的关于AdStrategy
(构造函数、方法等)的任何内容都必须存在于flavora
和flavorb
的AdStrategy
实现中。在构建时,当您构建flavora
时,将自动使用src/main/java/
树和src/flavora/java/
树,并且您在main
中引用的任何内容都需要解决(对于flavorb
构建也是如此)。