产品风格和源层次结构



我的应用程序有两种风格,为简单起见,请将其称为flavoraflavorb

productFlavors {
flavora {
resValue "string", 'app_name', "App Name Flavor A"
applicationIdSuffix ".flavora"
}
flavorb {
resValue "string", 'app_name', "App Name Flavor B"
applicationIdSuffix ".flavorb"
}
}

我希望两种风格都使用相同的布局、所有相同的 java 代码、所有相同的资源等,除了我希望flavoraflavorb对布局文件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引用的任何内容都必须存在于flavoraflavorb

因此,例如,如果您在src/flavora/java/内部和src/flavorb/java/内部的某个地方有一个AdStrategy类,那么您也不会在src/main/java/AdStrategymain引用的关于AdStrategy(构造函数、方法等)的任何内容都必须存在于flavoraflavorbAdStrategy实现中。在构建时,当您构建flavora时,将自动使用src/main/java/树和src/flavora/java/树,并且您在main中引用的任何内容都需要解决(对于flavorb构建也是如此)。

最新更新