BaseFlavor

interface BaseFlavor : VariantDimension, HasInitWith

Known direct subclasses
ApplicationBaseFlavor
DefaultConfig

Specifies defaults for variant properties that the Android plugin applies to all build variants.

DynamicFeatureBaseFlavor

Shared properties between DSL objects ProductFlavor and DefaultConfig for dynamic features.

LibraryBaseFlavor
ProductFlavor

Encapsulates all product flavors properties for this project.

TestBaseFlavor
Known indirect subclasses
ApplicationDefaultConfig

Specifies defaults for properties that the Android application plugin applies to all build variants.

ApplicationProductFlavor

Encapsulates all product flavors properties for application projects.

DynamicFeatureDefaultConfig

Specifies defaults for properties that the Android dynamic-feature plugin applies to all build variants.

DynamicFeatureProductFlavor

Encapsulates all product flavors properties for dynamic feature projects.

LibraryDefaultConfig

Specifies defaults for properties that the Android library plugin applies to all build variants.

LibraryProductFlavor

Encapsulates all product flavors properties for library projects.

TestDefaultConfig

Specifies defaults for properties that the Android test plugin applies to all build variants.

TestProductFlavor

Encapsulates all product flavors properties for test projects.


Shared properties between DSL objects ProductFlavor and DefaultConfig

Summary

Public functions

@Incubating String

The name of the flavor.

@Incubating Unit

Copies all properties from the given flavor.

@Incubating Unit
minSdkVersion(minSdkVersion: Int)

This function is deprecated. Replaced by minSdk property

@Incubating Unit
minSdkVersion(minSdkVersion: String?)

This function is deprecated. Replaced by minSdkPreview property

@Incubating Unit
missingDimensionStrategy(dimension: String, requestedValue: String)

Specifies a flavor that the plugin should try to use from a given dimension in a dependency.

@Incubating Unit
missingDimensionStrategy(
    dimension: String,
    vararg requestedValues: String
)

Specifies a sorted list of flavors that the plugin should try to use from a given dimension in a dependency.

@Incubating Unit
missingDimensionStrategy(
    dimension: String,
    requestedValues: List<String>
)

Specifies a sorted list of flavors that the plugin should try to use from a given dimension in a dependency.

@Incubating Unit
resConfig(config: String)

This function is deprecated. Replaced by resourceConfigurations field

@Incubating Unit

This function is deprecated. Replaced by resourceConfigurations field

@Incubating Unit
resConfigs(vararg config: String)

This function is deprecated. Replaced by resourceConfigurations field

@Incubating Unit
setMinSdkVersion(minSdkVersion: Int)

This function is deprecated. Replaced by minSdk property

@Incubating Unit
setMinSdkVersion(minSdkVersion: String?)

This function is deprecated. Replaced by minSdkPreview property

@Incubating Any?
setTestFunctionalTest(testFunctionalTest: Boolean)

This function is deprecated. Replaced by testFunctionalTest property

@Incubating Any?
setTestHandleProfiling(testHandleProfiling: Boolean)

This function is deprecated. Replaced by testFunctionalTest property

@Incubating Any?
setTestInstrumentationRunnerArguments(
    testInstrumentationRunnerArguments: MutableMap<StringString>
)

This function is deprecated. Replaced by testInstrumentationRunnerArguments property

@Incubating Unit

This function is deprecated. Replaced by testInstrumentationRunnerArguments property

@Incubating Unit

This function is deprecated. Replaced by testInstrumentationRunnerArguments property

@Incubating Unit

Configures VectorDrawables.

Public properties

Int?

The minimum SDK version.

String?

The minimum SDK version.

Boolean?

Whether the renderscript code should be compiled to generate C/C++ bindings.

Boolean?

Whether the renderscript BLAS support lib should be used to make it compatible with older versions of Android.

Boolean?

Whether the renderscript code should be compiled in support mode to make it compatible with older versions of Android.

Int?

The renderscript target api, or null if not specified.

MutableSet<String>

Specifies a list of alternative resources to keep.

String?

Test application ID.

Boolean?

See instrumentation.

Boolean?

See instrumentation.

String?

Test instrumentation runner class name.

MutableMap<StringString>

Test instrumentation runner custom arguments.

VectorDrawables

Options to configure the build-time support for vector drawables.

Boolean?

Whether to enable unbundling mode for embedded wear app.

Inherited functions

From class com.android.build.api.dsl.VariantDimension
@Incubating Unit
addManifestPlaceholders(manifestPlaceholders: Map<StringAny>)

Adds manifest placeholders.

@Incubating Unit
buildConfigField(type: String, name: String, value: String)

