使用flavor Dimensions时是否可以排除特定的构建变体?

时间:2015-06-19 17:57:48

标签: android gradle

使用Gradle flavorDimensions时,是否可以排除特定变体? 例如 -

android {
...

flavorDimensions "abi", "version"

productFlavors {
    freeapp {
        flavorDimension "version"
        ...
    }

    x86 {
        flavorDimension "abi"
        ...
    }
}

将创建以下构建变体:

x86的freeapp调试
x86的freeapp释放
臂freeapp调试
在arm-freeapp释放
MIPS-freeapp调试
MIPS-freeapp释放
x86的paidapp调试
x86的paidapp释放
臂paidapp调试
在arm-paidapp释放
MIPS-paidapp调试
mips-paidapp-release

可以手动删除“mips-paidapp-release”吗?

2 个答案:

答案 0 :(得分:9)

从Gradle 0.9开始,您可以应用变体过滤器并对其进行迭代:

productFlavors {
    freeapp {
        dimension "version"
    }

    x86 {
        dimension "abi"
    }

    paidapp {
        dimension "mips"
    }
}

// Loop variants
android.variantFilter { variant ->
    // Loop flavors
    variant.getFlavors().each { flavor ->
        println variant.buildType.name + " " + flavor.name + " " + flavor.dimension
        if (variant.buildType.name.equals('release') &&
                flavor.name.equals('paidapp') &&
                flavor.dimension.equals('mips')) {
            variant.setIgnore(true)
        }
    }
}

注意:我已将flavorDimension更改为dimension,因为后者现在是指定它的首选方式。

注意2:上述说明要求您使用较新的gradle版本:

Project/build.gradle应该包含以下内容:

dependencies {
    classpath 'com.android.tools.build:gradle:1.2.3'
}

虽然Project/app/build.gradle应该有这个:

android {
    buildToolsVersion "22.0.1"
    ...
}

答案 1 :(得分:1)

我就是这样做的:

flavorDimensions "device", "server"

productFlavors {
    emulator {
        dimension = "device"
    }
    phone {
        dimension = "device"
    }
    staging {
        dimension = "server"
    }
    production {
        dimension = "server"
    }
}

android.variantFilter { variant ->
    def device = variant.getFlavors().get(0).name
    def server = variant.getFlavors().get(1).name
    def isRelease = variant.buildType.name.equals('release')
    def isDebug = variant.buildType.name.equals('debug')

    // Disable emulatorProductionRelease build variant
    if (device.equals('emulator') && server.equals('production') && isRelease) {
        variant.setIgnore(true)
    }
}

我喜欢它,因为它易于阅读,您可以针对特定的构建变体。