产品风味结构

Product Flavor structure

我有一个项目使用了大约 30 种产品口味。除了 "main" 代码之外,flavors 没有太多内容,只是一些独特的资源。由于有这么多,我想像这样构建我的代码目录以使其更有条理:

但是当它们位于与 "main" 文件夹不同的级别时,构建无法识别它们。有什么方法可以使它工作吗?

I have a project that uses ~30 product flavors

再加一个,你就会匹配 Baskin-Robbins' original ~31 flavors

But the build doesn't recognize the flavors when they are on a different level than the "main" folder. Is there any way I can make this work?

您可以在模块的 build.gradle 文件中覆盖源代码的来源。虽然我没有针对您的场景尝试过它(仅用于使用 Gradle 构建 Eclipse 样式的项目),但像这样的东西应该可行:

android {
    // lots of cool stuff here

    sourceSets {
        flavor1 {
            manifest.srcFile 'src/productFlavors/flavor1/AndroidManifest.xml'
            java.srcDirs = ['src/productFlavors/flavor1/java']
            aidl.srcDirs = ['src/productFlavors/flavor1/aidl']
            res.srcDirs = ['src/productFlavors/flavor1/res']
            assets.srcDirs = ['src/productFlavors/flavor1/assets']
        }

        // lather, rinse, repeat
    }
}

如果您坚持 src/productFlavors/.../ 的固定模式(其中 ... 是风味名称),您可能可以使用一些 Groovy 脚本来迭代数组风味名称并相应地连接源集。