Android Studio:如何删除/过滤构建变体以进行默认调试和发布buildTypes,并仅保留使用自定义buildTypes的变体?

And*_*tel 24 android gradle android-studio android-build-type

我创建了自定义buildTypes,如下所示:

 buildTypes {
        releasefree.initWith(buildTypes.release)
        releasefree {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        releasepro.initWith(buildTypes.release)
        releasepro {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            applicationIdSuffix ".pro"
        }
        debugfree.initWith(buildTypes.debug)
        debugfree {
            shrinkResources true
            applicationIdSuffix ".debug"
            debuggable true
        }
        debugpro.initWith(buildTypes.debug)
        debugpro {
            shrinkResources true
            applicationIdSuffix ".pro.debug"
            debuggable true
        }
    }
Run Code Online (Sandbox Code Playgroud)

我不会使用默认的调试和发布构建类型,并希望从构建变体列表中删除它们.我有几种口味,变种列表太大了.删除具有默认调试和发布类型的变体将有所帮助,因为我永远不会使用它们.

我尝试使用变体过滤器如下,但它不起作用

android.variantFilter { variant ->
    if(variant.buildType.name.endsWith('Release') || variant.buildType.name.endsWith('Debug')) {
        variant.setIgnore(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在过滤变体的方式是否有问题,或者是否无法使用默认的调试和发布版本类型删除变体.

And*_*tel 26

弄清楚了.对我而言,这是一个非常愚蠢的错误.上述变体过滤器确实有效.这些名字都是小写的,而我所比较的字符串中的大写字母是罪魁祸首.

更改为以下(使比较字符串小写)使其按预期工作:

android.variantFilter { variant ->
    if(variant.buildType.name.endsWith('release') || variant.buildType.name.endsWith('debug')) {
        variant.setIgnore(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

或这个

android.variantFilter { variant ->
    if(variant.buildType.name.equals('release') || variant.buildType.name.equals('debug')) {
        variant.setIgnore(true);
    }
}
Run Code Online (Sandbox Code Playgroud)


2BA*_*BAB 5

使用新变体 API,它变成:

androidComponents {
    beforeVariants(selector().withBuildType("release")) { variantBuilder ->
        variantBuilder.enable = false
    }
}
Run Code Online (Sandbox Code Playgroud)

ref doc (字段名称过去是启用而不是启用,但已弃用)