ApplicationBaseFlavor

interface ApplicationBaseFlavor : BaseFlavor, ApplicationVariantDimension
ApplicationDefaultConfig

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

ApplicationProductFlavor

Encapsulates all product flavors properties for application projects.

Summary

Public methods

abstract Unit
maxSdkVersion(maxSdkVersion: Int)

abstract Unit
setTargetSdkVersion(targetSdkVersion: String?)

abstract Unit
targetSdkVersion(targetSdkVersion: Int)

abstract Unit
targetSdkVersion(targetSdkVersion: String?)

Inherited functions

Unit addManifestPlaceholders(manifestPlaceholders: Map<String, Any>)

Adds manifest placeholders.

See Inject Build Variables into the Manifest.

Unit addManifestPlaceholders(manifestPlaceholders: Map<String, Any>)

Adds manifest placeholders.

See Inject Build Variables into the Manifest.

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

Adds a new field to the generated BuildConfig class.

The field is generated as: <type> <name> = <value>;

This means each of these must have valid Java content. If the type is a String, then the value should include quotes.

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

Adds a new field to the generated BuildConfig class.

The field is generated as: <type> <name> = <value>;

This means each of these must have valid Java content. If the type is a String, then the value should include quotes.

Unit externalNativeBuild(action: ExternalNativeBuildOptions.() -> Unit)

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

To learn more, see Add C and C++ Code to Your Project.

Unit externalNativeBuild(action: ExternalNativeBuildOptions.() -> Unit)

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

To learn more, see Add C and C++ Code to Your Project.

Unit javaCompileOptions(action: JavaCompileOptions.() -> Unit)

Options for configuring Java compilation.

Unit javaCompileOptions(action: JavaCompileOptions.() -> Unit)

Options for configuring Java compilation.

Unit ndk(action: Ndk.() -> Unit)

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

Unit ndk(action: Ndk.() -> Unit)

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

Any proguardFile(proguardFile: Any)

Adds a new ProGuard configuration file.

proguardFile getDefaultProguardFile('proguard-android.txt')

There are two ProGuard rules files that ship with the Android plugin and are used by default:

  • proguard-android.txt
  • proguard-android-optimize.txt

proguard-android-optimize.txt is identical to proguard-android.txt, except with optimizations enabled. You can use getDefaultProguardFileString to return the full path of the files.

This method has a return value for legacy reasons.

Any proguardFile(proguardFile: Any)

Adds a new ProGuard configuration file.

proguardFile getDefaultProguardFile('proguard-android.txt')

There are two ProGuard rules files that ship with the Android plugin and are used by default:

  • proguard-android.txt
  • proguard-android-optimize.txt

proguard-android-optimize.txt is identical to proguard-android.txt, except with optimizations enabled. You can use getDefaultProguardFileString to return the full path of the files.

This method has a return value for legacy reasons.

Any proguardFiles(vararg files: Any)

Adds new ProGuard configuration files.

There are two ProGuard rules files that ship with the Android plugin and are used by default:

  • proguard-android.txt
  • proguard-android-optimize.txt

proguard-android-optimize.txt is identical to proguard-android.txt, except with optimizations enabled. You can use getDefaultProguardFileString to return the full path of the files.

This method has a return value for legacy reasons.

Any proguardFiles(vararg files: Any)

Adds new ProGuard configuration files.

There are two ProGuard rules files that ship with the Android plugin and are used by default:

  • proguard-android.txt
  • proguard-android-optimize.txt

proguard-android-optimize.txt is identical to proguard-android.txt, except with optimizations enabled. You can use getDefaultProguardFileString to return the full path of the files.

This method has a return value for legacy reasons.

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

Adds a new generated resource.

This is equivalent to specifying a resource in res/values.

See Resource Types.

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

Adds a new generated resource.

This is equivalent to specifying a resource in res/values.

See Resource Types.

Void? setManifestPlaceholders(manifestPlaceholders: Map<String, Any>)

Void? setManifestPlaceholders(manifestPlaceholders: Map<String, Any>)

Any setProguardFiles(proguardFileIterable: Iterable<*>)