Adds a new field to the generated BuildConfig class.

@Incubating Unit

Encapsulates per-variant CMake and ndk-build configurations for your external native build.

Unit

Options for configuring Java compilation.

@Incubating Unit

Encapsulates per-variant configurations for the NDK, such as ABI filters.

@Incubating Unit
@Incubating Any
proguardFile(proguardFile: Any)

Adds a new ProGuard configuration file.

@Incubating Any
proguardFiles(vararg files: Any)

Adds new ProGuard configuration files.

@Incubating Unit
resValue(type: String, name: String, value: String)

Adds a new generated resource.

@Incubating Void?
setManifestPlaceholders(manifestPlaceholders: Map<StringAny>)

This function is deprecated. Use manifestPlaceholders property instead

@Incubating Any
setProguardFiles(proguardFileIterable: Iterable<*>)

Replaces the ProGuard configuration files.

@Incubating Unit

Configure the shader compiler options.

@Incubating Any
testProguardFile(proguardFile: Any)

Adds a proguard rule file to be used when processing test code.

@Incubating Any
testProguardFiles(vararg proguardFiles: Any)

Adds proguard rule files to be used when processing test code.

Inherited properties

From class com.android.build.api.dsl.VariantDimension
ExternalNativeBuildOptions

Encapsulates per-variant CMake and ndk-build configurations for your external native build.

JavaCompileOptions

Options for configuring Java compilation.

MutableMap<StringAny>

The manifest placeholders.

File?

This property is deprecated. This property is deprecated.

File?

Text file with additional ProGuard rules to be used to determine which classes are compiled into the main dex file.

Ndk

Encapsulates per-variant configurations for the NDK, such as ABI filters.

Optimization
MutableList<File>

Specifies the ProGuard configuration files that the plugin should use.

Shaders

Options for configuring the shader compiler.

MutableList<File>

The collection of proguard rule files to be used when processing test code.

Public functions

getName

@Incubating
fun getName(): String

The name of the flavor.

initWith

@Incubating
fun initWith(that: BaseFlavor): Unit

Copies all properties from the given flavor.

It can be used like this:

android.productFlavors {
paid {
initWith free
// customize...
}
}

minSdkVersion

@Incubating
fun minSdkVersion(minSdkVersion: Int): Unit

minSdkVersion

@Incubating
fun minSdkVersion(minSdkVersion: String?): Unit

missingDimensionStrategy

@Incubating
fun missingDimensionStrategy(dimension: String, requestedValue: String): Unit

Specifies a flavor that the plugin should try to use from a given dimension in a dependency.

Android plugin 3.0.0 and higher try to match each variant of your module with the same one from its dependencies. For example, consider if both your app and its dependencies include a "tier" /studio/build/build-variants.html#flavor-dimensions, with flavors "free" and "paid". When you build a "freeDebug" version of your app, the plugin tries to match it with "freeDebug" versions of the local library modules the app depends on.

However, there may be situations in which a library dependency includes a flavor dimension that your app does not. For example, consider if a library dependency includes flavors for a "minApi" dimension, but your app includes flavors for only the "tier" dimension. So, when you want to build the "freeDebug" version of your app, the plugin doesn't know whether to use the "minApi23Debug" or "minApi18Debug" version of the dependency, and you'll see an error message similar to the following:

Error:Failed to resolve: Could not resolve project :mylibrary.
Required by:
project :app

In this type of situation, use missingDimensionStrategy in the com.android.build.gradle.internal.dsl.DefaultConfig.html block to specify the default flavor the plugin should select from each missing dimension, as shown in the sample below. You can also override your selection in the com.android.build.gradle.internal.dsl.ProductFlavor.html block, so each flavor can specify a different matching strategy for a missing dimension. (Tip: you can also use this property if you simply want to change the matching strategy for a dimension that exists in both the app and its dependencies.)

// In the app's build.gradle file.
android {
defaultConfig {
// Specifies a flavor that the plugin should try to use from
// a given dimension. The following tells the plugin that, when encountering
// a dependency that includes a "minApi" dimension, it should select the
// "minApi18" flavor.
missingDimensionStrategy 'minApi', 'minApi18'
// You should specify a missingDimensionStrategy property for each
// dimension that exists in a local dependency but not in your app.
missingDimensionStrategy 'abi', 'x86'
}
flavorDimensions 'tier'
productFlavors {
free {
dimension 'tier'
// You can override the default selection at the product flavor
// level by configuring another missingDimensionStrategy property
// for the "minApi" dimension.
missingDimensionStrategy 'minApi', 'minApi23'
}
paid { }
}
}

missingDimensionStrategy

