# gradle-recipes **Repository Path**: mirrors_android/gradle-recipes ## Basic Information - **Project Name**: gradle-recipes - **Description**: Ready-to-use recipes for common build customizations that showcase the Android Gradle plugin's public APIs and DSL. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: agp-9.0 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-08 - **Last Updated**: 2026-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Recipes for AGP version `9.0` This branch contains recipes compatible with AGP 9.0. If you want to find recipes for other AGP versions, switch to the corresponding `agp-*` branch. This branch is read only. Contributions are only accepted on the `studio-main` branch. See `CONTRIBUTION.md` there. # Recipes Index Index is organized in categories, offering different ways to reach the recipe you want. ## Themes * Android Assets - [legacyTaskBridging](legacyTaskBridging), [addGeneratedSourceFolder](addGeneratedSourceFolder) * Android Manifest - [Transform Manifest (Meta-data)](transformManifest), [createSingleArtifact](createSingleArtifact), [perVariantManifestPlaceholder](perVariantManifestPlaceholder) * Artifact API - [workerEnabledTransformation](workerEnabledTransformation), [listenToMultipleArtifact](listenToMultipleArtifact), [getMultipleArtifact](getMultipleArtifact), [Transform Manifest (Meta-data)](transformManifest), [appendToScopedArtifacts](appendToScopedArtifacts), [listenToArtifacts](listenToArtifacts), [transformMultiple](transformMultiple), [createSingleArtifact](createSingleArtifact), [appendToMultipleArtifact](appendToMultipleArtifact), [transformDirectory](transformDirectory), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses), [addMultipleArtifact](addMultipleArtifact), [getSingleArtifact](getSingleArtifact) * DSL - [addBuildTypeUsingDslFinalize](addBuildTypeUsingDslFinalize), [extendingAgp](extendingAgp) * Dependency Resolution - [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * Sources - [legacyTaskBridging](legacyTaskBridging), [addGeneratedSourceFolder](addGeneratedSourceFolder), [addCustomSourceType](addCustomSourceType) ## Plugin Features * Fused Library Plugin - [applyFusedLibraryPlugin](applyFusedLibraryPlugin) * Kotlin Multiplatform - [kotlinMultiplatformLibrary](kotlinMultiplatformLibrary) * TestFixtures - [testFixtures](testFixtures) ## APIs * AndroidComponentsExtension.beforeVariants() - [disableTests](disableTests), [selectVariants](selectVariants) * AndroidComponentsExtension.onVariants() - [addCustomBuildConfigFields](addCustomBuildConfigFields), [workerEnabledTransformation](workerEnabledTransformation), [registerPreBuild](registerPreBuild), [legacyTaskBridging](legacyTaskBridging), [onVariants](onVariants), [asmTransformClasses](asmTransformClasses), [listenToMultipleArtifact](listenToMultipleArtifact), [getMultipleArtifact](getMultipleArtifact), [Transform Manifest (Meta-data)](transformManifest), [appendToScopedArtifacts](appendToScopedArtifacts), [listenToArtifacts](listenToArtifacts), [disableTests](disableTests), [transformMultiple](transformMultiple), [variantOutput](variantOutput), [createSingleArtifact](createSingleArtifact), [appendToMultipleArtifact](appendToMultipleArtifact), [extendingAgp](extendingAgp), [addGeneratedSourceFolder](addGeneratedSourceFolder), [allProjectsApkAction](allProjectsApkAction), [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [transformDirectory](transformDirectory), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses), [addCustomSourceType](addCustomSourceType), [addMultipleArtifact](addMultipleArtifact), [getSingleArtifact](getSingleArtifact), [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * AndroidComponentsExtension.registerExtension() - [extendingAgp](extendingAgp) * AndroidComponentsExtension.selector() - [variantOutput](variantOutput), [allProjectsApkAction](allProjectsApkAction), [selectVariants](selectVariants) * ApplicationVariant.applicationId - [onVariants](onVariants) * ApplicationVariant.outputs - [variantOutput](variantOutput) * Artifact.ContainsMany - [listenToArtifacts](listenToArtifacts) * ArtifactTransformationRequest - [workerEnabledTransformation](workerEnabledTransformation) * Artifacts.add() - [transformMultiple](transformMultiple), [addMultipleArtifact](addMultipleArtifact) * Artifacts.forScope() - [appendToScopedArtifacts](appendToScopedArtifacts), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses) * Artifacts.get() - [legacyTaskBridging](legacyTaskBridging), [Transform Manifest (Meta-data)](transformManifest), [transformMultiple](transformMultiple), [variantOutput](variantOutput), [appendToMultipleArtifact](appendToMultipleArtifact), [addGeneratedSourceFolder](addGeneratedSourceFolder), [allProjectsApkAction](allProjectsApkAction), [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [transformDirectory](transformDirectory), [addMultipleArtifact](addMultipleArtifact), [getSingleArtifact](getSingleArtifact) * Artifacts.getAll() - [getMultipleArtifact](getMultipleArtifact) * Artifacts.use() - [workerEnabledTransformation](workerEnabledTransformation), [listenToMultipleArtifact](listenToMultipleArtifact), [Transform Manifest (Meta-data)](transformManifest), [listenToArtifacts](listenToArtifacts), [transformMultiple](transformMultiple), [createSingleArtifact](createSingleArtifact), [appendToMultipleArtifact](appendToMultipleArtifact), [transformDirectory](transformDirectory) * BuildConfigField() - [addCustomBuildConfigFields](addCustomBuildConfigFields) * BuiltArtifact - [workerEnabledTransformation](workerEnabledTransformation) * BuiltArtifact.versionCode - [listenToArtifacts](listenToArtifacts) * BuiltArtifact.versionName - [listenToArtifacts](listenToArtifacts) * BuiltArtifacts.elements - [listenToArtifacts](listenToArtifacts) * BuiltArtifacts.variantName - [listenToArtifacts](listenToArtifacts) * BuiltArtifactsLoader.load() - [listenToArtifacts](listenToArtifacts) * CanMinifyAndroidResourcesBuilder.shrinkResources - [selectVariants](selectVariants) * CanMinifyCodeBuilder.isMinifyEnabled - [selectVariants](selectVariants) * CombiningOperationRequest.toTransform() - [transformMultiple](transformMultiple) * Component.artifacts - [legacyTaskBridging](legacyTaskBridging), [getMultipleArtifact](getMultipleArtifact), [Transform Manifest (Meta-data)](transformManifest), [appendToScopedArtifacts](appendToScopedArtifacts), [transformMultiple](transformMultiple), [variantOutput](variantOutput), [createSingleArtifact](createSingleArtifact), [appendToMultipleArtifact](appendToMultipleArtifact), [addGeneratedSourceFolder](addGeneratedSourceFolder), [transformDirectory](transformDirectory), [getScopedArtifacts](getScopedArtifacts), [addMultipleArtifact](addMultipleArtifact) * Component.compileConfiguration - [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * Component.runtimeConfiguration - [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * Component.sources - [legacyTaskBridging](legacyTaskBridging), [addGeneratedSourceFolder](addGeneratedSourceFolder), [addCustomSourceType](addCustomSourceType) * Configuration.resolutionStrategy - [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * DslExtension.Builder.build() - [extendingAgp](extendingAgp) * DslExtension.Builder.extendBuildTypeWith() - [extendingAgp](extendingAgp) * DslExtension.Builder.extendProductFlavorWith() - [extendingAgp](extendingAgp) * DslExtension.Builder.extendProjectWith() - [extendingAgp](extendingAgp) * DslLifecycle.finalizeDsl() - [addBuildTypeUsingDslFinalize](addBuildTypeUsingDslFinalize) * GeneratesApk.applicationId - [onVariants](onVariants) * Gradle.beforeProject() - [allProjectsApkAction](allProjectsApkAction) * HasDeviceTests.deviceTests - [disableTests](disableTests) * HasDeviceTestsBuilder.deviceTests - [disableTests](disableTests) * HasHostTests.hostTests - [disableTests](disableTests) * HasHostTestsBuilder.hostTests - [disableTests](disableTests) * HasUnitTestBuilder.enableUnitTest - [selectVariants](selectVariants) * InAndOutDirectoryOperationRequest.toTransform() - [transformDirectory](transformDirectory) * InAndOutDirectoryOperationRequest.toTransformMany() - [workerEnabledTransformation](workerEnabledTransformation) * InAndOutFileOperationRequest.toTransform() - [Transform Manifest (Meta-data)](transformManifest) * Instrumentation.transformClassesWith() - [asmTransformClasses](asmTransformClasses) * LifeCycleTasks.registerPreBuild() - [registerPreBuild](registerPreBuild) * MapProperty.put() - [addCustomBuildConfigFields](addCustomBuildConfigFields), [perVariantManifestPlaceholder](perVariantManifestPlaceholder) * MultipleArtifact.MULTIDEX_KEEP_PROGUARD - [getMultipleArtifact](getMultipleArtifact) * MultipleArtifact.NATIVE_DEBUG_METADATA - [listenToMultipleArtifact](listenToMultipleArtifact), [transformMultiple](transformMultiple), [appendToMultipleArtifact](appendToMultipleArtifact), [addMultipleArtifact](addMultipleArtifact) * MultipleArtifactTypeOutOperationRequest.toListenTo() - [listenToMultipleArtifact](listenToMultipleArtifact) * OutOperationRequest.toAppendTo() - [appendToMultipleArtifact](appendToMultipleArtifact) * OutOperationRequest.toCreate() - [createSingleArtifact](createSingleArtifact) * OutOperationRequest.toListenTo() - [listenToArtifacts](listenToArtifacts) * Plugin - [allProjectsApkAction](allProjectsApkAction) * ResolutionStrategy.dependencySubstitution() - [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * ScopedArtifact.CLASSES - [asmTransformClasses](asmTransformClasses), [appendToScopedArtifacts](appendToScopedArtifacts), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses) * ScopedArtifacts.Scope.ALL - [appendToScopedArtifacts](appendToScopedArtifacts), [getScopedArtifacts](getScopedArtifacts) * ScopedArtifacts.Scope.PROJECT - [asmTransformClasses](asmTransformClasses), [appendToScopedArtifacts](appendToScopedArtifacts), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses) * ScopedArtifacts.use() - [asmTransformClasses](asmTransformClasses), [appendToScopedArtifacts](appendToScopedArtifacts), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses) * ScopedArtifactsOperation.toAppend() - [appendToScopedArtifacts](appendToScopedArtifacts) * ScopedArtifactsOperation.toGet() - [asmTransformClasses](asmTransformClasses), [appendToScopedArtifacts](appendToScopedArtifacts), [getScopedArtifacts](getScopedArtifacts) * ScopedArtifactsOperation.toTransform() - [transformAllClasses](transformAllClasses) * SingleArtifact.APK - [workerEnabledTransformation](workerEnabledTransformation), [listenToArtifacts](listenToArtifacts), [allProjectsApkAction](allProjectsApkAction) * SingleArtifact.ASSETS - [legacyTaskBridging](legacyTaskBridging), [addGeneratedSourceFolder](addGeneratedSourceFolder), [transformDirectory](transformDirectory) * SingleArtifact.BUNDLE - [appendToMultipleArtifact](appendToMultipleArtifact), [addMultipleArtifact](addMultipleArtifact), [getSingleArtifact](getSingleArtifact) * SingleArtifact.MERGED_MANIFEST - [Transform Manifest (Meta-data)](transformManifest), [variantOutput](variantOutput), [createSingleArtifact](createSingleArtifact), [perVariantManifestPlaceholder](perVariantManifestPlaceholder) * SourceDirectories.addGeneratedSourceDirectory() - [legacyTaskBridging](legacyTaskBridging), [addGeneratedSourceFolder](addGeneratedSourceFolder), [addCustomSourceType](addCustomSourceType) * SourceDirectories.addStaticSourceDirectory() - [addCustomSourceType](addCustomSourceType) * TaskBasedOperation.wiredWith() - [listenToArtifacts](listenToArtifacts), [transformMultiple](transformMultiple), [createSingleArtifact](createSingleArtifact) * TaskBasedOperation.wiredWithDirectories() - [workerEnabledTransformation](workerEnabledTransformation), [transformDirectory](transformDirectory) * TaskBasedOperation.wiredWithFiles() - [Transform Manifest (Meta-data)](transformManifest) * TaskBasedOperation.wiredWithMultiple() - [listenToMultipleArtifact](listenToMultipleArtifact) * TaskOutputs.upToDateWhen() - [Transform Manifest (Meta-data)](transformManifest) * TaskProvider.flatMap() - [createSingleArtifact](createSingleArtifact) * TaskProvider.map() - [addCustomBuildConfigFields](addCustomBuildConfigFields) * Variant.buildConfigFields - [addCustomBuildConfigFields](addCustomBuildConfigFields) * Variant.components - [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * Variant.manifestPlaceholders - [perVariantManifestPlaceholder](perVariantManifestPlaceholder) * Variant.nestedComponents - [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * VariantBuilder.minSdk - [selectVariants](selectVariants) * VariantExtensionConfig - [extendingAgp](extendingAgp) * VariantOutput.versionCode - [variantOutput](variantOutput) * VariantOutput.versionName - [variantOutput](variantOutput) * VariantOutputConfiguration.OutputType.SINGLE - [variantOutput](variantOutput) * VariantOutputConfiguration.outputType - [variantOutput](variantOutput) * VariantSelector.all() - [variantOutput](variantOutput), [selectVariants](selectVariants) * VariantSelector.withBuildType() - [allProjectsApkAction](allProjectsApkAction), [selectVariants](selectVariants), [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * VariantSelector.withFlavor() - [variantOutput](variantOutput), [selectVariants](selectVariants) * VariantSelector.withName() - [selectVariants](selectVariants) * task.getOutputs() - [Transform Manifest (Meta-data)](transformManifest) ## Call chains * DslExtension.Builder().extendProjectWith().extendBuildTypeWith().extendProductFlavorWith().build() - [extendingAgp](extendingAgp) * HasDeviceTests.deviceTests.get() - [disableTests](disableTests) * HasDeviceTestsBuilder.deviceTests.get().enable - [disableTests](disableTests) * HasHostTests.hostTests.get() - [disableTests](disableTests) * HasHostTestsBuilder.hostTests.get().enable - [disableTests](disableTests) * androidComponents.beforeVariants {} - [disableTests](disableTests), [selectVariants](selectVariants) * androidComponents.finalizeDsl {} - [addBuildTypeUsingDslFinalize](addBuildTypeUsingDslFinalize) * androidComponents.onVariants {} - [addCustomBuildConfigFields](addCustomBuildConfigFields), [workerEnabledTransformation](workerEnabledTransformation), [registerPreBuild](registerPreBuild), [legacyTaskBridging](legacyTaskBridging), [onVariants](onVariants), [asmTransformClasses](asmTransformClasses), [listenToMultipleArtifact](listenToMultipleArtifact), [getMultipleArtifact](getMultipleArtifact), [Transform Manifest (Meta-data)](transformManifest), [appendToScopedArtifacts](appendToScopedArtifacts), [listenToArtifacts](listenToArtifacts), [disableTests](disableTests), [transformMultiple](transformMultiple), [variantOutput](variantOutput), [createSingleArtifact](createSingleArtifact), [appendToMultipleArtifact](appendToMultipleArtifact), [extendingAgp](extendingAgp), [addGeneratedSourceFolder](addGeneratedSourceFolder), [allProjectsApkAction](allProjectsApkAction), [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [transformDirectory](transformDirectory), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses), [addCustomSourceType](addCustomSourceType), [addMultipleArtifact](addMultipleArtifact), [getSingleArtifact](getSingleArtifact), [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * androidComponents.registerExtension() - [extendingAgp](extendingAgp) * androidComponents.selector().all() - [variantOutput](variantOutput), [selectVariants](selectVariants) * androidComponents.selector().withBuildType() - [allProjectsApkAction](allProjectsApkAction), [selectVariants](selectVariants), [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * androidComponents.selector().withFlavor() - [variantOutput](variantOutput), [selectVariants](selectVariants) * androidComponents.selector().withName() - [selectVariants](selectVariants) * configuration.resolutionStrategy.dependencySubstitution {} - [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * settings.gradle.beforeProject {} - [allProjectsApkAction](allProjectsApkAction) * substitute().using() - [variantDependencySubstitutionTest](variantDependencySubstitutionTest) * task.outputs.upToDateWhen {} - [Transform Manifest (Meta-data)](transformManifest) * transformationRequest.submit() - [workerEnabledTransformation](workerEnabledTransformation) * variant.applicationId - [onVariants](onVariants) * variant.artifacts.add() - [transformMultiple](transformMultiple), [addMultipleArtifact](addMultipleArtifact) * variant.artifacts.forScope().use().toAppend() - [appendToScopedArtifacts](appendToScopedArtifacts) * variant.artifacts.forScope().use().toGet() - [asmTransformClasses](asmTransformClasses), [getScopedArtifacts](getScopedArtifacts) * variant.artifacts.forScope().use().toTransform() - [transformAllClasses](transformAllClasses) * variant.artifacts.get() - [legacyTaskBridging](legacyTaskBridging), [asmTransformClasses](asmTransformClasses), [Transform Manifest (Meta-data)](transformManifest), [transformMultiple](transformMultiple), [variantOutput](variantOutput), [appendToMultipleArtifact](appendToMultipleArtifact), [addGeneratedSourceFolder](addGeneratedSourceFolder), [allProjectsApkAction](allProjectsApkAction), [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [transformDirectory](transformDirectory), [addMultipleArtifact](addMultipleArtifact), [getSingleArtifact](getSingleArtifact) * variant.artifacts.getAll() - [getMultipleArtifact](getMultipleArtifact) * variant.artifacts.use().wiredWith().toAppendTo() - [appendToMultipleArtifact](appendToMultipleArtifact) * variant.artifacts.use().wiredWith().toCreate() - [createSingleArtifact](createSingleArtifact) * variant.artifacts.use().wiredWith().toListenTo() - [listenToMultipleArtifact](listenToMultipleArtifact), [listenToArtifacts](listenToArtifacts) * variant.artifacts.use().wiredWith().toTransform() - [transformMultiple](transformMultiple) * variant.artifacts.use().wiredWithDirectories().toTransform() - [transformDirectory](transformDirectory) * variant.artifacts.use().wiredWithDirectories().toTransformMany() - [workerEnabledTransformation](workerEnabledTransformation) * variant.artifacts.use().wiredWithFiles().toTransform() - [Transform Manifest (Meta-data)](transformManifest) * variant.buildConfigFields.put() - [addCustomBuildConfigFields](addCustomBuildConfigFields) * variant.instrumentation.transformClassesWith() - [asmTransformClasses](asmTransformClasses) * variant.manifestPlaceholders.put() - [perVariantManifestPlaceholder](perVariantManifestPlaceholder) * variant.registerPreBuild() - [registerPreBuild](registerPreBuild) * variant.sources.*.addGeneratedSourceDirectory() - [legacyTaskBridging](legacyTaskBridging), [addGeneratedSourceFolder](addGeneratedSourceFolder), [addCustomSourceType](addCustomSourceType) * variant.sources.*.addStaticSourceDirectory() - [addCustomSourceType](addCustomSourceType) * variant.sources.*.all - [addGeneratedSourceFolder](addGeneratedSourceFolder), [addCustomSourceType](addCustomSourceType) ## Custom Tasks * Manifest Transformation - [Transform Manifest (Meta-data)](transformManifest) ## Others * All projects - [allProjectsApkAction](allProjectsApkAction) * DeviceTestBuilder.ANDROID_TEST_TYPE - [disableTests](disableTests) * Extending AGP DSL - [extendingAgp](extendingAgp) * HostTestBuilder.UNIT_TEST_TYPE - [disableTests](disableTests) * Legacy API bridging - [legacyTaskBridging](legacyTaskBridging) * Placeholders - [perVariantManifestPlaceholder](perVariantManifestPlaceholder) * Renaming APKs - [listenToArtifacts](listenToArtifacts) * SourceDirectories.Flat - [addCustomSourceType](addCustomSourceType) * SourceDirectories.Layered - [addGeneratedSourceFolder](addGeneratedSourceFolder) * SourceDirectories.add - [addCustomSourceType](addCustomSourceType) * registerSourceType - [addCustomSourceType](addCustomSourceType) # License ``` Copyright 2022 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ```