# 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.4/com/android/build/api/variant/ApplicationAndroidComponentsExtension),[DynamicFeatureAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/DynamicFeatureAndroidComponentsExtension),[LibraryAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/LibraryAndroidComponentsExtension),[TestAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/TestAndroidComponentsExtension)  

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------|
| [ApplicationAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/ApplicationAndroidComponentsExtension)       | Extension for the Android Application Gradle Plugin components.     |
| [DynamicFeatureAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/com/android/build/api/variant/LibraryAndroidComponentsExtension)               | Extension for the Android Library Gradle Plugin components.         |
| [TestAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/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.4/com/android/build/api/variant/DslLifecycle#finalizeDsl(kotlin.Function1)) |
| `<VariantBuilderT : `[VariantBuilder](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/VariantBuilder)`>`         | the[ComponentBuilder](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/ComponentBuilder)type produced by this variant.                                   |
| `<VariantT : `[Variant](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/Variant)`>`                              | the[Variant](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/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.4/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.4/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.4/com/android/build/api/variant/AndroidComponentsExtension)instances that satisfies the[selector](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/com/android/build/api/variant/DslExtension)`,` ` configurator: (variantExtensionConfig: `[VariantExtensionConfig](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/VariantExtensionConfig)`<VariantT>) `->` `[VariantExtension](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/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.4/com/android/build/api/variant/VariantSelector)                                          | [selector](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/AndroidComponentsExtension#selector())`()` Creates a[VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/com/android/build/api/variant/ComponentBuilder)instances participating in the[beforeVariants](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/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.4/com/android/build/api/AndroidPluginVersion) | [pluginVersion](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/com/android/build/api/dsl/SdkComponents)           | [sdkComponents](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/AndroidComponentsExtension#sdkComponents()) Provides access to underlying Android SDK and build-tools components like adb. |

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ### Inherited functions                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ||
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| From class[com.android.build.api.variant.DslLifecycle](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/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.4/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.4/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.4/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.4/com/android/build/api/variant/AndroidComponentsExtension)instances that satisfies the[selector](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/com/android/build/api/variant/VariantSelector)` = selector().all()` | [VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/VariantSelector)instance to select which instance of[VariantBuilderT](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/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.4/com/android/build/api/artifact/Artifacts)for details.

Code executing in the[callback](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/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.4/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.4/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.4/[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.4/com/android/build/api/variant/Variant)for examples).  

|                                                                                                                                                                                                                                                                                                                                                                                                                                                Parameters                                                                                                                                                                                                                                                                                                                                                                                                                                                ||
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `dslExtension: `[DslExtension](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/DslExtension)                                                                                                                                                                                                | the DSL extension configuration.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `configurator: (variantExtensionConfig: `[VariantExtensionConfig](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/VariantExtensionConfig)`<VariantT>) `->` `[VariantExtension](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/com/android/build/api/variant/VariantExtensionConfig)that can be used to retrieve the[VariantT](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/AndroidComponentsExtension)instance as well as DSL extensions registered with[DslExtension](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/com/android/build/api/variant/VariantExtension)instance that will be stored with the[VariantT](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/variant/AndroidComponentsExtension)instance and can be retrieved by[Variant.getExtension](https://developer.android.com/reference/tools/gradle-api/7.4/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 Flat.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.4/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.4/com/android/build/api/variant/ComponentBuilder)instances participating in the[beforeVariants](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/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.4/com/android/build/api/variant/VariantSelector) | [VariantSelector](https://developer.android.com/reference/tools/gradle-api/7.4/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.4/com/android/build/api/dsl/SdkComponents) | [SdkComponents](https://developer.android.com/reference/tools/gradle-api/7.4/com/android/build/api/dsl/SdkComponents)to access Android SDK used by Gradle. |