@Incubating
fun missingDimensionStrategy(
    dimension: String,
    vararg requestedValues: String
): Unit

Specifies a sorted list of flavors that the plugin should try to use from a given dimension in a dependency.

Android plugin 3.0.0 and higher try to match each variant of your module with the same one from its dependencies. For example, consider if both your app and its dependencies include a "tier" /studio/build/build-variants.html#flavor-dimensions, with flavors "free" and "paid". When you build a "freeDebug" version of your app, the plugin tries to match it with "freeDebug" versions of the local library modules the app depends on.

However, there may be situations in which a library dependency includes a flavor dimension that your app does not. For example, consider if a library dependency includes flavors for a "minApi" dimension, but your app includes flavors for only the "tier" dimension. So, when you want to build the "freeDebug" version of your app, the plugin doesn't know whether to use the "minApi23Debug" or "minApi18Debug" version of the dependency, and you'll see an error message similar to the following:

Error:Failed to resolve: Could not resolve project :mylibrary.
Required by:
project :app

In this type of situation, use missingDimensionStrategy in the com.android.build.gradle.internal.dsl.DefaultConfig.html block to specify the default flavor the plugin should select from each missing dimension, as shown in the sample below. You can also override your selection in the com.android.build.gradle.internal.dsl.ProductFlavor.html block, so each flavor can specify a different matching strategy for a missing dimension. (Tip: you can also use this property if you simply want to change the matching strategy for a dimension that exists in both the app and its dependencies.)

// In the app's build.gradle file.
android {
defaultConfig {
// Specifies a flavor that the plugin should try to use from
// a given dimension. The following tells the plugin that, when encountering
// a dependency that includes a "minApi" dimension, it should select the
// "minApi18" flavor.
missingDimensionStrategy 'minApi', 'minApi18'
// You should specify a missingDimensionStrategy property for each
// dimension that exists in a local dependency but not in your app.
missingDimensionStrategy 'abi', 'x86'
}
flavorDimensions 'tier'
productFlavors {
free {
dimension 'tier'
// You can override the default selection at the product flavor
// level by configuring another missingDimensionStrategy property
// for the "minApi" dimension.
missingDimensionStrategy 'minApi', 'minApi23'
}
paid { }
}
}

missingDimensionStrategy

@Incubating
fun missingDimensionStrategy(
    dimension: String,
    requestedValues: List<String>
): Unit

Specifies a sorted list of flavors that the plugin should try to use from a given dimension in a dependency.

Android plugin 3.0.0 and higher try to match each variant of your module with the same one from its dependencies. For example, consider if both your app and its dependencies include a "tier" /studio/build/build-variants.html#flavor-dimensions, with flavors "free" and "paid". When you build a "freeDebug" version of your app, the plugin tries to match it with "freeDebug" versions of the local library modules the app depends on.

However, there may be situations in which a library dependency includes a flavor dimension that your app does not. For example, consider if a library dependency includes flavors for a "minApi" dimension, but your app includes flavors for only the "tier" dimension. So, when you want to build the "freeDebug" version of your app, the plugin doesn't know whether to use the "minApi23Debug" or "minApi18Debug" version of the dependency, and you'll see an error message similar to the following:

Error:Failed to resolve: Could not resolve project :mylibrary.
Required by:
project :app

In this type of situation, use missingDimensionStrategy in the com.android.build.gradle.internal.dsl.DefaultConfig.html block to specify the default flavor the plugin should select from each missing dimension, as shown in the sample below. You can also override your selection in the com.android.build.gradle.internal.dsl.ProductFlavor.html block, so each flavor can specify a different matching strategy for a missing dimension. (Tip: you can also use this property if you simply want to change the matching strategy for a dimension that exists in both the app and its dependencies.)

// In the app's build.gradle file.
android {
defaultConfig {
// Specifies a flavor that the plugin should try to use from
// a given dimension. The following tells the plugin that, when encountering
// a dependency that includes a "minApi" dimension, it should select the
// "minApi18" flavor.
missingDimensionStrategy 'minApi', 'minApi18'
// You should specify a missingDimensionStrategy property for each
// dimension that exists in a local dependency but not in your app.
missingDimensionStrategy 'abi', 'x86'
}
flavorDimensions 'tier'
productFlavors {
free {
dimension 'tier'
// You can override the default selection at the product flavor
// level by configuring another missingDimensionStrategy property
// for the "minApi" dimension.
missingDimensionStrategy 'minApi', 'minApi23'
}
paid { }
}
}

resConfig

@Incubating
fun resConfig(config: String): Unit

resConfigs

@Incubating
fun resConfigs(config: Collection<String>): Unit

