android/gradle-recipes
android/gradle-recipes has 2,370 GitHub stars and 259 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-07 21:48 UTC. Last push 2026-10-22.
Ready-to-use recipes for common build customizations that showcase the Android Gradle plugin's public APIs and DSL.
What you can do
- Fused Library Plugin - applyFusedLibraryPlugin
- Kotlin Multiplatform - kotlinMultiplatformLibrary
- TestFixtures - testFixtures
Measured star growth
- in 24h
- 0
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalRecipes 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 - addGeneratedSourceFolder, legacyTaskBridging
- Android Manifest - perVariantManifestPlaceholder, createSingleArtifact, Transform Manifest (Meta-data)
- Artifact API - appendToScopedArtifacts, createSingleArtifact, listenToMultipleArtifact, addMultipleArtifact, Transform Manifest (Meta-data), transformAllClasses, workerEnabledTransformation, appendToMultipleArtifact, getSingleArtifact, transformMultiple, getScopedArtifacts, getMultipleArtifact, listenToArtifacts, transformDirectory
- DSL - addBuildTypeUsingDslFinalize, extendingAgp
- Dependency Resolution - variantDependencySubstitutionTest
- Sources - addCustomSourceType, addGeneratedSourceFolder, legacyTaskBridging
Plugin Features
- Fused Library Plugin - applyFusedLibraryPlugin
- Kotlin Multiplatform - kotlinMultiplatformLibrary
- TestFixtures - testFixtures
APIs
- AndroidComponentsExtension.beforeVariants() - selectVariants, disableTests
- AndroidComponentsExtension.onVariants() - perVariantManifestPlaceholder, appendToScopedArtifacts, variantOutput, createSingleArtifact, listenToMultipleArtifact, addMultipleArtifact, Transform Manifest (Meta-data), transformAllClasses, allProjectsApkAction, asmTransformClasses, workerEnabledTransformation, appendToMultipleArtifact, onVariants, addCustomSourceType, variantDependencySubstitutionTest, extendingAgp, getSingleArtifact, addGeneratedSourceFolder, legacyTaskBridging, transformMultiple, getScopedArtifacts, disableTests, registerPreBuild, addCustomBuildConfigFields, getMultipleArtifact, listenToArtifacts, transformDirectory
- AndroidComponentsExtension.registerExtension() - extendingAgp
- AndroidComponentsExtension.selector() - variantOutput, allProjectsApkAction, selectVariants
- ApplicationVariant.applicationId - onVariants
- ApplicationVariant.outputs - variantOutput
- Artifact.ContainsMany - listenToArtifacts
- ArtifactTransformationRequest - workerEnabledTransformation
- Artifacts.add() - addMultipleArtifact, transformMultiple
- Artifacts.forScope() - appendToScopedArtifacts, transformAllClasses, getScopedArtifacts
- Artifacts.get() - perVariantManifestPlaceholder, variantOutput, addMultipleArtifact, Transform Manifest (Meta-data), allProjectsApkAction, appendToMultipleArtifact, getSingleArtifact, addGeneratedSourceFolder, legacyTaskBridging, transformMultiple, transformDirectory
- Artifacts.getAll() - getMultipleArtifact
- Artifacts.use() - createSingleArtifact, listenToMultipleArtifact, Transform Manifest (Meta-data), workerEnabledTransformation, appendToMultipleArtifact, transformMultiple, listenToArtifacts, transformDirectory
- 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 - appendToScopedArtifacts, variantOutput, createSingleArtifact, addMultipleArtifact, Transform Manifest (Meta-data), appendToMultipleArtifact, addGeneratedSourceFolder, legacyTaskBridging, transformMultiple, getScopedArtifacts, getMultipleArtifact, transformDirectory
- Component.compileConfiguration - variantDependencySubstitutionTest
- Component.runtimeConfiguration - variantDependencySubstitutionTest
- Component.sources - addCustomSourceType, addGeneratedSourceFolder, legacyTaskBridging
- 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() - perVariantManifestPlaceholder, addCustomBuildConfigFields
- MultipleArtifact.MULTIDEX_KEEP_PROGUARD - getMultipleArtifact
- MultipleArtifact.NATIVE_DEBUG_METADATA - listenToMultipleArtifact, addMultipleArtifact, appendToMultipleArtifact, transformMultiple
- MultipleArtifactTypeOutOperationRequest.toListenTo() - listenToMultipleArtifact
- OutOperationRequest.toAppendTo() - appendToMultipleArtifact
- OutOperationRequest.toCreate() - createSingleArtifact
- OutOperationRequest.toListenTo() - listenToArtifacts
- Plugin - allProjectsApkAction
- ResolutionStrategy.dependencySubstitution() - variantDependencySubstitutionTest
- ScopedArtifact.CLASSES - appendToScopedArtifacts, transformAllClasses, asmTransformClasses, getScopedArtifacts
- ScopedArtifacts.Scope.ALL - appendToScopedArtifacts, getScopedArtifacts
- ScopedArtifacts.Scope.PROJECT - appendToScopedArtifacts, transformAllClasses, asmTransformClasses, getScopedArtifacts
- ScopedArtifacts.use() - appendToScopedArtifacts, transformAllClasses, asmTransformClasses, getScopedArtifacts
- ScopedArtifactsOperation.toAppend() - appendToScopedArtifacts
- ScopedArtifactsOperation.toGet() - appendToScopedArtifacts, asmTransformClasses, getScopedArtifacts
- ScopedArtifactsOperation.toTransform() - transformAllClasses
- SingleArtifact.APK - allProjectsApkAction, workerEnabledTransformation, listenToArtifacts
- SingleArtifact.ASSETS - addGeneratedSourceFolder, legacyTaskBridging, transformDirectory
- SingleArtifact.BUNDLE - addMultipleArtifact, appendToMultipleArtifact, getSingleArtifact
- SingleArtifact.MERGED_MANIFEST - perVariantManifestPlaceholder, variantOutput, createSingleArtifact, Transform Manifest (Meta-data)
- SourceDirectories.addGeneratedSourceDirectory() - addCustomSourceType, addGeneratedSourceFolder, legacyTaskBridging
- SourceDirectories.addStaticSourceDirectory() - addCustomSourceType
- TaskBasedOperation.wiredWith() - createSingleArtifact, transformMultiple, listenToArtifacts
- TaskBasedOperation.wiredWithDirectories() - workerEnabledTransformation, transformDirectory
- 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() - allProjectsApkAction, selectVariants, variantDependencySubstitutionTest
- 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 {} - perVariantManifestPlaceholder, appendToScopedArtifacts, variantOutput, createSingleArtifact, listenToMultipleArtifact, addMultipleArtifact, Transform Manifest (Meta-data), transformAllClasses, allProjectsApkAction, asmTransformClasses, workerEnabledTransformation, appendToMultipleArtifact, onVariants, addCustomSourceType, variantDependencySubstitutionTest, extendingAgp, getSingleArtifact, addGeneratedSourceFolder, legacyTaskBridging, transformMultiple, getScopedArtifacts, disableTests, registerPreBuild, addCustomBuildConfigFields, getMultipleArtifact, listenToArtifacts, transformDirectory
- androidComponents.registerExtension() - extendingAgp
- androidComponents.selector().all() - variantOutput, selectVariants
- androidComponents.selector().withBuildType() - allProjectsApkAction, selectVariants, variantDependencySubstitutionTest
- 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() - perVariantManifestPlaceholder, variantOutput, addMultipleArtifact, Transform Manifest (Meta-data), allProjectsApkAction, asmTransformClasses, appendToMultipleArtifact, getSingleArtifact, addGeneratedSourceFolder, legacyTaskBridging, transformMultiple, transformDirectory
- variant.artifacts.getAll() - getMultipleArtifact
- variant.artifacts.use().wiredWith().toAppendTo() - appendToMultipleArtifact
- variant.artifacts.use().wiredWith().toCreate() - createSingleArtifact
- variant.artifacts.use().wiredWith().toListenTo() - listenToMultipleArtifact, listenToArtifacts
- 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() - addCustomSourceType, addGeneratedSourceFolder, legacyTaskBridging
- variant.sources.*.addStaticSourceDirectory() - addCustomSourceType
- variant.sources.*.all - addCustomSourceType, addGeneratedSourceFolder
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.
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
560,948 starspublic-apis/public-apis
A collective list of free APIs
497,207 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
442,682 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,182 stars