gradle-recipes
Introduction: Ready-to-use recipes for common build customizations that showcase the Android Gradle plugin's public APIs and DSL.
Tags:
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, addGeneratedSourceFolder
- Android Manifest - Transform Manifest (Meta-data), createSingleArtifact, perVariantManifestPlaceholder
- Artifact API - addMultipleArtifact, Transform Manifest (Meta-data), transformMultiple, createSingleArtifact, getSingleArtifact, transformDirectory, workerEnabledTransformation, listenToArtifacts, appendToScopedArtifacts, appendToMultipleArtifact, getScopedArtifacts, transformAllClasses, getMultipleArtifact, listenToMultipleArtifact
- DSL - addBuildTypeUsingDslFinalize, extendingAgp
- Dependency Resolution - variantDependencySubstitutionTest
- Sources - legacyTaskBridging, addGeneratedSourceFolder, addCustomSourceType
Plugin Features
- Fused Library Plugin - applyFusedLibraryPlugin
- Kotlin Multiplatform - kotlinMultiplatformLibrary
- TestFixtures - testFixtures
APIs
- AndroidComponentsExtension.beforeVariants() - selectVariants, disableTests
- AndroidComponentsExtension.onVariants() - variantOutput, variantDependencySubstitutionTest, legacyTaskBridging, asmTransformClasses, addMultipleArtifact, addGeneratedSourceFolder, Transform Manifest (Meta-data), addCustomSourceType, addCustomBuildConfigFields, onVariants, transformMultiple, createSingleArtifact, perVariantManifestPlaceholder, getSingleArtifact, transformDirectory, registerPreBuild, workerEnabledTransformation, listenToArtifacts, appendToScopedArtifacts, appendToMultipleArtifact, getScopedArtifacts, transformAllClasses, getMultipleArtifact, extendingAgp, disableTests, listenToMultipleArtifact, allProjectsApkAction
- AndroidComponentsExtension.registerExtension() - extendingAgp
- AndroidComponentsExtension.selector() - variantOutput, selectVariants, allProjectsApkAction
- ApplicationVariant.applicationId - onVariants
- ApplicationVariant.outputs - variantOutput
- Artifact.ContainsMany - listenToArtifacts
- ArtifactTransformationRequest - workerEnabledTransformation
- Artifacts.add() - addMultipleArtifact, transformMultiple
- Artifacts.forScope() - appendToScopedArtifacts, getScopedArtifacts, transformAllClasses
- Artifacts.get() - variantOutput, legacyTaskBridging, addMultipleArtifact, addGeneratedSourceFolder, Transform Manifest (Meta-data), transformMultiple, perVariantManifestPlaceholder, getSingleArtifact, transformDirectory, appendToMultipleArtifact, allProjectsApkAction
- Artifacts.getAll() - getMultipleArtifact
- Artifacts.use() - Transform Manifest (Meta-data), transformMultiple, createSingleArtifact, transformDirectory, workerEnabledTransformation, listenToArtifacts, appendToMultipleArtifact, listenToMultipleArtifact
- BuildConfigField() - addCustomBuildConfigFields
- BuiltArtifact - workerEnabledTransformation
- BuiltArtifact.versionCode - listenToArtifacts
- BuiltArtifact.versionName - listenToArtifacts
- BuiltArtifacts.elements - listenToArtifacts
- BuiltArtifacts.variantName - listenToArtifacts
- BuiltArtifactsLoader.load() - listenToArtifacts
- CanMinifyAndroidResourcesBuilder.shrinkResources - selectVariants
- CanMinifyCodeBuilder.isMinifyEnabled - selectVariants
- CombiningOperationRequest.toTransform() - transformMultiple
- Component.artifacts - variantOutput, legacyTaskBridging, addMultipleArtifact, addGeneratedSourceFolder, Transform Manifest (Meta-data), transformMultiple, createSingleArtifact, transformDirectory, appendToScopedArtifacts, appendToMultipleArtifact, getScopedArtifacts, getMultipleArtifact
- Component.compileConfiguration - variantDependencySubstitutionTest
- Component.runtimeConfiguration - variantDependencySubstitutionTest
- Component.sources - legacyTaskBridging, addGeneratedSourceFolder, addCustomSourceType
- Configuration.resolutionStrategy - variantDependencySubstitutionTest
- DslExtension.Builder.build() - extendingAgp
- DslExtension.Builder.extendBuildTypeWith() - extendingAgp
- DslExtension.Builder.extendProductFlavorWith() - extendingAgp
- DslExtension.Builder.extendProjectWith() - extendingAgp
- DslLifecycle.finalizeDsl() - addBuildTypeUsingDslFinalize
- GeneratesApk.applicationId - onVariants
- Gradle.beforeProject() - allProjectsApkAction
- HasDeviceTests.deviceTests - disableTests
- HasDeviceTestsBuilder.deviceTests - disableTests
- HasHostTests.hostTests - disableTests
- HasHostTestsBuilder.hostTests - disableTests
- HasUnitTestBuilder.enableUnitTest - selectVariants
- InAndOutDirectoryOperationRequest.toTransform() - transformDirectory
- InAndOutDirectoryOperationRequest.toTransformMany() - workerEnabledTransformation
- InAndOutFileOperationRequest.toTransform() - Transform Manifest (Meta-data)
- Instrumentation.transformClassesWith() - asmTransformClasses
- LifeCycleTasks.registerPreBuild() - registerPreBuild
- MapProperty.put() - addCustomBuildConfigFields, perVariantManifestPlaceholder
- MultipleArtifact.MULTIDEX_KEEP_PROGUARD - getMultipleArtifact
- MultipleArtifact.NATIVE_DEBUG_METADATA - addMultipleArtifact, transformMultiple, appendToMultipleArtifact, listenToMultipleArtifact
- MultipleArtifactTypeOutOperationRequest.toListenTo() - listenToMultipleArtifact
- OutOperationRequest.toAppendTo() - appendToMultipleArtifact
- OutOperationRequest.toCreate() - createSingleArtifact
- OutOperationRequest.toListenTo() - listenToArtifacts
- Plugin
- allProjectsApkAction - ResolutionStrategy.dependencySubstitution() - variantDependencySubstitutionTest
- ScopedArtifact.CLASSES - asmTransformClasses, appendToScopedArtifacts, getScopedArtifacts, transformAllClasses
- ScopedArtifacts.Scope.ALL - appendToScopedArtifacts, getScopedArtifacts
- ScopedArtifacts.Scope.PROJECT - asmTransformClasses, appendToScopedArtifacts, getScopedArtifacts, transformAllClasses
- ScopedArtifacts.use() - asmTransformClasses, appendToScopedArtifacts, getScopedArtifacts, transformAllClasses
- ScopedArtifactsOperation.toAppend() - appendToScopedArtifacts
- ScopedArtifactsOperation.toGet() - asmTransformClasses, appendToScopedArtifacts, getScopedArtifacts
- ScopedArtifactsOperation.toTransform() - transformAllClasses
- SingleArtifact.APK - workerEnabledTransformation, listenToArtifacts, allProjectsApkAction
- SingleArtifact.ASSETS - legacyTaskBridging, addGeneratedSourceFolder, transformDirectory
- SingleArtifact.BUNDLE - addMultipleArtifact, getSingleArtifact, appendToMultipleArtifact
- SingleArtifact.MERGED_MANIFEST - variantOutput, Transform Manifest (Meta-data), createSingleArtifact, perVariantManifestPlaceholder
- SourceDirectories.addGeneratedSourceDirectory() - legacyTaskBridging, addGeneratedSourceFolder, addCustomSourceType
- SourceDirectories.addStaticSourceDirectory() - addCustomSourceType
- TaskBasedOperation.wiredWith() - transformMultiple, createSingleArtifact, listenToArtifacts
- TaskBasedOperation.wiredWithDirectories() - transformDirectory, workerEnabledTransformation
- TaskBasedOperation.wiredWithFiles() - Transform Manifest (Meta-data)
- TaskBasedOperation.wiredWithMultiple() - listenToMultipleArtifact
- TaskOutputs.upToDateWhen() - Transform Manifest (Meta-data)
- TaskProvider.flatMap() - createSingleArtifact
- TaskProvider.map() - addCustomBuildConfigFields
- Variant.buildConfigFields - addCustomBuildConfigFields
- Variant.components - variantDependencySubstitutionTest
- Variant.manifestPlaceholders - perVariantManifestPlaceholder
- Variant.nestedComponents - variantDependencySubstitutionTest
- VariantBuilder.minSdk - selectVariants
- VariantExtensionConfig - extendingAgp
- VariantOutput.versionCode - variantOutput
- VariantOutput.versionName - variantOutput
- VariantOutputConfiguration.OutputType.SINGLE - variantOutput
- VariantOutputConfiguration.outputType - variantOutput
- VariantSelector.all() - variantOutput, selectVariants
- VariantSelector.withBuildType() - variantDependencySubstitutionTest, selectVariants, allProjectsApkAction
- VariantSelector.withFlavor() - variantOutput, selectVariants
- VariantSelector.withName() - selectVariants
- task.getOutputs() - Transform Manifest (Meta-data)
Call chains
- DslExtension.Builder().extendProjectWith().extendBuildTypeWith().extendProductFlavorWith().build() - extendingAgp
- HasDeviceTests.deviceTests.get() - disableTests
- HasDeviceTestsBuilder.deviceTests.get().enable - disableTests
- HasHostTests.hostTests.get() - disableTests
- HasHostTestsBuilder.hostTests.get().enable - disableTests
- androidComponents.beforeVariants {} - selectVariants, disableTests
- androidComponents.finalizeDsl {} - addBuildTypeUsingDslFinalize
- androidComponents.onVariants {} - variantOutput, variantDependencySubstitutionTest, legacyTaskBridging, asmTransformClasses, addMultipleArtifact, addGeneratedSourceFolder, Transform Manifest (Meta-data), addCustomSourceType, addCustomBuildConfigFields, onVariants, transformMultiple, createSingleArtifact, perVariantManifestPlaceholder, getSingleArtifact, transformDirectory, registerPreBuild, workerEnabledTransformation, listenToArtifacts, appendToScopedArtifacts, appendToMultipleArtifact, getScopedArtifacts, transformAllClasses, getMultipleArtifact, extendingAgp, disableTests, listenToMultipleArtifact, allProjectsApkAction
- androidComponents.registerExtension() - extendingAgp
- androidComponents.selector().all() - variantOutput, selectVariants
- androidComponents.selector().withBuildType() - variantDependencySubstitutionTest, selectVariants, allProjectsApkAction
- androidComponents.selector().withFlavor() - variantOutput, selectVariants
- androidComponents.selector().withName() - selectVariants
- configuration.resolutionStrategy.dependencySubstitution {} - variantDependencySubstitutionTest
- settings.gradle.beforeProject {} - allProjectsApkAction
- substitute().using() - variantDependencySubstitutionTest
- task.outputs.upToDateWhen {} - Transform Manifest (Meta-data)
- transformationRequest.submit() - workerEnabledTransformation
- variant.applicationId - onVariants
- variant.artifacts.add() - addMultipleArtifact, transformMultiple
- variant.artifacts.forScope().use().toAppend() - appendToScopedArtifacts
- variant.artifacts.forScope().use().toGet() - asmTransformClasses, getScopedArtifacts
- variant.artifacts.forScope().use().toTransform() - transformAllClasses
- variant.artifacts.get() - variantOutput, legacyTaskBridging, asmTransformClasses, addMultipleArtifact, addGeneratedSourceFolder, Transform Manifest (Meta-data), transformMultiple, perVariantManifestPlaceholder, getSingleArtifact, transformDirectory, appendToMultipleArtifact, allProjectsApkAction
- variant.artifacts.getAll() - getMultipleArtifact
- variant.artifacts.use().wiredWith().toAppendTo() - appendToMultipleArtifact
- variant.artifacts.use().wiredWith().toCreate() - createSingleArtifact
- variant.artifacts.use().wiredWith().toListenTo() - listenToArtifacts, listenToMultipleArtifact
- variant.artifacts.use().wiredWith().toTransform() - transformMultiple
- variant.artifacts.use().wiredWithDirectories().toTransform() - transformDirectory
- variant.artifacts.use().wiredWithDirectories().toTransformMany() - workerEnabledTransformation
- variant.artifacts.use().wiredWithFiles().toTransform() - Transform Manifest (Meta-data)
- variant.buildConfigFields.put() - addCustomBuildConfigFields
- variant.instrumentation.transformClassesWith() - asmTransformClasses
- variant.manifestPlaceholders.put() - perVariantManifestPlaceholder
- variant.registerPreBuild() - registerPreBuild
- variant.sources.*.addGeneratedSourceDirectory() - legacyTaskBridging, addGeneratedSourceFolder, addCustomSourceType
- variant.sources.*.addStaticSourceDirectory() - addCustomSourceType
- variant.sources.*.all - addGeneratedSourceFolder, addCustomSourceType
Custom Tasks
- Manifest Transformation - Transform Manifest (Meta-data)
Others
- All projects - allProjectsApkAction
- DeviceTestBuilder.ANDROID_TEST_TYPE - disableTests
- Extending AGP DSL - extendingAgp
- HostTestBuilder.UNIT_TEST_TYPE - disableTests
- Legacy API bridging - legacyTaskBridging
- Placeholders - perVariantManifestPlaceholder
- Renaming APKs - listenToArtifacts
- SourceDirectories.Flat - addCustomSourceType
- SourceDirectories.Layered - addGeneratedSourceFolder
- SourceDirectories.add - addCustomSourceType
- registerSourceType - 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.
