Android Studio:如何删除/过滤默认的debug和release buildTypes,并仅保留使用自定义buildTypes的变体?

32

我已创建了以下自定义 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
        }
    }

我不打算再使用默认的debug和release构建类型,并希望将它们从构建变体列表中删除。 我有不止几个flavor,而变体列表太大了。 删除具有默认debug和release类型的变体将有所帮助,因为我永远不会使用它们。

我尝试使用以下变体过滤器,但没有成功。

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

我筛选变量的方式是否存在问题,或者说无法删除默认调试和发布版本的变量?

4个回答

38

我想通了。这是我犯的一个非常愚蠢的错误。上述变体过滤器确实有效。名称全部小写,而我进行比较的字符串中的大写字符是罪魁祸首。

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

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

或者这个

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

5
使用新的变量API,它变成了:
androidComponents {
    beforeVariants(selector().withBuildType("release")) { variantBuilder ->
        variantBuilder.enable = false
    }
}

参考文档 (该字段名称以前为“enabled”,但已被弃用)


2
如果您想按名称排除,请使用类似以下的内容。
android.variantFilter { variant ->
    if(variant.name.equals("qaRelease")|| variant.name.equals('something')) {
        variant.setIgnore(true);
    }
}

0

如果你想忽略特定的构建变体,这里是了解详情的内容。

flavorDimensions "client", "server"
productFlavors {
    client1 {
        manifestPlaceholders variant : 'Client 1'
        dimension "client"
        applicationId "com.edupointbd.bb"
    }
    client2 {
        manifestPlaceholders variant : 'Client 2'
        dimension "client"
        applicationId "com.edupointbd.bb"
    }
    dev {
        dimension "server"
    }
    staging {
        dimension "server"
    }
    production {
        dimension "server"
    }
}

variantFilter { variant ->
    def names = variant.flavors*.name
    // To check for a certain build type, use variant.buildType.name == "<buildType>"
    if (names.contains("client1") && names.contains("production")) {
        // Gradle ignores any variants that satisfy the conditions above.
        setIgnore(true)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接