public interface VariantExtension

Marker type for Variant extension objects.

Variant extension must be registered using the AndroidComponentsExtension.registerExtension API and can be retrieved from a Variant instance using the Variant.getExtension API.

Since this type will most likely be used as org.gradle.api.Task's input, your subtype should also extend

This variant extension will be passed to all plugins that register a AndroidComponentsExtension.onVariants block. In case several plugins modify some of the variant extension fields, it is primordial to define all the fields as a org.gradle.api.provider.Property. This will ensure that the tasks execution blocks that call org.gradle.api.provider.Property.get will get the final value, regardless of the order in which plugins are configured.

Example of a sub-type :

abstract class VariantDslExtension @Inject constructor( // Do not keep a reference on the VariantExtensionConfig as it is not serializable, // use the constructor to extract the values for the BuildType/ProductFlavor extensions // that can be obtained from the VariantExtensionConfig. extensionConfig: VariantExtensionConfig<*> ): VariantExtension, { abstract val variantSettingOne: Property abstract val variantSettingTwo: Property

and this is the corresponding registration and instantiation code : androidComponents.registerExtension( DslExtension.Builder("dslExtension") .extendProjectWith( .build() ) { config -> project.objects.newInstance(, config ) }