{"id":20492517,"url":"https://github.com/redmadrobot/gradle-infrastructure","last_synced_at":"2026-02-23T13:19:36.869Z","repository":{"id":37031316,"uuid":"305119202","full_name":"RedMadRobot/gradle-infrastructure","owner":"RedMadRobot","description":"Set of small plugins to reduce boilerplate in Gradle build scripts.","archived":false,"fork":false,"pushed_at":"2024-07-31T14:29:03.000Z","size":1464,"stargazers_count":44,"open_issues_count":15,"forks_count":2,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-12-10T13:44:26.305Z","etag":null,"topics":["android","gradle","gradle-plugin","infrastructure","kotlin"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RedMadRobot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-18T14:22:44.000Z","updated_at":"2024-11-02T21:10:46.000Z","dependencies_parsed_at":"2024-07-17T13:49:01.430Z","dependency_job_id":"5e5219ae-571e-4ef7-8e36-e786d6d5daad","html_url":"https://github.com/RedMadRobot/gradle-infrastructure","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedMadRobot%2Fgradle-infrastructure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedMadRobot%2Fgradle-infrastructure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedMadRobot%2Fgradle-infrastructure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RedMadRobot%2Fgradle-infrastructure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RedMadRobot","download_url":"https://codeload.github.com/RedMadRobot/gradle-infrastructure/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230438185,"owners_count":18225870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","gradle","gradle-plugin","infrastructure","kotlin"],"created_at":"2024-11-15T17:29:27.227Z","updated_at":"2026-02-20T17:09:11.016Z","avatar_url":"https://github.com/RedMadRobot.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gradle Infrastructure\n\n[![Version](https://img.shields.io/maven-central/v/com.redmadrobot.build/infrastructure-common?style=flat-square)][mavenCentral]\n[![Build Status](https://img.shields.io/github/actions/workflow/status/RedMadRobot/gradle-infrastructure/main.yml?branch=develop\u0026style=flat-square)][ci]\n[![License](https://img.shields.io/github/license/RedMadRobot/gradle-infrastructure?style=flat-square)][license]\n\nSmall plugins to reduce boilerplate in Gradle build scripts.\n\n\u003e [!IMPORTANT]\n\u003e These plugins are designed to be used with Gradle Kotlin DSL only.\n\n---\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [Installation](#installation)\n  - [Compatibility](#compatibility)\n- [Plugins](#plugins)\n  - [kotlin-library](#kotlin-library)\n  - [publish](#publish)\n  - [detekt](#detekt)\n- [Android Plugins](#android-plugins)\n  - [application and android-library](#application-and-android-library)\n- [Usage](#usage)\n  - [Add KGP and AGP to build dependencies](#add-kgp-and-agp-to-build-dependencies)\n  - [Configuration](#configuration)\n  - [Align version of all Kotlin libraries](#align-version-of-all-kotlin-libraries)\n  - [Warnings as errors](#warnings-as-errors)\n  - [Share sources between build variants](#share-sources-between-build-variants)\n  - [Enable Detekt checks only on changed files](#enable-detekt-checks-only-on-changed-files)\n  - [Configure JUnit test execution options](#configure-junit-test-execution-options)\n  - [Automatically added repositories](#automatically-added-repositories)\n- [Samples](#samples)\n- [Troubleshooting](#troubleshooting)\n  - [Tests failed - `No value has been specified for property 'localResourcesFile'`](#tests-failed---no-value-has-been-specified-for-property-localresourcesfile)\n  - [`Android resource linking failed` or `Unresolved reference: R`](#android-resource-linking-failed-or-unresolved-reference-r)\n  - [Build failed on CI - `No version of NDK matched the requested version`](#build-failed-on-ci---no-version-of-ndk-matched-the-requested-version)\n  - [`Could not resolve` or `Could not find` dependencies](#could-not-resolve-or-could-not-find-dependencies)\n- [Contributing](#contributing)\n- [License](#license)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Installation\n\nIf you're planning to use android plugins, add Google repository to `settings.gradle.kts`:\n\n```kotlin\npluginManagement {\n    repositories {\n        google() // Required if you use infrastructure-android\n        gradlePluginPortal()\n    }\n}\n```\n\nThen you can apply any of the plugins where you need:\n\n```kotlin\nplugins {\n    id(\"com.redmadrobot.kotlin-library\") version \"0.20.0\"\n    id(\"com.redmadrobot.publish\") version \"0.20.0\"\n    id(\"com.redmadrobot.detekt\") version \"0.20.0\"\n    id(\"com.redmadrobot.application\") version \"0.20.0\"\n    id(\"com.redmadrobot.android-library\") version \"0.20.0\"\n}\n```\n\n\u003e For `kotlin-library` and android-related plugins, you should also add Kotlin Gradle Plugin or Android Gradle Plugin to project build dependencies.\\\n\u003e [Read more...](#add-kgp-and-agp-to-build-dependencies)\n\nIf you want to configure subprojects from root project, you can apply `*-config` plugins to root project.\nThis way subprojects will use configs from parent projects as defaults.\n\n`./build.gradle.kts`:\n\n```kotlin\nplugins {\n    id(\"com.redmadrobot.android-config\")\n}\n\nredmadrobot {\n    android {\n        minSdk = 28\n    }\n}\n```\n\n`./app/build/build.gradle.kts`:\n\n```kotlin\nplugins {\n    id(\"com.redmadrobot.application\")\n}\n\n// Will be used minSdk = 28 by default\nandroid {\n    // ...\n}\n```\n\n*Look at [samples](#samples) for quick start.*\n\n### Compatibility\n\n| gradle-infrastructure | Minimal Gradle version | Minimal KGP version | Minimal AGP version |\n|----------------------:|:----------------------:|:-------------------:|:-------------------:|\n|              **0.19** |          8.0           |        1.9.0        |        8.4.0        |\n|              **0.18** |          7.5           |       1.7.10        |        7.4.0        |\n|              **0.17** |          7.2           |       1.7.10        |        7.1.0        |\n\n## Plugins\n\n```mermaid\ngraph BT\nsubgraph infrastructure-android\n    android-config[com.redmadrobot.android-config]\n    com.redmadrobot.application --\u003e android-config\n    com.redmadrobot.android-library --\u003e android-config\nend\n\nsubgraph infrastructure-detekt\n    com.redmadrobot.detekt\nend\n\nsubgraph infrastructure-kotlin\n    kotlin-config[com.redmadrobot.kotlin-config]\n    com.redmadrobot.kotlin-library --\u003e kotlin-config\nend\n\nsubgraph infrastructure-publish\n    publish-config[com.redmadrobot.publish-config]\n    com.redmadrobot.publish --\u003e publish-config\nend\n\nandroid-config --\u003e kotlin-config\n```\n\n### kotlin-library\n\nCommon configurations for pure Kotlin libraries.\n\n- Applies plugin `kotlin`\n- Enables [explicit API mode][explicit-api]\n\n### publish\n\nCommon publish configurations for both Android and Kotlin libraries.\n\n- Applies plugin `maven-publish`\n- Adds sources and javadocs to publication\n\nYou should specify publishing repositories manually. You can also use [predicates] for publication:\n\n```kotlin\npublishing {\n    repositories {\n        // Unconditional publication\n        rmrNexus()\n        // Publication with conditions\n        if (isRunningOnCi) githubPackages(\"RedMadRobot/gradle-infrastructure\")\n        if (isReleaseVersion \u0026\u0026 credentialsExist(\"ossrh\")) ossrh()\n    }\n}\n```\n\n#### Signing\n\nYou can configure publication via extension `redmadrobot.publishing`:\n\n```kotlin\nredmadrobot {\n    publishing {\n        signArtifacts = true // Enables artifacts signing, required for publication to OSSRH\n        useGpgAgent = true   // By default use gpg-agent for artifacts signing\n    }\n}\n```\n\nRead more about singing configuration in [Signing Plugin][signing-plugin] docs.\n\n#### Customize POM\n\nYou can configure POM properties common for all modules.\n\n\u003e Note: there are extension-functions to simplify common configuration use-cases.\n\u003e All available extensions you can find [here][MavenPom].\n\n```kotlin\nredmadrobot {\n    publishing {\n        pom {\n            // Configure \u003curl\u003e, \u003cscm\u003e and \u003cissueManagement\u003e tags for GitHub project by it's name\n            setGitHubProject(\"RedMadRobot/gradle-infrastructure\")\n            \n            licenses { \n                mit() // Add MIT license\n            }\n            \n            developers {\n                // Shorthand to add a developer\n                developer(id = \"j.doe\", name = \"John Doe\", email = \"john@doe.com\")\n            }\n        }\n    }\n}\n```\n\n#### Customize publication for module\n\nUse `publishing` extension in module build script to configure publication for the single module.\nTake publication name from `PUBLICATION_NAME` constant.\nRead more in [Maven Publish plugin][maven-publish] docs.\n\n```kotlin\npublishing {\n    publications {\n        getByName\u003cMavenPublication\u003e(PUBLICATION_NAME) {\n            // Configure publication here\n        }\n    }\n}\n\n// or even shorter\npublishing.publications.getByName\u003cMavenPublication\u003e(PUBLICATION_NAME) {\n    // Configure publication here\n}\n```\n\n### detekt\n\n- Applies `detekt` plugin with `detekt-formatting`\n- Configures additional tasks:\n    - `detektAll` - Runs Detekt over the whole codebase\n    - `detektBaselineAll` Creates single baseline file in the config directory with issues from the `detektAll` task.\n    - `detektFormat` - Reformats the whole codebase with Detekt\n    - `detektDiff` - Runs Detekt only on changed files (see [Enable Detekt checks only on changed files](#enable-detekt-checks-only-on-changed-files))\n    - `detekt[Variant]All` - Runs Detekt checks with type resolution on specified build variant (example `detektDebugAll`) or main source set (`detektMainAll`) if project is non-android\n    - `detektBaseline[Variant]All` Creates single baseline file in the config directory with issues from the `detekt[Variant]All` task.\n\n\u003e :warning: only `detekt[Variant]All` tasks are compatible with [**type resolution**][type-resolution]. \n\n## Android Plugins\n\n### application and android-library\n\nCommon configurations for Android libraries and application.\n\n[Both][BaseAndroidPlugin]:\n- Specifies default compile, min and target SDK\n- Disables `shaders` [build-features] by default\n- Applies [android-cache-fix-gradle-plugin](https://github.com/gradle/android-cache-fix-gradle-plugin)\n- Configures Android Lint with [defaults][lint-options]\n- [Filters tests][testTaskFilter] to be run on `test` task according to the config.\n  By default, keeps only tests for build type `release`.\n\n[Library][AndroidLibraryPlugin]:\n- Applies plugin `com.android.library`\n- Adds all proguard files from `proguard` folder as `consumerProguardFiles`\n- Disables `androidResources` and `resValues` [build-features] by default\n- Enables [explicit API mode][explicit-api]\n\n[Application][AndroidApplicationPlugin]:\n- Applies plugin `com.android.application`\n- Adds all proguard files from `proguard` folder\n- Configures `debug`, `qa` and `release` build types\n\n#### QA build type name configuration\n\nBy default, for QA builds used name \"qa\", but you can configure `BUILD_TYPE_QA` via `gradle.properties`:\n\n```properties\n# Override QA build type name\nredmadrobot.android.build.type.qa=staging\n```\n\n## Usage\n\n### Add KGP and AGP to build dependencies\n\n\u003e Starting from gradle-infrastructure **0.18** KGP and AGP removed from transitive dependencies, so you should manually\n\u003e add it to project build dependencies.\n\n`kotlin-library` plugin requires Kotlin Gradle Plugin to work.\nAndroid-related plugins requires both KGP and AGP.\n\nYou can use two different approaches to add plugin as a build dependency:\n\n1. Add needed plugins to top-level `build.gradle.kts` with `apply false`:\n   ```kotlin\n   // (root)/build.gradle.kts\n\n   plugins {\n       // Use `apply false` in the top-level build.gradle file to add a Gradle \n       // plugin as a build dependency but not apply it to the current (root) project.\n       // Here you can specify desired AGP and KGP versions to use.\n       id(\"com.android.application\") version \"7.4.2\" apply false\n       id(\"org.jetbrains.kotlin.android\") version \"1.8.10\" apply false\n   }\n   ```\n\n2. If you have `buildSrc` or some other module containing build logic, you can add plugins to `dependencies` of this\n   module:\n   ```kotlin\n   // (root)/buildSrc/build.gradle.kts\n   \n   dependencies {\n       // Here you can specify desired AGP and KGP versions to use.\n       implementation(kotlin(\"gradle-plugin\", version = \"1.8.10\"))\n       implementation(\"com.android.tools.build:gradle:7.4.2\")\n   }\n   ```\n\nSee [compatibility table](#compatibility) to check what versions are compatible with `gradle-infrastructure`.\n\n### Configuration\n\nYou can configure the plugins via the `redmadrobot` extension.\nHere are listed all available options, with their default values:\n\n```kotlin\nredmadrobot {\n    /* Common options */\n    // Directory with configs for static analyzers and other tools.\n    configsDir = file(\"config/\")\n\n    // Directory with reports of static analyzers and other tools.\n    reportsDir = file(\"build/reports/\")\n\n    /* `kotlin-config` options */\n    test {\n        // Specifies that JUnit Platform (JUnit 5) should be used to execute tests.\n        useJunitPlatform()\n\n        // Specifies that JUnit 4 should be used to execute tests.\n        useJunit()\n    }\n\n    /* `android-config` options */\n    android {\n        // minSdk to be used in all android modules.\n        minSdk = 23\n\n        // targetSdk to be used in all android modules.\n        targetSdk = 34\n\n        // compileSdk to be used in all android modules\n        compileSdk = \"34\"\n\n        // Build Tools version to be used in all android modules.\n        buildToolsVersion = System.getenv(\"ANDROID_BUILD_TOOLS_VERSION\")\n\n        // NDK version to be used in all android modules.\n        ndkVersion = System.getenv(\"ANDROID_NDK_VERSION\")\n\n        // Filter for test tasks that should be run on ':test'.\n        testTasksFilter = { taskProvider -\u003e taskProvider.name.endsWith(\"ReleaseUnitTest\") }\n    \n        // Overrides of test configuration for android projects\n        test { /* ... */ }\n    }\n    \n    /* `detekt` options */\n    detekt {\n        // Enable Detekt checks only for modified files\n        // (Disabled by default)\n        checkOnlyDiffWithBranch(branch = \"main\") {\n            fileExtensions = setOf(\".kt\", \".kts\")\n        }\n    }\n\n    /* `publish-config` options */\n    publishing {\n        // Enables artifacts signing before publication.\n        signArtifacts = false\n\n        // Use gpg-agent to sign artifacts. Has effect only if signArtifacts is `true`.\n        useGpgAgent = true\n\n        // Configures POM file for this project and its subprojects.\n        pom { /* ... */ }\n    }\n}\n```\n\n### Align version of all Kotlin libraries\n\n\u003e It is not a part of **gradle-infrastructure**, but it is important to know.\n\nTo align the Kotlin version for all dependencies including transitive ones, use `kotlin-bom`:\n\n```kotlin\ndependencies {\n    // Align versions of all Kotlin components \n    implementation(platform(kotlin(\"bom\", version = \"1.8.10\")))\n\n    // Now you can add Kotlin components without version\n    implementation(kotlin(\"stdlib\"))\n    testImplementation(kotlin(\"test-junit5\"))\n}\n```\n\nAnother way is using `kotlin.coreLibrariesVersion` property:\n\n```kotlin\n// Set version for all Kotlin components\nkotlin.coreLibrariesVersion = \"1.8.10\"\n\ndependencies {\n    // Now you can add Kotlin components without version\n    implementation(kotlin(\"stdlib\"))\n    testImplementation(kotlin(\"test-junit5\"))\n}\n```\n\n### Share sources between build variants\n\nYou can share sources between two build variants.  \nFor example, you need to use debug panel in both \"debug\" and \"QA\" builds, and don't want to duplicate code for each of these build types.\nYou can do it in one line with [addSharedSourceSetRoot] extension-function:\n\n```kotlin\nandroid {\n    // We need to share sources between debug and QA builds\n    sourceSet.addSharedSourceSetRoot(BUILD_TYPE_DEBUG, BUILD_TYPE_QA)\n\n    // We can specify a name for the source set root if needed\n    sourceSet.addSharedSourceSetRoot(BUILD_TYPE_DEBUG, BUILD_TYPE_QA, name = \"debugPanel\")\n}\n```\n\n### Enable Detekt checks only on changed files\n\nPlugin `com.redmadrobot.detekt` adds task `detektDiff` to check the only files changed comparing to the base branch.\nTo enable this feature, you should specify base branch name:\n\n```kotlin\nredmadrobot {\n    detekt {\n        checkOnlyDiffWithBranch(\"develop\")\n    }\n}\n```\n\nThe plugin then adds a `detektDiff` task that allows you to check only changed files comparing to the specified base branch.\nThe modified files are provided by Git.\n\n\u003e Task `detektDiff` is incompatible with [**type resolution**][type-resolution].\n\u003e It means some configured rules will not work.\n \nThe `detektDiff` task includes the '.kt' and '.kts' files. \nYou can change it by providing a set of extensions in the configuration block to `checkOnlyDiffWithBranch`:\n\n```kotlin\nredmadrobot {\n    detekt {\n        checkOnlyDiffWithBranch(\"develop\") {\n            fileExtensions = setOf(\".kt\")\n        }\n    }\n}\n```\n\n### Configure JUnit test execution options\n\nBy default, the plugin uses the JUnit Platform to run tests.\nIf you want to configure it, for example include an engine, you can do it using the `test` extension for both JVM and android.\n\n```kotlin\nredmadrobot {\n    test {\n        useJunitPlatform {\n            includeEngines(\"spek2\")\n        }\n    }\n    android {\n        test {\n            useJunitPlatform {\n                includeEngines(\"spek2\")\n            }\n        }\n    }\n}\n```\n\nIf you want to use JUnit 4 framework to run tests, you need to specify `useJunit()` in test block.\n\n```kotlin\nredmadrobot {\n    test {\n        useJunit()\n    }\n}\n```\n\n### Automatically added repositories\n\n\u003e [!WARNING]\n\u003e This feature is deprecated and is disabled by default since v0.19\n\u003e Currently, you can enable this behavior, though this option may be deleted at some point.\n\nInfrastructure plugins can automatically add required repositories:\n\n- **kotlin** plugin adds `mavenCentral` repo\n- **detekt** plugin adds `mavenCentral` repo\n- **android** plugins add `mavenCentral` and `google` repos\n\nThis feature should be enabled by flag in `gradle.properties`:\n\n```properties\nredmadrobot.add.repositories=true\n```\n\n## Samples\n\nLook for samples in [samples] package.\n\nIf you need closer to life samples, check these projects:\n- [mapmemory] - Multi module, kotlin library, publication, detekt\n- [itemsadapter] - Multi module, android library, publication, detekt\n- [redmadrobot-android-ktx] - Multi module, android library, publication, detekt\n- [infrastructure] - Gradle plugin, publication\n\n## Troubleshooting\n\n### Tests failed - `No value has been specified for property 'localResourcesFile'`\n\n```\nA problem was found with the configuration of task ':mylib:generateReleaseUnitTestStubRFile' (type 'GenerateLibraryRFileTask').\n\u003e No value has been specified for property 'localResourcesFile'.\n```\n\nIt is a [known bug](https://issuetracker.google.com/issues/161586464) in AGP 4.1.0 caused when `androidResources` is disabled.\nAs workaround, you can enable this build feature for module:\n```kotlin\nandroid {\n    // TODO: Remove when bug in AGP will be fixed.\n    //  https://issuetracker.google.com/issues/161586464\n    buildFeatures.androidResources = true\n}\n```\n\n### `Android resource linking failed` or `Unresolved reference: R`\n\n```\nExecution failed for task ':app:processDebugResources'.\n\u003e A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade\n   \u003e Android resource linking failed\n     AAPT: error: resource style/TextAppearance.App.Headline4 (aka com.example.app.debug:style/TextAppearance.App.Headline4) not found.\n     error: resource style/TextAppearance.App.Body2 (aka com.example.app.debug:style/TextAppearance.App.Body2) not found.\n     error: resource style/Theme.App (aka com.example.app.debug:style/Theme.App) not found.\n     error: resource style/Theme.App (aka com.example.app.debug:style/Theme.App) not found.\n     error: failed linking references.\n```\n\nBuild feature `androidResources` is disabled by default for android libraries.\nIf you get these errors you should enable it:\n\n```kotlin\nandroid {\n    buildFeatures.androidResources = true\n}\n```\n\n### Build failed on CI - `No version of NDK matched the requested version`\n\n```\nExecution failed for task ':app:stripDebugDebugSymbols'.\n\u003e No version of NDK matched the requested version 21.0.6113669. Versions available locally: 21.1.6352462\n```\n\nIt is because NDK version on CI differs from a requested version.\nYou can change requested version by setting `android.ndkVersion`.\n\nPlugins `com.redmadrobot.android-library` and `com.redmadrobot.application` by default apply NDK version from env variable `ANDROID_NDK_VERSION` if it is set.\n\n### `Could not resolve` or `Could not find` dependencies\n\n```\n\u003e Could not resolve all files for configuration ':app:debugRuntimeClasspath'.\n   \u003e Could not find com.xwray:groupie:2.7.2\n     Searched in the following locations:\n       - ...\n     Required by:\n         project :app \u003e com.xwray:groupie:2.7.2\n```\n\nIt may be because of `gradle-infrastructure` uses `mavenCentral` instead of `jcenter` by default.\n[JCenter is at the end of life][jcenter-end] and should not be used anymore.\nUnfortunately not all libraries migrated to Maven Central yet.\nTo avoid these errors, declare `jcenter` repository in your build script and configure it to be used only for missing dependencies.\n\n```kotlin\nrepositories {\n    jcenter {\n        content {\n            // It is useful to add a link to the issue about migration from JCenter\n            // https://github.com/lisawray/groupie/issues/384\n            includeModule(\"com.xwray\", \"groupie\")\n        }\n    }\n}\n```\n\n## Contributing\n\nMerge requests are welcome.\nFor major changes, please open an issue first to discuss what you would like to change.\n\n## License\n\n[MIT][license]\n\n[samples]: samples/\n[MavenPom]: infrastructure/src/main/kotlin/dsl/MavenPom.kt\n[predicates]: infrastructure/src/main/kotlin/dsl/PublishingPredicates.kt\n[addSharedSourceSetRoot]: infrastructure-android/src/main/kotlin/dsl/SourceSets.kt\n[lint-options]: infrastructure-android/src/main/kotlin/android/BaseAndroidPlugin.kt#L76-L80\n[testTaskFilter]: infrastructure-android/src/main/kotlin/android/AndroidOptions.kt#L28-L35\n[BaseAndroidPlugin]: infrastructure-android/src/main/kotlin/android/BaseAndroidPlugin.kt\n[AndroidLibraryPlugin]: infrastructure-android/src/main/kotlin/android/AndroidLibraryPlugin.kt\n[AndroidApplicationPlugin]: infrastructure-android/src/main/kotlin/android/AndroidApplicationPlugin.kt\n\n[infrastructure]: #\n[itemsadapter]: https://github.com/RedMadRobot/itemsadapter\n[redmadrobot-android-ktx]: https://github.com/RedMadRobot/redmadrobot-android-ktx\n[mapmemory]: https://github.com/RedMadRobot/mapmemory\n\n[mavenCentral]: https://central.sonatype.com/search?namespace=com.redmadrobot.build\n[ci]: https://github.com/RedMadRobot/gradle-infrastructure/actions\n[license]: LICENSE\n\n[build-features]: https://developer.android.com/reference/tools/gradle-api/com/android/build/api/dsl/BuildFeatures\n[explicit-api]: https://kotlinlang.org/docs/reference/whatsnew14.html#explicit-api-mode-for-library-authors\n[signing-plugin]: https://docs.gradle.org/current/userguide/signing_plugin.html\n[maven-publish]: https://docs.gradle.org/current/userguide/publishing_maven.html\n[project-properties]: https://docs.gradle.org/current/userguide/build_environment.html#sec:project_properties\n\n[jcenter-end]: https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/\n\n[detekt]: https://detekt.github.io/detekt/\n[type-resolution]: https://detekt.github.io/detekt/type-resolution.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredmadrobot%2Fgradle-infrastructure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredmadrobot%2Fgradle-infrastructure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredmadrobot%2Fgradle-infrastructure/lists"}