# AndroidComponentsExtension

# AndroidComponentsExtension

<br />

```
interface AndroidComponentsExtension<DslExtensionT : CommonExtension<*, *, *, *>?, VariantBuilderT : VariantBuilder?, VariantT : Variant?> : DslLifecycle
```

<br />

Known direct subclasses  
[ApplicationAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ApplicationAndroidComponentsExtension),[DynamicFeatureAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DynamicFeatureAndroidComponentsExtension),[LibraryAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/LibraryAndroidComponentsExtension),[TestAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/TestAndroidComponentsExtension)  

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------|
| [ApplicationAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ApplicationAndroidComponentsExtension)       | Extension for the Android Application Gradle Plugin components.     |
| [DynamicFeatureAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DynamicFeatureAndroidComponentsExtension) | Extension for the Android Dynamic Feature Gradle Plugin components. |
| [LibraryAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/LibraryAndroidComponentsExtension)               | Extension for the Android Library Gradle Plugin components.         |
| [TestAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/TestAndroidComponentsExtension)                     | Extension for the Android Test Gradle Plugin components.            |

*** ** * ** ***

Generic extension for Android Gradle Plugin related components.

Each component has a type, like application or library and will have a dedicated extension with methods that are related to the particular component type.  

|                                                                                                                                                                            Parameters                                                                                                                                                                            ||
|--------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `<DslExtensionT : `[CommonExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/dsl/CommonExtension)`<*, *, *, *>?>` | the type of the DSL to be used in[DslLifecycle.finalizeDsl](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DslLifecycle#finalizeDsl(kotlin.Function1)) |
| `<VariantBuilderT : `[VariantBuilder](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantBuilder)`?>`         | the[ComponentBuilder](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ComponentBuilder)type produced by this variant.                                   |
| `<VariantT : `[Variant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant)`?>`                              | the[Variant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant)type produced by this variant.                                                     |

## Summary

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ### Public functions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ||
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                                                           | [beforeVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))`(` ` selector: `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector)`?,` ` callback: ((VariantBuilderT) `->` `[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)?` `)` Method to register a[callback](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))to be called with[VariantBuilderT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)instances that satisfies the[selector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1)). |
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                                                           | [beforeVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,org.gradle.api.Action))`(` ` selector: `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector)`?,` ` callback: `[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)`<VariantBuilderT?>?` `)` [Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of[beforeVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))above.                                                                                                                                                                                                                                                                                                                     |
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                                                           | ~~[finalizeDSl](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#finalizeDSl(org.gradle.api.Action))~~`(callback: `[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)`<DslExtensionT?>?)` **This function is deprecated.**Replaced by finalizeDsl                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                                                           | [onVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#onVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))`(selector: `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector)`?, callback: ((VariantT) `->` `[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)?)` Allow for registration of a[callback](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#onVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))to be called with variant instances of type[VariantT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)once the list of[com.android.build.api.artifact.Artifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/Artifact)has been determined.                                                              |
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                                                           | [onVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#onVariants(com.android.build.api.variant.VariantSelector,org.gradle.api.Action))`(selector: `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector)`?, callback: `[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)`<VariantT?>?)` [Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of[onVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#onVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))above.                                                                                                                                                                                                                                                                                                                                                      |
| `@`[Incubating](https://docs.gradle.org/current/javadoc/org/gradle/api/Incubating.html)` `[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | [registerExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#registerExtension(com.android.build.api.variant.DslExtension,kotlin.Function1))`(` ` dslExtension: `[DslExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DslExtension)`?,` ` configurator: ((variantExtensionConfig: `[VariantExtensionConfig](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantExtensionConfig)`<VariantT>) `->` `[VariantExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantExtension)`)?` `)` Register an Android Gradle Plugin DSL extension.                                                                                                                                                                                                                                                                                                                                                                   |
| `@`[Incubating](https://docs.gradle.org/current/javadoc/org/gradle/api/Incubating.html)` `[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | [registerSourceType](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#registerSourceType(kotlin.String))`(name: `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?)` Register a new source type to all source sets.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| [VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector)                                          | [selector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#selector())`()` Creates a[VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector)instance that can be configured to reduce the set of[ComponentBuilder](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ComponentBuilder)instances participating in the[beforeVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))and[onVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#onVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))callback invocation.                                                                                                                                                                           |

|                                                                                                                                                                         ### Public properties                                                                                                                                                                          ||
|---------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [AndroidPluginVersion](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/AndroidPluginVersion) | [pluginVersion](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#pluginVersion()) The version of the Android Gradle Plugin currently in use.                     |
| [SdkComponents](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/dsl/SdkComponents)           | [sdkComponents](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#sdkComponents()) Provides access to underlying Android SDK and build-tools components like adb. |

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ### Inherited functions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ||
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| From class[DslLifecycle](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DslLifecycle) |------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | [finalizeDsl](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DslLifecycle#finalizeDsl(org.gradle.api.Action))`(callback: `[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)`<DslExtensionT?>?)` [Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of[finalizeDsl](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DslLifecycle#finalizeDsl(kotlin.Function1))above. | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | [finalizeDsl](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DslLifecycle#finalizeDsl(kotlin.Function1))`(callback: ((DslExtensionT) `->` `[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)?)` API to customize the DSL Objects programmatically after they have been evaluated from the build files and before used in the build process next steps like variant or tasks creation.                                                                | |

## Public functions

### beforeVariants

```
fun beforeVariants(
    selector: VariantSelector? = selector().all(),
    callback: ((VariantBuilderT) -> Unit)?
): Unit
```

Method to register a[callback](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))to be called with[VariantBuilderT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)instances that satisfies the[selector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1)). The[callback](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))will be called as soon as the[VariantBuilderT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)instance has been created but before any[com.android.build.api.artifact.Artifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/Artifact)has been determined, therefore the build flow can still be changed when the[callback](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))is invoked.

At this stage, access to the DSL objects is disallowed, use[finalizeDsl](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#finalizeDsl(kotlin.Function1))method to programmatically access the DSL objects before the[VariantBuilderT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)object is built.

Example without selection:  

```gdscript
androidComponents {
    beforeVariants {
        println("Called with variant : ${'$'}name")
    }
}
```

Example with selection:  

```gdscript
androidComponents {
    val debug = selector().withBuildType("debug")
    beforeVariants(debug) {
        println("Called with variant : ${'$'}name")
    }
}
```  

|                                                                                                                                                                                                                                                              Parameters                                                                                                                                                                                                                                                               ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `selector: `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector)`? = selector().all()` | [VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector)instance to select which instance of[VariantBuilderT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)are of interest. By default, all instances are of interest. |
| `callback: ((VariantBuilderT) `->` `[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)?`                                            | lambda to be called with each instance of[VariantBuilderT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)of interest.                                                                                                                                                                        |

### beforeVariants

```
fun beforeVariants(
    selector: VariantSelector? = selector().all(),
    callback: Action<VariantBuilderT?>?
): Unit
```

[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of[beforeVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))above.  

### finalizeDSl

```
fun [finalizeDSl](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#finalizeDSl(org.gradle.api.Action))(callback: Action<DslExtensionT?>?): Unit
```
| **This function is deprecated.**   
| Replaced by finalizeDsl

[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of[finalizeDsl](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#finalizeDsl(kotlin.Function1))above.  

### onVariants

```
fun onVariants(
    selector: VariantSelector? = selector().all(),
    callback: ((VariantT) -> Unit)?
): Unit
```

Allow for registration of a[callback](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#onVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))to be called with variant instances of type[VariantT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)once the list of[com.android.build.api.artifact.Artifact](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/Artifact)has been determined.

At this stage, access to the DSL objects is disallowed and access to the[VariantBuilderT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)instance is limited to read-only access.

Because the list of artifacts (including private ones) is final, one cannot change the build flow anymore as[org.gradle.api.Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)s are now expecting those artifacts as inputs. However users can modify such artifacts by replacing or transforming them, see[com.android.build.api.artifact.Artifacts](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/artifact/Artifacts)for details.

Code executing in the[callback](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#onVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))also has access to the[VariantT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)information which is used to configure[org.gradle.api.Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)inputs (for example, the buildConfigFields). Such information represented as[org.gradle.api.provider.Property](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/Property.html)can still be modified ensuring that all[org.gradle.api.Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)s created by the Android Gradle Plugin use the updated value.  

### onVariants

```
fun onVariants(
    selector: VariantSelector? = selector().all(),
    callback: Action<VariantT?>?
): Unit
```

[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of[onVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#onVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))above.  

### registerExtension

```
@Incubating
fun registerExtension(
    dslExtension: DslExtension?,
    configurator: ((variantExtensionConfig: VariantExtensionConfig<VariantT>) -> VariantExtension)?
): Unit
```

Register an Android Gradle Plugin DSL extension.

Please see Gradle documentation first at : https://docs.gradle.org/current/userguide/custom_plugins.html#sec:getting_input_from_the_build

A lambda must be provided to create and configure the variant scoped object that will be stored with the Android Gradle Plugin[com.android.build.api.variant.Variant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant)instance.

Variant Scoped objects should use[org.gradle.api.provider.Property](https://developer.android.com/reference/tools/gradle-api/7.2/[JVM root]/package-summary)for its mutable state to allow for late binding. (see[com.android.build.api.variant.Variant](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant)for examples).  

|                                                                                                                                                                                                                                                                                                                                                                                                                                                  Parameters                                                                                                                                                                                                                                                                                                                                                                                                                                                   ||
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `dslExtension: `[DslExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DslExtension)`?`                                                                                                                                                                                                  | the DSL extension configuration.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `configurator: ((variantExtensionConfig: `[VariantExtensionConfig](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantExtensionConfig)`<VariantT>) `->` `[VariantExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantExtension)`)?` | a lambda to create a variant scoped object. The lambda is provided with the[VariantExtensionConfig](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantExtensionConfig)that can be used to retrieve the[VariantT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)instance as well as DSL extensions registered with[DslExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/DslExtension) |

|                                                                                                                                                                                                                                                                                            Returns                                                                                                                                                                                                                                                                                            ||
|------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | an sub type of[VariantExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantExtension)instance that will be stored with the[VariantT](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension)instance and can be retrieved by[Variant.getExtension](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/Variant#getExtension(java.lang.Class))API. |

### registerSourceType

```
@Incubating
fun registerSourceType(name: String?): Unit
```

Register a new source type to all source sets.

The name of the source type will be used to create expected directories names in the various source sets. For instance, src/main/or src/debug/.

There is no notion of priorities between the build-type, flavor specific directories, all the expected directories will be interpreted as a flat namespace.

Therefore, any[org.gradle.api.Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)that needs access to the entire list of source folders can just use the Sources.extras's[SourceDirectories.all](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/SourceDirectories#all())method for that source type.

However, If you need to have overriding priorities between the expected directories and therefore require a merging activity, you can still use this API but you will need to create a merging task that will have all sources in input and produce a single output folder for the merged sources.  

|                                                        Parameters                                                         ||
|---------------------------------------------------------------------------------------------|------------------------------|
| `name: `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`?` | the name of the source type. |

### selector

```
fun selector(): VariantSelector
```

Creates a[VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector)instance that can be configured to reduce the set of[ComponentBuilder](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/ComponentBuilder)instances participating in the[beforeVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#beforeVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))and[onVariants](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/AndroidComponentsExtension#onVariants(com.android.build.api.variant.VariantSelector,kotlin.Function1))callback invocation.  

|                                                                                                                                             Returns                                                                                                                                             ||
|-------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector) | [VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/variant/VariantSelector)to select the variants of interest. |

## Public properties

### pluginVersion

```
val pluginVersion: AndroidPluginVersion
```

The version of the Android Gradle Plugin currently in use.  

### sdkComponents

```
val sdkComponents: SdkComponents
```

Provides access to underlying Android SDK and build-tools components like adb.  

|                                                                                                                                      Returns                                                                                                                                      ||
|-----------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [SdkComponents](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/dsl/SdkComponents) | [SdkComponents](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/dsl/SdkComponents)to access Android SDK used by Gradle. |