Replaces the ProGuard configuration files.

This method has a return value for legacy reasons.

Any setProguardFiles(proguardFileIterable: Iterable<*>)

Replaces the ProGuard configuration files.

This method has a return value for legacy reasons.

Unit shaders(action: Shaders.() -> Unit)

Configure the shader compiler options.

Unit shaders(action: Shaders.() -> Unit)

Configure the shader compiler options.

Any testProguardFile(proguardFile: Any)

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

Test code needs to be processed to apply the same obfuscation as was done to main code.

This method has a return value for legacy reasons.

Any testProguardFile(proguardFile: Any)

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

Test code needs to be processed to apply the same obfuscation as was done to main code.

This method has a return value for legacy reasons.

Any testProguardFiles(vararg proguardFiles: Any)

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

Test code needs to be processed to apply the same obfuscation as was done to main code.

This method has a return value for legacy reasons.

Any testProguardFiles(vararg proguardFiles: Any)

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

Test code needs to be processed to apply the same obfuscation as was done to main code.

This method has a return value for legacy reasons.

String getName()

The name of the flavor.

Unit initWith(that: BaseFlavor)

Copies all properties from the given flavor.

It can be used like this:

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

Unit minSdkVersion(minSdkVersion: Int)

Unit minSdkVersion(minSdkVersion: String?)

Unit missingDimensionStrategy(dimension: String, requestedValue: String)

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" flavor dimension, 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 flavordimension 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 defaultConfig 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 productFlavors 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 { }
    }
}

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.

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" flavor dimension, 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 flavordimension 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 defaultConfig 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 productFlavors 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 { }
    }
}

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.

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" flavor dimension, 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 flavordimension 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 defaultConfig 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 productFlavors 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 { }
    }
}

Unit resConfig(config: String)

Unit resConfigs(config: Collection<String>)

Unit resConfigs(vararg config: String)

Unit setMinSdkVersion(minSdkVersion: Int)

Unit setMinSdkVersion(minSdkVersion: String?)

Any? setTestFunctionalTest(testFunctionalTest: Boolean)

Any? setTestHandleProfiling(testHandleProfiling: Boolean)

Any? setTestInstrumentationRunnerArguments(testInstrumentationRunnerArguments: MutableMap<String, String>)

Unit testInstrumentationRunnerArgument(key: String, value: String)

Unit testInstrumentationRunnerArguments(args: Map<String, String>)

Unit vectorDrawables(action: VectorDrawables.() -> Unit)

Configures VectorDrawables.

Properties

abstract String?

The application ID.

abstract Int?

The maxSdkVersion, or null if not specified.

abstract Int?

The target SDK version.

abstract String?

The target SDK version.

abstract Int?

Version code.

abstract String?

Version name.

Inherited properties

String? applicationIdSuffix

Application id suffix. It is appended to the "base" application id when calculating the final application id for a variant.

In case there are product flavor dimensions specified, the final application id suffix will contain the suffix from the default product flavor, followed by the suffix from product flavor of the first dimension, second dimension and so on. All of these will have a dot in between e.g. &quot;defaultSuffix.dimension1Suffix.dimensions2Suffix&quot;.

Boolean? multiDexEnabled

Returns whether multi-dex is enabled.

This can be null if the flag is not set, in which case the default value is used.

ApkSigningConfig? signingConfig

The associated signing config or null if none are set on the variant dimension.

String? versionNameSuffix

Version name suffix. It is appended to the "base" version name when calculating the final version name for a variant.

In case there are product flavor dimensions specified, the final version name suffix will contain the suffix from the default product flavor, followed by the suffix from product flavor of the first dimension, second dimension and so on.

ExternalNativeBuildOptions externalNativeBuild

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

To learn more, see Add C and C++ Code to Your Project.

ExternalNativeBuildOptions externalNativeBuild

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

To learn more, see Add C and C++ Code to Your Project.

JavaCompileOptions javaCompileOptions

Options for configuring Java compilation.

JavaCompileOptions javaCompileOptions

Options for configuring Java compilation.

MutableMap<String, Any> manifestPlaceholders

The manifest placeholders.

