构建不能识别产品风格的types特定的文件夹

我已经配置我的项目有多个产品口味。 我在我的模块build.gradle有以下代码:

 android { // Rest of the configuration omitted for clarity buildTypes { debug { // ... } release { // ... } } productFlavors { paid free } } 

如果我在paidfreedebugrelease创建了一个文件(任何文件:Java,资源……),它就被Android Studio认可了,我可以在我的项目中使用它。

但是,如果在paidDebug (或类似的文件夹)中创建了相同的文件,则在Android Studio中无法识别该文件。 我需要任何额外的配置来运作吗? 这是不支持(还)?

  1. 具有相同名称的源代码文件应该被放置在所有的替代源集中(但不在“主”中)。

    或者:

    app / src / free /java/com/domain/myapp/MainActivity.java
    app / src / paid /java/com/domain/myapp/MainActivity.java

    要么:

    app / src / freeDebug /java/com/domain/myapp/MainActivity.java
    app / src / freeRelease /java/com/domain/myapp/MainActivity.java
    app / src / paidDebug /java/com/domain/myapp/MainActivity.java
    app / src / paidRelease /java/com/domain/myapp/MainActivity.java

  2. 具有相同名称的资源文件可以放置在任何源文件集中,包括“main”。

    app / src / main /res/layout/activity_main.xml
    app / src / paidDebug /res/layout/activity_main.xml
    app / src / paidRelease /res/layout/activity_main.xml

    在这种情况下,当构建“免费”风格时,将使用来自“主”集的布局文件。 但是,在“付费”风格的构建过程中,将使用特定版本的布局。

您可以在build.gradle文件中指定特定的源目录。 例如,要将testFreeRelease添加到unit testing源,并将testFree添加到android集成测试源:

 android { [...] sourceSets { main.java.srcDirs += 'src/main/java' testFreeRelease.java.srcDirs += 'src/testFreeRelease/java' androidTestFree.java.srcDirs += 'src/androidTestFree/java' } } 

这也适用于Kotlin。 只要用kotlin切换java。