# Variant

# Variant

```
@Incubating interface Variant : Component
```

|----------------------------------------------------------------------------------------------------------------------------------------------|
| [com.android.build.api.variant.Variant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/Variant#) |

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Known Direct Subclasses [ApplicationVariant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/ApplicationVariant),[DynamicFeatureVariant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/DynamicFeatureVariant),[LibraryVariant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/LibraryVariant),[TestVariant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/TestVariant) |-------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------| | [ApplicationVariant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/ApplicationVariant)       | Properties for the main Variant of an application.                                                                                   | | [DynamicFeatureVariant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/DynamicFeatureVariant) | <br />                                                                                                                               | | [LibraryVariant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/LibraryVariant)               | [Variant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/Variant#)for Library projects   | | [TestVariant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/TestVariant)                     | [Variant](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/Variant#)for test-only modules. | |

Parent interface for all types of variants.

## Summary

|                                                                                                                                                                                                                                                                                                                                                                                                               ### Public methods                                                                                                                                                                                                                                                                                                                                                                                                               ||
|--------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | [addBuildConfigField](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/Variant#addBuildConfigField(kotlin.String,%20java.io.Serializable,%20kotlin.String))`(`key:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `value:` `[Serializable](http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html)`, `comment:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)?`)` Convenience method to add a new Build Config field which value is known at configuration time.                                                                                                                                                         |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | [addResValue](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/Variant#addResValue(kotlin.String,%20kotlin.String,%20kotlin.String,%20kotlin.String))`(`name:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `type:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `value:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `comment:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)?`)` Adds a ResValue element to the generated resources.                                                                                                               |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | [addResValue](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/Variant#addResValue(kotlin.String,%20kotlin.String,%20org.gradle.api.provider.Provider,%20kotlin.String))`(`name:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `type:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `value:` `[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)>`, `comment:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)?`)` Adds a ResValue element to the generated resources. |

| ### Inherited functions ||
|---|---|
| From class[Component](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/Component.html#) |------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | [setAsmFramesComputationMode](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/Component.html#setAsmFramesComputationMode(com.android.build.api.instrumentation.FramesComputationMode))`(`mode:` `[FramesComputationMode](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/instrumentation/FramesComputationMode.html#)`)` <br /> Sets the frame computation mode that will be applied to the bytecode of the classes instrumented by ASM visitors registered through[transformClassesWith](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/Component.html#transformClassesWith(java.lang.Class,%20com.android.build.api.instrumentation.InstrumentationScope,%20kotlin.Function1)). The default mode is to[copy frames](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/instrumentation/FramesComputationMode.html#ENUM_VALUE:COPY_FRAMES). When setting this multiple times, the mode with the highest enum value will be selected. <br />                                                                                                                                                                                                                                                                                                                                                      | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | [transformClassesWith](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/Component.html#transformClassesWith(java.lang.Class,%20com.android.build.api.instrumentation.InstrumentationScope,%20kotlin.Function1))`(`classVisitorFactoryImplClass:` `[Class](http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html)<out` `[AsmClassVisitorFactory](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/instrumentation/AsmClassVisitorFactory.html#)<ParamT>>`, `scope:` `[InstrumentationScope](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/instrumentation/InstrumentationScope.html#)`, `instrumentationParamsConfig:` `(ParamT)` `->` `[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)` <br /> Registers an asm class visitor to instrument the classes defined by the given scope. An instance of the factory will be instantiated and used to create visitors for each class. Example: ```scdoc androidComponentsExtension.onVariants(selector().all(), { transformClassesWith(AsmClassVisitorFactoryImpl.class, InstrumentationScope.Project) { params -> params.x = "value" } setAsmFramesComputationMode(COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS) }) ``` This API is experimental and subject to breaking change and we strongly suggest you don't publish plugins that depend on it yet. <br /> | ||

|                                                                                                                                                                                                                                                                                                                                                                                        ### Properties                                                                                                                                                                                                                                                                                                                                                                                         ||
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| abstract[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)\>                                                                                                                                                                                                                                | [applicationId](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/Variant#applicationId:org.gradle.api.provider.Provider) Variant's application ID as present in the final manifest file of the APK.                                                                                                                           |
| abstract[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/4.2/com/android/build/api/variant/BuildConfigField)\<out[Serializable](http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html)\>\> | [buildConfigFields](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/Variant#buildConfigFields:org.gradle.api.provider.MapProperty) Variant's[BuildConfigField](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/BuildConfigField)which will be generated in the BuildConfig class. |
| abstract[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/4.2/com/android/build/api/variant/Variant#manifestPlaceholders:org.gradle.api.provider.MapProperty) [MapProperty](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/MapProperty.html)of the variant's manifest placeholders.                                              |
| abstract[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)\>                                                                                                                                                                                                                                | [packageName](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/Variant#packageName:org.gradle.api.provider.Provider) The package name into which some classes are generated                                                                                                                                                   |
| abstract[PackagingOptions](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/PackagingOptions)                                                                                                                                                                                                                                                                              | [packagingOptions](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/variant/Variant#packagingOptions:com.android.build.api.variant.PackagingOptions) Variant's packagingOptions, initialized by the corresponding global DSL element.                                                                                                 |

| ### Inherited properties ||
|---|---|
| From class[Component](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/Component.html#) |--------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [Artifacts](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifacts.html#) | [artifacts](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/Component.html#artifacts:com.android.build.api.artifact.Artifacts) <br /> Access to the variant's buildable artifacts for build customization. <br /> | ||
| From class[ComponentIdentity](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/ComponentIdentity.html#) |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)?                                                                                                                                                                                                                                                            | [buildType](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/ComponentIdentity.html#buildType:kotlin.String) <br /> Build type name, might be replaced with access to locked DSL object once ready. <br />                                                                                                                                                                                      | | [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)                                                                                                                                                                                                                                                             | [flavorName](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/ComponentIdentity.html#flavorName:kotlin.String) <br /> The multi-flavor name of the variant. This does not include the build type. If no flavors are present, this is an empty string. The full name of the variant is queried via[getName](https://docs.gradle.org/current/javadoc/org/gradle/api/Named.html#getName()). <br /> | | [List](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list/index.html)<[Pair](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-pair/index.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)>> | [productFlavors](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/ComponentIdentity.html#productFlavors:kotlin.collections.List) <br /> List of flavor names, might be replaced with access to locked DSL objects once ready. The order is properly sorted based on the associated dimension order. <br />                                                                                      | ||

## Public methods

### addBuildConfigField

```
abstract fun addBuildConfigField(
    key: String, 
    value: Serializable, 
    comment: String?
): Unit
```

Convenience method to add a new Build Config field which value is known at configuration time.

|                                                                                                          Parameters                                                                                                          ||
|-------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
| key:[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)      | the build config field name                                                                                                       |
| value:[Serializable](http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html)  | the build config field value which type must be[Serializable](http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html) |
| comment:[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)? | optional comment for the field.                                                                                                   |

### addResValue

```
abstract fun addResValue(
    name: String, 
    type: String, 
    value: String, 
    comment: String?
): Unit
```

Adds a ResValue element to the generated resources.

|                                                                              Parameters                                                                               ||
|-------------------------------------------------------------------------------------------|----------------------------------------------------------------------------|
| name:[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)     | the resource name                                                          |
| type:[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)     | the resource type like 'string'                                            |
| value:[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)    | the resource value                                                         |
| comment:[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)? | optional comment to be added to the generated resource file for the field. |

### addResValue

```
abstract fun addResValue(
    name: String, 
    type: String, 
    value: Provider<String>, 
    comment: String?
): Unit
```

Adds a ResValue element to the generated resources.

|                                                                                                                                          Parameters                                                                                                                                          ||
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| name:[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)                                                                                               | the resource name                                                                                       |
| type:[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)                                                                                               | the resource type like 'string'                                                                         |
| value:[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)\> | a[Provider](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/Provider.html)for the value |
| comment:[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)?                                                                                           | optional comment to be added to the generated resource file for the field.                              |

## Properties

### applicationId

```
abstract val applicationId: Provider<String>
```

Variant's application ID as present in the final manifest file of the APK.

Some type of variants allows this to be writeable but for some it's only read-only.  

### buildConfigFields

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

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

### manifestPlaceholders

```
abstract 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.

| Return ||
|---|---|
| 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) ||

### packageName

```
abstract val packageName: Provider<String>
```

The package name into which some classes are generated  

### packagingOptions

```
abstract val packagingOptions: PackagingOptions
```

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