[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7477":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":16,"starSnapshotCount":16,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},7477,"gradle-recipes","android\u002Fgradle-recipes","android","Ready-to-use recipes for common build customizations that showcase the Android Gradle plugin's public APIs and DSL.","",null,"Kotlin",2351,257,73,6,0,9,29.23,false,"agp-9.0",[],"2026-06-12 02:01:40","# Recipes for AGP version `9.0`\nThis branch contains recipes compatible with AGP 9.0. If you want to find recipes\nfor other AGP versions, switch to the corresponding `agp-*` branch.\n\nThis branch is read only. Contributions are only accepted on the `studio-main` branch. See `CONTRIBUTION.md`\nthere.\n# Recipes Index\nIndex is organized in categories, offering different ways to reach the recipe you want.\n## Themes\n* Android Assets - [addGeneratedSourceFolder](addGeneratedSourceFolder), [legacyTaskBridging](legacyTaskBridging)\n* Android Manifest - [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [Transform Manifest (Meta-data)](transformManifest), [createSingleArtifact](createSingleArtifact)\n* Artifact API - [listenToMultipleArtifact](listenToMultipleArtifact), [workerEnabledTransformation](workerEnabledTransformation), [appendToScopedArtifacts](appendToScopedArtifacts), [appendToMultipleArtifact](appendToMultipleArtifact), [listenToArtifacts](listenToArtifacts), [getSingleArtifact](getSingleArtifact), [addMultipleArtifact](addMultipleArtifact), [getScopedArtifacts](getScopedArtifacts), [Transform Manifest (Meta-data)](transformManifest), [transformMultiple](transformMultiple), [transformAllClasses](transformAllClasses), [transformDirectory](transformDirectory), [getMultipleArtifact](getMultipleArtifact), [createSingleArtifact](createSingleArtifact)\n* DSL - [extendingAgp](extendingAgp), [addBuildTypeUsingDslFinalize](addBuildTypeUsingDslFinalize)\n* Dependency Resolution - [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* Sources - [addGeneratedSourceFolder](addGeneratedSourceFolder), [addCustomSourceType](addCustomSourceType), [legacyTaskBridging](legacyTaskBridging)\n## Plugin Features\n* Fused Library Plugin - [applyFusedLibraryPlugin](applyFusedLibraryPlugin)\n* Kotlin Multiplatform - [kotlinMultiplatformLibrary](kotlinMultiplatformLibrary)\n* TestFixtures - [testFixtures](testFixtures)\n## APIs\n* AndroidComponentsExtension.beforeVariants() - [selectVariants](selectVariants), [disableTests](disableTests)\n* AndroidComponentsExtension.onVariants() - [extendingAgp](extendingAgp), [listenToMultipleArtifact](listenToMultipleArtifact), [variantOutput](variantOutput), [workerEnabledTransformation](workerEnabledTransformation), [appendToScopedArtifacts](appendToScopedArtifacts), [appendToMultipleArtifact](appendToMultipleArtifact), [asmTransformClasses](asmTransformClasses), [listenToArtifacts](listenToArtifacts), [getSingleArtifact](getSingleArtifact), [addMultipleArtifact](addMultipleArtifact), [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [getScopedArtifacts](getScopedArtifacts), [addGeneratedSourceFolder](addGeneratedSourceFolder), [onVariants](onVariants), [Transform Manifest (Meta-data)](transformManifest), [addCustomSourceType](addCustomSourceType), [transformMultiple](transformMultiple), [registerPreBuild](registerPreBuild), [legacyTaskBridging](legacyTaskBridging), [allProjectsApkAction](allProjectsApkAction), [variantDependencySubstitutionTest](variantDependencySubstitutionTest), [transformAllClasses](transformAllClasses), [disableTests](disableTests), [transformDirectory](transformDirectory), [getMultipleArtifact](getMultipleArtifact), [createSingleArtifact](createSingleArtifact), [addCustomBuildConfigFields](addCustomBuildConfigFields)\n* AndroidComponentsExtension.registerExtension() - [extendingAgp](extendingAgp)\n* AndroidComponentsExtension.selector() - [variantOutput](variantOutput), [selectVariants](selectVariants), [allProjectsApkAction](allProjectsApkAction)\n* ApplicationVariant.applicationId - [onVariants](onVariants)\n* ApplicationVariant.outputs - [variantOutput](variantOutput)\n* Artifact.ContainsMany - [listenToArtifacts](listenToArtifacts)\n* ArtifactTransformationRequest - [workerEnabledTransformation](workerEnabledTransformation)\n* Artifacts.add() - [addMultipleArtifact](addMultipleArtifact), [transformMultiple](transformMultiple)\n* Artifacts.forScope() - [appendToScopedArtifacts](appendToScopedArtifacts), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses)\n* Artifacts.get() - [variantOutput](variantOutput), [appendToMultipleArtifact](appendToMultipleArtifact), [getSingleArtifact](getSingleArtifact), [addMultipleArtifact](addMultipleArtifact), [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [addGeneratedSourceFolder](addGeneratedSourceFolder), [Transform Manifest (Meta-data)](transformManifest), [transformMultiple](transformMultiple), [legacyTaskBridging](legacyTaskBridging), [allProjectsApkAction](allProjectsApkAction), [transformDirectory](transformDirectory)\n* Artifacts.getAll() - [getMultipleArtifact](getMultipleArtifact)\n* Artifacts.use() - [listenToMultipleArtifact](listenToMultipleArtifact), [workerEnabledTransformation](workerEnabledTransformation), [appendToMultipleArtifact](appendToMultipleArtifact), [listenToArtifacts](listenToArtifacts), [Transform Manifest (Meta-data)](transformManifest), [transformMultiple](transformMultiple), [transformDirectory](transformDirectory), [createSingleArtifact](createSingleArtifact)\n* BuildConfigField() - [addCustomBuildConfigFields](addCustomBuildConfigFields)\n* BuiltArtifact - [workerEnabledTransformation](workerEnabledTransformation)\n* BuiltArtifact.versionCode - [listenToArtifacts](listenToArtifacts)\n* BuiltArtifact.versionName - [listenToArtifacts](listenToArtifacts)\n* BuiltArtifacts.elements - [listenToArtifacts](listenToArtifacts)\n* BuiltArtifacts.variantName - [listenToArtifacts](listenToArtifacts)\n* BuiltArtifactsLoader.load() - [listenToArtifacts](listenToArtifacts)\n* CanMinifyAndroidResourcesBuilder.shrinkResources - [selectVariants](selectVariants)\n* CanMinifyCodeBuilder.isMinifyEnabled - [selectVariants](selectVariants)\n* CombiningOperationRequest.toTransform() - [transformMultiple](transformMultiple)\n* Component.artifacts - [variantOutput](variantOutput), [appendToScopedArtifacts](appendToScopedArtifacts), [appendToMultipleArtifact](appendToMultipleArtifact), [addMultipleArtifact](addMultipleArtifact), [getScopedArtifacts](getScopedArtifacts), [addGeneratedSourceFolder](addGeneratedSourceFolder), [Transform Manifest (Meta-data)](transformManifest), [transformMultiple](transformMultiple), [legacyTaskBridging](legacyTaskBridging), [transformDirectory](transformDirectory), [getMultipleArtifact](getMultipleArtifact), [createSingleArtifact](createSingleArtifact)\n* Component.compileConfiguration - [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* Component.runtimeConfiguration - [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* Component.sources - [addGeneratedSourceFolder](addGeneratedSourceFolder), [addCustomSourceType](addCustomSourceType), [legacyTaskBridging](legacyTaskBridging)\n* Configuration.resolutionStrategy - [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* DslExtension.Builder.build() - [extendingAgp](extendingAgp)\n* DslExtension.Builder.extendBuildTypeWith() - [extendingAgp](extendingAgp)\n* DslExtension.Builder.extendProductFlavorWith() - [extendingAgp](extendingAgp)\n* DslExtension.Builder.extendProjectWith() - [extendingAgp](extendingAgp)\n* DslLifecycle.finalizeDsl() - [addBuildTypeUsingDslFinalize](addBuildTypeUsingDslFinalize)\n* GeneratesApk.applicationId - [onVariants](onVariants)\n* Gradle.beforeProject() - [allProjectsApkAction](allProjectsApkAction)\n* HasDeviceTests.deviceTests - [disableTests](disableTests)\n* HasDeviceTestsBuilder.deviceTests - [disableTests](disableTests)\n* HasHostTests.hostTests - [disableTests](disableTests)\n* HasHostTestsBuilder.hostTests - [disableTests](disableTests)\n* HasUnitTestBuilder.enableUnitTest - [selectVariants](selectVariants)\n* InAndOutDirectoryOperationRequest.toTransform() - [transformDirectory](transformDirectory)\n* InAndOutDirectoryOperationRequest.toTransformMany() - [workerEnabledTransformation](workerEnabledTransformation)\n* InAndOutFileOperationRequest.toTransform() - [Transform Manifest (Meta-data)](transformManifest)\n* Instrumentation.transformClassesWith() - [asmTransformClasses](asmTransformClasses)\n* LifeCycleTasks.registerPreBuild() - [registerPreBuild](registerPreBuild)\n* MapProperty.put() - [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [addCustomBuildConfigFields](addCustomBuildConfigFields)\n* MultipleArtifact.MULTIDEX_KEEP_PROGUARD - [getMultipleArtifact](getMultipleArtifact)\n* MultipleArtifact.NATIVE_DEBUG_METADATA - [listenToMultipleArtifact](listenToMultipleArtifact), [appendToMultipleArtifact](appendToMultipleArtifact), [addMultipleArtifact](addMultipleArtifact), [transformMultiple](transformMultiple)\n* MultipleArtifactTypeOutOperationRequest.toListenTo() - [listenToMultipleArtifact](listenToMultipleArtifact)\n* OutOperationRequest.toAppendTo() - [appendToMultipleArtifact](appendToMultipleArtifact)\n* OutOperationRequest.toCreate() - [createSingleArtifact](createSingleArtifact)\n* OutOperationRequest.toListenTo() - [listenToArtifacts](listenToArtifacts)\n* Plugin\u003CSettings> - [allProjectsApkAction](allProjectsApkAction)\n* ResolutionStrategy.dependencySubstitution() - [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* ScopedArtifact.CLASSES - [appendToScopedArtifacts](appendToScopedArtifacts), [asmTransformClasses](asmTransformClasses), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses)\n* ScopedArtifacts.Scope.ALL - [appendToScopedArtifacts](appendToScopedArtifacts), [getScopedArtifacts](getScopedArtifacts)\n* ScopedArtifacts.Scope.PROJECT - [appendToScopedArtifacts](appendToScopedArtifacts), [asmTransformClasses](asmTransformClasses), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses)\n* ScopedArtifacts.use() - [appendToScopedArtifacts](appendToScopedArtifacts), [asmTransformClasses](asmTransformClasses), [getScopedArtifacts](getScopedArtifacts), [transformAllClasses](transformAllClasses)\n* ScopedArtifactsOperation.toAppend() - [appendToScopedArtifacts](appendToScopedArtifacts)\n* ScopedArtifactsOperation.toGet() - [appendToScopedArtifacts](appendToScopedArtifacts), [asmTransformClasses](asmTransformClasses), [getScopedArtifacts](getScopedArtifacts)\n* ScopedArtifactsOperation.toTransform() - [transformAllClasses](transformAllClasses)\n* SingleArtifact.APK - [workerEnabledTransformation](workerEnabledTransformation), [listenToArtifacts](listenToArtifacts), [allProjectsApkAction](allProjectsApkAction)\n* SingleArtifact.ASSETS - [addGeneratedSourceFolder](addGeneratedSourceFolder), [legacyTaskBridging](legacyTaskBridging), [transformDirectory](transformDirectory)\n* SingleArtifact.BUNDLE - [appendToMultipleArtifact](appendToMultipleArtifact), [getSingleArtifact](getSingleArtifact), [addMultipleArtifact](addMultipleArtifact)\n* SingleArtifact.MERGED_MANIFEST - [variantOutput](variantOutput), [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [Transform Manifest (Meta-data)](transformManifest), [createSingleArtifact](createSingleArtifact)\n* SourceDirectories.addGeneratedSourceDirectory() - [addGeneratedSourceFolder](addGeneratedSourceFolder), [addCustomSourceType](addCustomSourceType), [legacyTaskBridging](legacyTaskBridging)\n* SourceDirectories.addStaticSourceDirectory() - [addCustomSourceType](addCustomSourceType)\n* TaskBasedOperation.wiredWith() - [listenToArtifacts](listenToArtifacts), [transformMultiple](transformMultiple), [createSingleArtifact](createSingleArtifact)\n* TaskBasedOperation.wiredWithDirectories() - [workerEnabledTransformation](workerEnabledTransformation), [transformDirectory](transformDirectory)\n* TaskBasedOperation.wiredWithFiles() - [Transform Manifest (Meta-data)](transformManifest)\n* TaskBasedOperation.wiredWithMultiple() - [listenToMultipleArtifact](listenToMultipleArtifact)\n* TaskOutputs.upToDateWhen() - [Transform Manifest (Meta-data)](transformManifest)\n* TaskProvider.flatMap() - [createSingleArtifact](createSingleArtifact)\n* TaskProvider.map() - [addCustomBuildConfigFields](addCustomBuildConfigFields)\n* Variant.buildConfigFields - [addCustomBuildConfigFields](addCustomBuildConfigFields)\n* Variant.components - [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* Variant.manifestPlaceholders - [perVariantManifestPlaceholder](perVariantManifestPlaceholder)\n* Variant.nestedComponents - [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* VariantBuilder.minSdk - [selectVariants](selectVariants)\n* VariantExtensionConfig - [extendingAgp](extendingAgp)\n* VariantOutput.versionCode - [variantOutput](variantOutput)\n* VariantOutput.versionName - [variantOutput](variantOutput)\n* VariantOutputConfiguration.OutputType.SINGLE - [variantOutput](variantOutput)\n* VariantOutputConfiguration.outputType - [variantOutput](variantOutput)\n* VariantSelector.all() - [variantOutput](variantOutput), [selectVariants](selectVariants)\n* VariantSelector.withBuildType() - [selectVariants](selectVariants), [allProjectsApkAction](allProjectsApkAction), [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* VariantSelector.withFlavor() - [variantOutput](variantOutput), [selectVariants](selectVariants)\n* VariantSelector.withName() - [selectVariants](selectVariants)\n* task.getOutputs() - [Transform Manifest (Meta-data)](transformManifest)\n## Call chains\n* DslExtension.Builder().extendProjectWith().extendBuildTypeWith().extendProductFlavorWith().build() - [extendingAgp](extendingAgp)\n* HasDeviceTests.deviceTests.get() - [disableTests](disableTests)\n* HasDeviceTestsBuilder.deviceTests.get().enable - [disableTests](disableTests)\n* HasHostTests.hostTests.get() - [disableTests](disableTests)\n* HasHostTestsBuilder.hostTests.get().enable - [disableTests](disableTests)\n* androidComponents.beforeVariants {} - [selectVariants](selectVariants), [disableTests](disableTests)\n* androidComponents.finalizeDsl {} - [addBuildTypeUsingDslFinalize](addBuildTypeUsingDslFinalize)\n* androidComponents.onVariants {} - [extendingAgp](extendingAgp), [listenToMultipleArtifact](listenToMultipleArtifact), [variantOutput](variantOutput), [workerEnabledTransformation](workerEnabledTransformation), [appendToScopedArtifacts](appendToScopedArtifacts), [appendToMultipleArtifact](appendToMultipleArtifact), [asmTransformClasses](asmTransformClasses), [listenToArtifacts](listenToArtifacts), [getSingleArtifact](getSingleArtifact), [addMultipleArtifact](addMultipleArtifact), [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [getScopedArtifacts](getScopedArtifacts), [addGeneratedSourceFolder](addGeneratedSourceFolder), [onVariants](onVariants), [Transform Manifest (Meta-data)](transformManifest), [addCustomSourceType](addCustomSourceType), [transformMultiple](transformMultiple), [registerPreBuild](registerPreBuild), [legacyTaskBridging](legacyTaskBridging), [allProjectsApkAction](allProjectsApkAction), [variantDependencySubstitutionTest](variantDependencySubstitutionTest), [transformAllClasses](transformAllClasses), [disableTests](disableTests), [transformDirectory](transformDirectory), [getMultipleArtifact](getMultipleArtifact), [createSingleArtifact](createSingleArtifact), [addCustomBuildConfigFields](addCustomBuildConfigFields)\n* androidComponents.registerExtension() - [extendingAgp](extendingAgp)\n* androidComponents.selector().all() - [variantOutput](variantOutput), [selectVariants](selectVariants)\n* androidComponents.selector().withBuildType() - [selectVariants](selectVariants), [allProjectsApkAction](allProjectsApkAction), [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* androidComponents.selector().withFlavor() - [variantOutput](variantOutput), [selectVariants](selectVariants)\n* androidComponents.selector().withName() - [selectVariants](selectVariants)\n* configuration.resolutionStrategy.dependencySubstitution {} - [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* settings.gradle.beforeProject {} - [allProjectsApkAction](allProjectsApkAction)\n* substitute().using() - [variantDependencySubstitutionTest](variantDependencySubstitutionTest)\n* task.outputs.upToDateWhen {} - [Transform Manifest (Meta-data)](transformManifest)\n* transformationRequest.submit() - [workerEnabledTransformation](workerEnabledTransformation)\n* variant.applicationId - [onVariants](onVariants)\n* variant.artifacts.add() - [addMultipleArtifact](addMultipleArtifact), [transformMultiple](transformMultiple)\n* variant.artifacts.forScope().use().toAppend() - [appendToScopedArtifacts](appendToScopedArtifacts)\n* variant.artifacts.forScope().use().toGet() - [asmTransformClasses](asmTransformClasses), [getScopedArtifacts](getScopedArtifacts)\n* variant.artifacts.forScope().use().toTransform() - [transformAllClasses](transformAllClasses)\n* variant.artifacts.get() - [variantOutput](variantOutput), [appendToMultipleArtifact](appendToMultipleArtifact), [asmTransformClasses](asmTransformClasses), [getSingleArtifact](getSingleArtifact), [addMultipleArtifact](addMultipleArtifact), [perVariantManifestPlaceholder](perVariantManifestPlaceholder), [addGeneratedSourceFolder](addGeneratedSourceFolder), [Transform Manifest (Meta-data)](transformManifest), [transformMultiple](transformMultiple), [legacyTaskBridging](legacyTaskBridging), [allProjectsApkAction](allProjectsApkAction), [transformDirectory](transformDirectory)\n* variant.artifacts.getAll() - [getMultipleArtifact](getMultipleArtifact)\n* variant.artifacts.use().wiredWith().toAppendTo() - [appendToMultipleArtifact](appendToMultipleArtifact)\n* variant.artifacts.use().wiredWith().toCreate() - [createSingleArtifact](createSingleArtifact)\n* variant.artifacts.use().wiredWith().toListenTo() - [listenToMultipleArtifact](listenToMultipleArtifact), [listenToArtifacts](listenToArtifacts)\n* variant.artifacts.use().wiredWith().toTransform() - [transformMultiple](transformMultiple)\n* variant.artifacts.use().wiredWithDirectories().toTransform() - [transformDirectory](transformDirectory)\n* variant.artifacts.use().wiredWithDirectories().toTransformMany() - [workerEnabledTransformation](workerEnabledTransformation)\n* variant.artifacts.use().wiredWithFiles().toTransform() - [Transform Manifest (Meta-data)](transformManifest)\n* variant.buildConfigFields.put() - [addCustomBuildConfigFields](addCustomBuildConfigFields)\n* variant.instrumentation.transformClassesWith() - [asmTransformClasses](asmTransformClasses)\n* variant.manifestPlaceholders.put() - [perVariantManifestPlaceholder](perVariantManifestPlaceholder)\n* variant.registerPreBuild() - [registerPreBuild](registerPreBuild)\n* variant.sources.*.addGeneratedSourceDirectory() - [addGeneratedSourceFolder](addGeneratedSourceFolder), [addCustomSourceType](addCustomSourceType), [legacyTaskBridging](legacyTaskBridging)\n* variant.sources.*.addStaticSourceDirectory() - [addCustomSourceType](addCustomSourceType)\n* variant.sources.*.all - [addGeneratedSourceFolder](addGeneratedSourceFolder), [addCustomSourceType](addCustomSourceType)\n## Custom Tasks\n* Manifest Transformation - [Transform Manifest (Meta-data)](transformManifest)\n## Others\n* All projects - [allProjectsApkAction](allProjectsApkAction)\n* DeviceTestBuilder.ANDROID_TEST_TYPE - [disableTests](disableTests)\n* Extending AGP DSL - [extendingAgp](extendingAgp)\n* HostTestBuilder.UNIT_TEST_TYPE - [disableTests](disableTests)\n* Legacy API bridging - [legacyTaskBridging](legacyTaskBridging)\n* Placeholders - [perVariantManifestPlaceholder](perVariantManifestPlaceholder)\n* Renaming APKs - [listenToArtifacts](listenToArtifacts)\n* SourceDirectories.Flat - [addCustomSourceType](addCustomSourceType)\n* SourceDirectories.Layered - [addGeneratedSourceFolder](addGeneratedSourceFolder)\n* SourceDirectories.add - [addCustomSourceType](addCustomSourceType)\n* registerSourceType - [addCustomSourceType](addCustomSourceType)\n# License\n```\nCopyright 2022 The Android Open Source Project\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","android\u002Fgradle-recipes 是一个提供常见构建自定义配置示例的项目，展示了Android Gradle插件的公共API和DSL。该项目使用Kotlin语言编写，包含针对不同AGP版本兼容性的构建脚本，涵盖了从处理Android资源文件到依赖解析等多个方面的功能。它特别适合需要对Android应用或库项目进行高级构建定制的开发者使用，如添加生成的源代码文件夹、监听多个工件、变换目录等操作。通过这些具体的“食谱”，开发者可以更高效地利用AGpel的特性来满足特定需求。",2,"2026-06-11 03:12:39","top_language"]