Gradle Build System
SkillDev toolsGradle dependencies, modules, convention plugins, and Android build failure triage.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Gradle Build System skill
What this skill tells your AI
The instructions your AI receives, as published by po4yka/ripdpi in .agents/skills/gradle-build-system/SKILL.md and read by ahel’s review.
Overview
RIPDPI uses the Gradle version pinned by gradle/wrapper/gradle-wrapper.properties, convention plugins in build-logic/convention/, and the version catalog at gradle/libs.versions.toml. Read those source files before reporting versions; all module build configuration flows through convention plugins.
Convention Plugins
| Plugin | Purpose |
|---|---|
ripdpi.android.application | App module: compileSdk, minSdk, targetSdk, JDK 17 |
ripdpi.android.library | Library modules: compileSdk, minSdk, JDK 17 |
ripdpi.android.compose | Compose compiler configuration |
ripdpi.android.native | NDK version, ABI filters, legacy packaging |
ripdpi.android.quality | Shared detekt + ktlint + Android lint verification wiring |
ripdpi.android.coverage | Shared JaCoCo coverage wiring |
ripdpi.android.protobuf | Protobuf code generation setup |
Plugin sources: build-logic/convention/src/main/kotlin/ripdpi.android.*.gradle.kts
Adding a Dependency
- Add version to
[versions]ingradle/libs.versions.toml - Add library to
[libraries]withversion.ref - Use in module:
implementation(libs.your.library)
# gradle/libs.versions.toml
[versions]
your-lib = "1.0.0"
[libraries]
your-library = { module = "com.example:library", version.ref = "your-lib" }
Never hardcode versions in build.gradle.kts files.
Adding a New Module
- Create module directory under appropriate parent (
core/,feature/, etc.) - Create
build.gradle.ktsapplying convention plugin:plugins { id("ripdpi.android.library") } android { namespace = "com.poyka.ripdpi.your.module" } - Add
include(":your:module")tosettings.gradle.kts - Add Compose plugin if needed:
id("ripdpi.android.compose")
Properties (Single Source of Truth)
All in gradle.properties:
| Property | Meaning |
|---|---|
ripdpi.compileSdk | Android compile SDK; read the live value before selecting SDK packages or APIs |
ripdpi.minSdk | Minimum supported Android API |
ripdpi.targetSdk | Runtime-behavior target; changes require separate compatibility testing |
ripdpi.nativeNdkVersion | Pinned Android NDK version |
ripdpi.nativeAbis | Full CI/release ABI set |
ripdpi.localNativeAbisDefault | Local ABI policy; host derives the ABI from the workstation architecture |
Gotchas
- build-logic is an included build (
includeBuild("build-logic")in settings). Changes to convention plugins require re-sync. - Static analysis: Run
./gradlew staticAnalysis-- it aggregates detekt, ktlint, and Android lint for the quality-enabled Android modules. - Native build order:
:core:engine:buildRustNativeLibsruns beforepreBuild. If native build fails, check NDK installation path, Rust target availability, and theripdpi.android.rust-nativeconvention plugin underbuild-logic/convention/. - Local ABI fast path: local non-release builds follow
ripdpi.localNativeAbisDefault; when it ishost, Apple Silicon resolves toarm64-v8aand Intel hosts resolve tox86_64. Use-Pripdpi.localNativeAbis=x86_64for emulator-focused iteration.
Common Mistakes
| Mistake | Fix |
|---|---|
| Adding plugin directly to module | Use convention plugin from build-logic/ |
| Hardcoding version in build.gradle.kts | Add to version catalog libs.versions.toml |
| Changing SDK versions in module | Change in gradle.properties, convention plugins read it |
| Missing namespace in new library module | Required: android { namespace = "com.poyka.ripdpi..." } |
Signals
- GitHub stars
- 69
- Forks
- 4
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
gradle-build-system- Source
- github.com/po4yka/ripdpi