5

我的模块化 Android 项目subprojects在根 build.gradle 中使用,以最小化每个子模块的 build.gradle 中所需的配置。例如,我可以使用它将我们的自定义 buildType 添加到每个模块

subprojects 
    afterEvaluate { project ->

        if (project.plugins.findPlugin('android') ?: project.plugins.findPlugin('android-library')) {
            android {
                buildTypes {
                    qa {
                        initWith debug
                        matchingFallbacks = ['debug']
                    }
                }
            }
        }
    }
} 

我的假设是,如果我还将这个构建配置添加到模块级别 build.gradle 中,它将覆盖项目级别定义的配置。然而,情况似乎并非如此。

If I add the following to my app/build.gradle my app ends up with the suffix 'dev' when the QA buildType is selected.

buildTypes {
        debug {
            applicationIdSuffix = ".dev"
            signingConfig signingConfigs.debug
        }

        qa {
            initWith debug
            applicationIdSuffix = ".qa"
            matchingFallbacks = ['debug']
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

    }

当我尝试在模块中使用特定于 buildType 的 buildConfigFields 时,同样的问题也适用;他们被忽略了。

如何让模块的 buildType 声明覆盖父项目中定义的声明?我阅读了 gradle 文档,它建议使用类似的语法android.buildTypes.qa{...},但是由于“方法” qa 未被识别,这会导致错误。

4

0 回答 0