Android - 将两个构建类型设置到同一个源文件夹

Android - Set two built types to the same source folder

直到最近,我们的 Android 应用程序只有两个构建类型 debugrelease。我们刚刚添加了一个 qa 构建类型,我希望 将 qa 构建类型指向调试源代码 ,这样我就不必复制代码了。这可能吗?

qa 和 debug 的主要区别在于 Proguard。我们的 build.gradle 文件如下所示:

productFlavors {
        dev {
            minSdkVersion 21
        }
        prod {
            minSdkVersion 14
        }
    }

buildTypes {
    debug { 
        // no proguard
        // use debug code
    }
    qa { 
        // proguard
        // use debug code
    }
    release { 
        // proguard
        // use release code
    }
}

文件结构如下所示:

src
├── debug
│   ├── assets
│   ├── java
│   └── res
├── main
│   ├── java
│   └── res
├── release
│   ├── assets
│   ├── java
│   └── res

我试过使用 sourceSets 但它似乎不起作用:

sourceSets {
    qa {
        java.srcDirs = ['src/debug/java']
        res.srcDirs = ['src/debug/res']
    }
}

按照这些思路应该可以帮助您:

android {
    ...

    buildTypes {
        qa {
            minifyEnabled true
        }
    }
    sourceSets {
        qa {
            java {
                srcDirs = ['src/main/java']
            }
        }
    }

    ...

}

虽然进一步检查这似乎与上面的示例相同,但我粘贴的格式确实适用于我 - 也许我遗漏了差异或者可能是其他原因。

您可以随时破解 build.gradle 并粘贴类似这样的内容以确保您的更改已生效:

import static groovy.json.JsonOutput.*
println(
    prettyPrint(toJson(
        android.sourceSets.collectEntries {ss -> [ss.name, ss.java.toString()]}
    ))
)

我是如此接近。我只需要添加 android 清单文件和资产文件夹的位置。

sourceSets {
    qa {
        manifest.srcFile 'src/debug/AndroidManifest.xml'
        java.srcDirs = ['src/debug/java']
        res.srcDirs = ['src/debug/res']
        assets.srcDirs = ['src/debug/assets']
    }
}