See Inject Build Variables into the Manifest.

MutableMap<String, Any> manifestPlaceholders

The manifest placeholders.

See Inject Build Variables into the Manifest.

File? multiDexKeepFile

Text file that specifies additional classes that will be compiled into the main dex file.

Classes specified in the file are appended to the main dex classes computed using aapt.

If set, the file should contain one class per line, in the following format: com/example/MyClass.class

File? multiDexKeepFile

Text file that specifies additional classes that will be compiled into the main dex file.

Classes specified in the file are appended to the main dex classes computed using aapt.

If set, the file should contain one class per line, in the following format: com/example/MyClass.class

File? multiDexKeepProguard

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

If set, rules from this file are used in combination with the default rules used by the build system.

File? multiDexKeepProguard

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

If set, rules from this file are used in combination with the default rules used by the build system.

Ndk ndk

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

Ndk ndk

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

MutableList<File> proguardFiles

Specifies the ProGuard configuration files that the plugin should use.

There are two ProGuard rules files that ship with the Android plugin and are used by default:

  • proguard-android.txt
  • proguard-android-optimize.txt

proguard-android-optimize.txt is identical to proguard-android.txt, except with optimizations enabled. You can use getDefaultProguardFileString to return the full path of the files.

MutableList<File> proguardFiles

Specifies the ProGuard configuration files that the plugin should use.

There are two ProGuard rules files that ship with the Android plugin and are used by default:

  • proguard-android.txt
  • proguard-android-optimize.txt

proguard-android-optimize.txt is identical to proguard-android.txt, except with optimizations enabled. You can use getDefaultProguardFileString to return the full path of the files.

Shaders shaders

Options for configuring the shader compiler.

Shaders shaders

Options for configuring the shader compiler.

MutableList<File> testProguardFiles

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

Test code needs to be processed to apply the same obfuscation as was done to main code.

MutableList<File> testProguardFiles

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

Test code needs to be processed to apply the same obfuscation as was done to main code.

Int? minSdk

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.

String? minSdkPreview

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.

Boolean? renderscriptNdkModeEnabled

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

Boolean? renderscriptSupportModeBlasEnabled

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.

Boolean? renderscriptSupportModeEnabled

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.

Int? renderscriptTargetApi

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

MutableSet<String> resourceConfigurations

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.

String? testApplicationId

Test application ID.

See Set the Application ID

Boolean? testFunctionalTest

See instrumentation.

Boolean? testHandleProfiling

See instrumentation.

String? testInstrumentationRunner

Test instrumentation runner class name.

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

See instrumentation.

MutableMap<String, String> testInstrumentationRunnerArguments

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 vectorDrawables

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

Boolean? wearAppUnbundled

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.

Public methods

maxSdkVersion

@Incubating abstract fun maxSdkVersion(maxSdkVersion: Int): Unit

Deprecated.

setTargetSdkVersion

@Incubating abstract fun setTargetSdkVersion(targetSdkVersion: String?): Unit

Deprecated.

targetSdkVersion

@Incubating abstract fun targetSdkVersion(targetSdkVersion: Int): Unit

Deprecated.

targetSdkVersion

@Incubating abstract fun targetSdkVersion(targetSdkVersion: String?): Unit

Deprecated.

Properties

applicationId

abstract var applicationId: String?

The application ID.

See Set the Application ID

maxSdk

abstract var maxSdk: Int?

The maxSdkVersion, or null if not specified. This is only the value set on this produce flavor.

See uses-sdk element documentation.

targetSdk

abstract var targetSdk: Int?

The target SDK version. Setting this it will override previous calls of targetSdk and targetSdkPreview setters. Only one of targetSdk and targetSdkPreview should be set.

See uses-sdk element documentation.

targetSdkPreview

abstract var targetSdkPreview: String?

The target SDK version. Setting this it will override previous calls of targetSdk and targetSdkPreview setters. Only one of targetSdk and targetSdkPreview should be set.

See uses-sdk element documentation.

versionCode

abstract var versionCode: Int?

Version code.

See Versioning Your Application

versionName

abstract var versionName: String?

Version name.

See Versioning Your Application