# AndroidComponentsExtension

# AndroidComponentsExtension

```
@Incubating interface AndroidComponentsExtension<VariantBuilderT : VariantBuilder, VariantT : Variant>
```

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

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Known Direct Subclasses [ApplicationAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/ApplicationAndroidComponentsExtension),[DynamicFeatureAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/DynamicFeatureAndroidComponentsExtension),[LibraryAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/LibraryAndroidComponentsExtension),[TestAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/TestAndroidComponentsExtension) |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------| | [ApplicationAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/ApplicationAndroidComponentsExtension)       | Extension for Application module variant.     | | [DynamicFeatureAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/DynamicFeatureAndroidComponentsExtension) | Extension for Dynamic Feature module variant. | | [LibraryAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/LibraryAndroidComponentsExtension)               | Extension for Library module variant.         | | [TestAndroidComponentsExtension](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/TestAndroidComponentsExtension)                     | Extension for Test module variant.            | |

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.

## Summary

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ### Public methods                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ||
|-----------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [androidTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#androidTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `callback:` `[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)<[AndroidTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTest.html#)>`)` Allow for registration of a[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$androidTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action((com.android.build.api.component.AndroidTest)))/callback)to be called with instances of type[AndroidTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTest.html#)once the list of[com.android.build.api.artifact.Artifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.html#)has been determined.                                                                                                                                                                                                                                               |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [androidTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#androidTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `callback:` `([AndroidTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTest.html#))` `->` `[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)` [Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of the[AndroidTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTest.html#)above.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [beforeAndroidTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeAndroidTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `callback:` `([AndroidTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTestBuilder.html#))` `->` `[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/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeAndroidTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.AndroidTestBuilder,%20kotlin.Unit)))/callback)to be called with[AndroidTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTestBuilder.html#)that satisfies the[selector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeAndroidTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.AndroidTestBuilder,%20kotlin.Unit)))/selector). |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [beforeAndroidTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeAndroidTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `callback:` `[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)<[AndroidTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTestBuilder.html#)>`)` [Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of the[beforeAndroidTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeAndroidTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))above.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [beforeUnitTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeUnitTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `callback:` `([UnitTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTestBuilder.html#))` `->` `[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/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeUnitTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.UnitTestBuilder,%20kotlin.Unit)))/callback)to be called with[UnitTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTestBuilder.html#)that satisfies the[selector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeUnitTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.UnitTestBuilder,%20kotlin.Unit)))/selector).                               |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [beforeUnitTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeUnitTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `callback:` `[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)<[UnitTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTestBuilder.html#)>`)` [Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of[beforeUnitTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeUnitTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))above.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [beforeVariants](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `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/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.extension.AndroidComponentsExtension.VariantBuilderT,%20kotlin.Unit)))/callback)to be called with VariantBuilderT instances that satisfies the[selector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.extension.AndroidComponentsExtension.VariantBuilderT,%20kotlin.Unit)))/selector).                                                                                                                                                                                                                    |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [beforeVariants](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeVariants(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `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/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))above.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [onVariants](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#onVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `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/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$onVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.extension.AndroidComponentsExtension.VariantT,%20kotlin.Unit)))/callback)to be called with variant instances of type VariantT once the list of[com.android.build.api.artifact.Artifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.html#)has been determined.                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [onVariants](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#onVariants(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `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/4.2/com/android/build/api/extension/AndroidComponentsExtension#onVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))above.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| abstract[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector) | [selector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#selector())`()` Creates a[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)instance that can be configured to reduce the set of[ComponentBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/ComponentBuilder.html#)instances participating in the[beforeVariants](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))and[onVariants](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#onVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))callback invocation.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [unitTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#unitTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `callback:` `[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)<[UnitTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTest.html#)>`)` Allow for registration of a[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$unitTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action((com.android.build.api.component.UnitTest)))/callback)to be called with instances of type[UnitTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTest.html#)once the list of[com.android.build.api.artifact.Artifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.html#)has been determined.                                                                                                                                                                                                                                                                       |
| abstract[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)                                                    | [unitTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#unitTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))`(`selector:` `[VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)` `=` selector().all(), `callback:` `([UnitTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTest.html#))` `->` `[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)`)` [Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of the[unitTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#unitTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action))above.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |

|                                                                                                                                                                                                   ### Properties                                                                                                                                                                                                   ||
|-------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| abstract[SdkComponents](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/dsl/SdkComponents.html#) | [sdkComponents](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#sdkComponents:com.android.build.api.dsl.SdkComponents) Provides access to underlying Android SDK and build-tools components like adb. |

## Public methods

### androidTests

```
abstract fun androidTests(
    selector: VariantSelector = selector().all(), 
    callback: Action<AndroidTest>
): Unit
```

Allow for registration of a[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$androidTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action((com.android.build.api.component.AndroidTest)))/callback)to be called with instances of type[AndroidTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTest.html#)once the list of[com.android.build.api.artifact.Artifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.html#)has been determined.

At this stage, access to the DSL objects is disallowed and access to the[AndroidTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTestBuilder.html#)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/4.2/com/android/build/api/artifact/Artifacts.html#)for details.

Code executing in the[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$androidTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action((com.android.build.api.component.AndroidTest)))/callback)also has access to the[AndroidTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTest.html#)information which is used to configure[org.gradle.api.Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)inputs. 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.  

### androidTests

```
abstract fun androidTests(
    selector: VariantSelector = selector().all(), 
    callback: (AndroidTest) -> Unit
): Unit
```

[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of the[AndroidTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTest.html#)above.  

### beforeAndroidTests

```
abstract fun beforeAndroidTests(
    selector: VariantSelector = selector().all(), 
    callback: (AndroidTestBuilder) -> Unit
): Unit
```

Allow for registration of a[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeAndroidTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.AndroidTestBuilder,%20kotlin.Unit)))/callback)to be called with[AndroidTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTestBuilder.html#)that satisfies the[selector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeAndroidTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.AndroidTestBuilder,%20kotlin.Unit)))/selector). The[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeAndroidTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.AndroidTestBuilder,%20kotlin.Unit)))/callback)will be called as soon as the[AndroidTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/AndroidTestBuilder.html#)instance has been created but before any[com.android.build.api.artifact.Artifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.html#)related to android tests has been determined, therefore the build flow can still be changed when the[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeAndroidTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.AndroidTestBuilder,%20kotlin.Unit)))/callback)is invoked.

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

### beforeAndroidTests

```
abstract fun beforeAndroidTests(
    selector: VariantSelector = selector().all(), 
    callback: Action<AndroidTestBuilder>
): Unit
```

[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of the[beforeAndroidTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeAndroidTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))above.  

### beforeUnitTests

```
abstract fun beforeUnitTests(
    selector: VariantSelector = selector().all(), 
    callback: (UnitTestBuilder) -> Unit
): Unit
```

Allow for registration of a[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeUnitTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.UnitTestBuilder,%20kotlin.Unit)))/callback)to be called with[UnitTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTestBuilder.html#)that satisfies the[selector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeUnitTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.UnitTestBuilder,%20kotlin.Unit)))/selector). The[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeUnitTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.UnitTestBuilder,%20kotlin.Unit)))/callback)will be called as soon as the[UnitTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTestBuilder.html#)instance has been created but before any[com.android.build.api.artifact.Artifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.html#)related to unit tests has been determined, therefore the build flow can still be changed when the[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$beforeUnitTests(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.component.UnitTestBuilder,%20kotlin.Unit)))/callback)is invoked.

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

### beforeUnitTests

```
abstract fun beforeUnitTests(
    selector: VariantSelector = selector().all(), 
    callback: Action<UnitTestBuilder>
): Unit
```

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

### beforeVariants

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

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

At this stage, access to the DSL objects is disallowed, use[afterDsl](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#)method to programmatically access the DSL objects before the VariantBuilderT 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/4.2/com/android/build/api/extension/VariantSelector)=selector().all() | [VariantSelector](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/VariantSelector)instance to select which instance of VariantBuilderT 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 of interest.                                                                                                                                                                          |

### beforeVariants

```
abstract 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/4.2/com/android/build/api/extension/AndroidComponentsExtension#beforeVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))above.  

### onVariants

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

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

At this stage, access to the DSL objects is disallowed and access to the VariantBuilderT 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/4.2/com/android/build/api/artifact/Artifacts.html#)for details.

Code executing in the[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$onVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1((com.android.build.api.extension.AndroidComponentsExtension.VariantT,%20kotlin.Unit)))/callback)also has access to the VariantT 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

```
abstract 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/4.2/com/android/build/api/extension/AndroidComponentsExtension#onVariants(com.android.build.api.extension.VariantSelector,%20kotlin.Function1))above.  

### selector

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

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

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

### unitTests

```
abstract fun unitTests(
    selector: VariantSelector = selector().all(), 
    callback: Action<UnitTest>
): Unit
```

Allow for registration of a[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$unitTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action((com.android.build.api.component.UnitTest)))/callback)to be called with instances of type[UnitTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTest.html#)once the list of[com.android.build.api.artifact.Artifact](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/artifact/Artifact.html#)has been determined.

At this stage, access to the DSL objects is disallowed and access to the[UnitTestBuilder](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTestBuilder.html#)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/4.2/com/android/build/api/artifact/Artifacts.html#)for details.

Code executing in the[callback](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#com.android.build.api.extension.AndroidComponentsExtension$unitTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action((com.android.build.api.component.UnitTest)))/callback)also has access to the[UnitTest](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/component/UnitTest.html#)information which is used to configure[org.gradle.api.Task](https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html)inputs. 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.  

### unitTests

```
abstract fun unitTests(
    selector: VariantSelector = selector().all(), 
    callback: (UnitTest) -> Unit
): Unit
```

[Action](https://docs.gradle.org/current/javadoc/org/gradle/api/Action.html)based version of the[unitTests](https://developer.android.com/reference/tools/gradle-api/4.2/com/android/build/api/extension/AndroidComponentsExtension#unitTests(com.android.build.api.extension.VariantSelector,%20org.gradle.api.Action))above.

## Properties

### sdkComponents

```
abstract val sdkComponents: SdkComponents
```

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

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