resConfigs

@Incubating
fun resConfigs(vararg config: String): Unit

setMinSdkVersion

@Incubating
fun setMinSdkVersion(minSdkVersion: Int): Unit

setMinSdkVersion

@Incubating
fun setMinSdkVersion(minSdkVersion: String?): Unit

setTestFunctionalTest

@Incubating
fun setTestFunctionalTest(testFunctionalTest: Boolean): Any?

setTestHandleProfiling

@Incubating
fun setTestHandleProfiling(testHandleProfiling: Boolean): Any?

setTestInstrumentationRunnerArguments

@Incubating
fun setTestInstrumentationRunnerArguments(
    testInstrumentationRunnerArguments: MutableMap<StringString>
): Any?

testInstrumentationRunnerArgument

@Incubating
fun testInstrumentationRunnerArgument(key: String, value: String): Unit

testInstrumentationRunnerArguments

@Incubating
fun testInstrumentationRunnerArguments(args: Map<StringString>): Unit

vectorDrawables

@Incubating
fun vectorDrawables(action: @ExtensionFunctionType VectorDrawables.() -> Unit): Unit

Configures VectorDrawables.

Public properties

minSdk

var minSdkInt?

The minimum SDK version. Setting this it will override previous calls of minSdk and minSdkPreview setters. Only one of minSdk and minSdkPreview should be set.

See uses-sdk element documentation.

minSdkPreview

var minSdkPreviewString?

The minimum SDK version. Setting this it will override previous calls of minSdk and minSdkPreview setters. Only one of minSdk and minSdkPreview should be set.

See uses-sdk element documentation.

renderscriptNdkModeEnabled

var renderscriptNdkModeEnabledBoolean?

Whether the renderscript code should be compiled to generate C/C++ bindings. True for C/C++ generation, false for Java, null if not specified.

renderscriptSupportModeBlasEnabled

var renderscriptSupportModeBlasEnabledBoolean?

Whether the renderscript BLAS support lib should be used to make it compatible with older versions of Android.

True if BLAS support lib is enabled, false if not, and null if not specified.

renderscriptSupportModeEnabled

var renderscriptSupportModeEnabledBoolean?

Whether the renderscript code should be compiled in support mode to make it compatible with older versions of Android.

True if support mode is enabled, false if not, and null if not specified.

renderscriptTargetApi

var renderscriptTargetApiInt?

The renderscript target api, or null if not specified. This is only the value set on this product flavor.

resourceConfigurations

val resourceConfigurationsMutableSet<String>

Specifies a list of alternative resources to keep.

For example, if you are using a library that includes language resources (such as AppCompat or Google Play Services), then your APK includes all translated language strings for the messages in those libraries whether the rest of your app is translated to the same languages or not. If you'd like to keep only the languages that your app officially supports, you can specify those languages using the resourceConfigurations property, as shown in the sample below. Any resources for languages not specified are removed.

android {
defaultConfig {
...
// Keeps language resources for only the locales specified below.
resourceConfigurations += ["en", "fr"]
}
}

You can also use this property to filter resources for screen densities. For example, specifying hdpi removes all other screen density resources (such as mdpi, xhdpi, etc) from the final APK.

Note:auto is no longer supported because it created a number of issues with multi-module projects. Instead, you should specify a list of locales that your app supports, as shown in the sample above. Android plugin 3.1.0 and higher ignore the auto argument, and Gradle packages all string resources your app and its dependencies provide.

To learn more, see Remove unused alternative resources.

testApplicationId

var testApplicationIdString?

Test application ID.

See Set the Application ID

testFunctionalTest

var testFunctionalTestBoolean?

See instrumentation.

testHandleProfiling

var testHandleProfilingBoolean?

See instrumentation.

testInstrumentationRunner

var testInstrumentationRunnerString?

Test instrumentation runner class name.

This is a fully qualified class name of the runner, e.g. android.test.InstrumentationTestRunner

See instrumentation.

testInstrumentationRunnerArguments

val testInstrumentationRunnerArgumentsMutableMap<StringString>

Test instrumentation runner custom arguments.

e.g. [key: "value"] will give adb shell am instrument -w -e key value com.example...

See instrumentation.

Test runner arguments can also be specified from the command line:

./gradlew connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.size=medium
./gradlew connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.foo=bar

vectorDrawables

val vectorDrawablesVectorDrawables

Options to configure the build-time support for vector drawables.

wearAppUnbundled

var wearAppUnbundledBoolean?

Whether to enable unbundling mode for embedded wear app.

If true, this enables the app to transition from an embedded wear app to one distributed by the play store directly.