# Variant

# Variant

<br />

```
interface Variant : ComponentIdentity, Component, HasAndroidResources
```

<br />

Known direct subclasses  
[ApplicationVariant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ApplicationVariant),[DynamicFeatureVariant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DynamicFeatureVariant),[LibraryVariant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/LibraryVariant),[TestVariant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/TestVariant)  

|-------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|
| [ApplicationVariant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ApplicationVariant)       | Properties for the main Variant of an application.                                                                                  |
| [DynamicFeatureVariant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DynamicFeatureVariant) |                                                                                                                                     |
| [LibraryVariant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/LibraryVariant)               | [Variant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant)for Library projects   |
| [TestVariant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/TestVariant)                     | [Variant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant)for test-only modules. |

*** ** * ** ***

Parent interface for all types of variants.

## Summary

|                                                                                                                                                                                                                                                                                                                                                                                      ### Public functions                                                                                                                                                                                                                                                                                                                                                                                      ||
|------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `T?` | `<T : `[Any](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`?> `[getExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#getExtension(java.lang.Class))`(type: `[Class](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Class.html)`<T?>?)` Returns an extension object registered via the[VariantBuilder.registerExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantBuilder#registerExtension(java.lang.Class,kotlin.Any))API or null if none were registered under the passed[type](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#getExtension(java.lang.Class)). |

|                                                                                                                                                                                                                                                                                                                                                                                                                     ### Public properties                                                                                                                                                                                                                                                                                                                                                                                                                     ||
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [MapProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/MapProperty.html)`<`[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[BuildConfigField](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/BuildConfigField)`<`[Serializable](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/Serializable.html)`>>` | [buildConfigFields](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#buildConfigFields()) Variant's[BuildConfigField](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/BuildConfigField)which will be generated in the BuildConfig class.                                                                                     |
| [MapProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/MapProperty.html)`<`[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[Any](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)`>`                                                                                                                                                                | [experimentalProperties](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#experimentalProperties()) Additional per variant experimental properties.                                                                                                                                                                                                                     |
| [ExternalNativeBuild](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ExternalNativeBuild)`?`                                                                                                                                                                                                                                                                                           | [externalNativeBuild](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#externalNativeBuild()) Variant's cmake[ExternalNativeBuild](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ExternalNativeBuild), initialized by merging the product flavor values or null if no cmake external build is configured for this variant. |
| [MapProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/MapProperty.html)`<`[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>`                                                                                                                                                          | [manifestPlaceholders](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#manifestPlaceholders()) [MapProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/MapProperty.html)of the variant's manifest placeholders.                                                                                                                                  |
| [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`?`                                                                                                                                                                                                                                                                                                                                                      | [maxSdkVersion](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#maxSdkVersion()) Gets the maximum supported SDK Version for this variant.                                                                                                                                                                                                                              |
| [AndroidVersion](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidVersion)                                                                                                                                                                                                                                                                                                        | [minSdkVersion](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#minSdkVersion()) Gets the minimum supported SDK Version for this variant.                                                                                                                                                                                                                              |
| [Provider](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/Provider.html)`<`[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>`                                                                                                                                                                                                                                                    | [namespace](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#namespace()) The namespace of the generated R and BuildConfig classes.                                                                                                                                                                                                                                     |
| [List](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)`<`[Component](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Component)`>`                                                                                                                                                                                                                    | [nestedComponents](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#nestedComponents()) List of the components nested in this variant, the returned list will contain:                                                                                                                                                                                                  |
| [Packaging](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Packaging)                                                                                                                                                                                                                                                                                                                  | [packaging](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#packaging()) Variant's packagingOptions, initialized by the corresponding global DSL element.                                                                                                                                                                                                              |
| [ListProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/ListProperty.html)`<`[RegularFile](https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFile.html)`>`                                                                                                                                                                                                                                 | [proguardFiles](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#proguardFiles()) List of proguard configuration files for this variant.                                                                                                                                                                                                                                |
| [AndroidVersion](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidVersion)                                                                                                                                                                                                                                                                                                        | [targetSdkVersion](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#targetSdkVersion()) Gets the target SDK Version for this variant.                                                                                                                                                                                                                                   |
| [UnitTest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/component/UnitTest)`?`                                                                                                                                                                                                                                                                                                               | [unitTest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#unitTest()) Variant's[UnitTest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/component/UnitTest), or null if the unit tests for this variant are disabled.                                                                                                            |

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ### Inherited functions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ||
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| From class[Component](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Component) |------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | ~~[setAsmFramesComputationMode](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Component#setAsmFramesComputationMode(com.android.build.api.instrumentation.FramesComputationMode))~~`(mode: `[FramesComputationMode](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/FramesComputationMode)`?)` **This function is deprecated.**Use the instrumentation block.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | `<ParamT : `[InstrumentationParameters](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/InstrumentationParameters)`?> `~~[transformClassesWith](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Component#transformClassesWith(java.lang.Class,com.android.build.api.instrumentation.InstrumentationScope,kotlin.Function1))~~`(` ` classVisitorFactoryImplClass: `[Class](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Class.html)`<`[AsmClassVisitorFactory](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory)`<ParamT?>?>?,` ` scope: `[InstrumentationScope](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/InstrumentationScope)`?,` ` instrumentationParamsConfig: ((ParamT) `->` `[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)?` `)` **This function is deprecated.**Use the instrumentation block. | |
| From class[HasAndroidResources](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/HasAndroidResources) |-------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [ResValue.Key](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ResValue.Key) | [makeResValueKey](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/HasAndroidResources#makeResValueKey(kotlin.String,kotlin.String))`(type: `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?, name: `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?)` Make a[ResValue.Key](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ResValue.Key)to interact with[resValues](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/HasAndroidResources#resValues())'s[MapProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/MapProperty.html) |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |

## Public functions

### getExtension

```
fun <T : Any?> getExtension(type: Class<T?>?): T?
```

Returns an extension object registered via the[VariantBuilder.registerExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantBuilder#registerExtension(java.lang.Class,kotlin.Any))API or null if none were registered under the passed[type](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#getExtension(java.lang.Class)).  

|               Returns                ||
|------|--------------------------------|
| `T?` | the registered object or null. |

## Public properties

### buildConfigFields

```
val buildConfigFields: MapProperty<String, BuildConfigField<Serializable>>
```

Variant's[BuildConfigField](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/BuildConfigField)which will be generated in the BuildConfig class.  

### experimentalProperties

```
val experimentalProperties: MapProperty<String, Any>
```

Additional per variant experimental properties.

Initialized from[com.android.build.api.dsl.CommonExtension.experimentalProperties](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/dsl/CommonExtension#experimentalProperties())  

### externalNativeBuild

```
val externalNativeBuild: ExternalNativeBuild?
```

Variant's cmake[ExternalNativeBuild](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ExternalNativeBuild), initialized by merging the product flavor values or null if no cmake external build is configured for this variant.  

### manifestPlaceholders

```
val manifestPlaceholders: MapProperty<String, String>
```

[MapProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/MapProperty.html)of the variant's manifest placeholders.

Placeholders are organized with a key and a value. The value is a[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)that will be used as is in the merged manifest.  

|                                                                                                                                                                                                                                  Returns                                                                                                                                                                                                                                  ||
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [MapProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/MapProperty.html)`<`[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`>` | the[MapProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/MapProperty.html)with keys as[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) |

### maxSdkVersion

```
val maxSdkVersion: Int?
```

Gets the maximum supported SDK Version for this variant.  

### minSdkVersion

```
val minSdkVersion: AndroidVersion
```

Gets the minimum supported SDK Version for this variant.  

### namespace

```
val namespace: Provider<String>
```

The namespace of the generated R and BuildConfig classes. Also, the namespace used to resolve any relative class names that are declared in the AndroidManifest.xml.  

### nestedComponents

```
val nestedComponents: List<Component>
```

List of the components nested in this variant, the returned list will contain:

- [UnitTest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/component/UnitTest)component if the unit tests for this variant are enabled,

- [AndroidTest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidTest)component if this variant[HasAndroidTest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/HasAndroidTest)and android tests for this variant are enabled,

- [TestFixtures](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/TestFixtures)component if this variant[HasTestFixtures](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/HasTestFixtures)and test fixtures for this variant are enabled.

Use this list to do operations on all nested components of this variant without having to manually check whether the variant has each component.

Example:  

```gdscript
androidComponents.onVariants(selector().withName("debug")) {
    // will return unitTests, androidTests, testFixtures for the debug variant (if enabled).
    nestedComponents.forEach { component ->
        component.transformClassesWith(NestedComponentsClassVisitorFactory::class.java,
                                       InstrumentationScope.Project) {}
    }
}
```  

### packaging

```
val packaging: Packaging
```

Variant's packagingOptions, initialized by the corresponding global DSL element.  

### proguardFiles

```
val proguardFiles: ListProperty<RegularFile>
```

List of proguard configuration files for this variant. The list is initialized from the corresponding DSL element, and cannot be queried at configuration time. At configuration time, you can only add new elements to the list.

This list will be initialized from com.android.build.api.dsl.VariantDimension#proguardFile for non test related variants and from[com.android.build.api.dsl.VariantDimension.testProguardFiles](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/dsl/VariantDimension#testProguardFiles(kotlin.Array))for test related variants.  

### targetSdkVersion

```
val targetSdkVersion: AndroidVersion
```

Gets the target SDK Version for this variant.  

### unitTest

```
val unitTest: UnitTest?
```

Variant's[UnitTest](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/component/UnitTest), or null if the unit tests for this variant are disabled.