Gradle Build System

SkillDev tools

Gradle dependencies, modules, convention plugins, and Android build failure triage.

Available today. Use it from your connected AI after setup.

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

PluginPurpose
ripdpi.android.applicationApp module: compileSdk, minSdk, targetSdk, JDK 17
ripdpi.android.libraryLibrary modules: compileSdk, minSdk, JDK 17
ripdpi.android.composeCompose compiler configuration
ripdpi.android.nativeNDK version, ABI filters, legacy packaging
ripdpi.android.qualityShared detekt + ktlint + Android lint verification wiring
ripdpi.android.coverageShared JaCoCo coverage wiring
ripdpi.android.protobufProtobuf code generation setup

Plugin sources: build-logic/convention/src/main/kotlin/ripdpi.android.*.gradle.kts

Adding a Dependency

  1. Add version to [versions] in gradle/libs.versions.toml
  2. Add library to [libraries] with version.ref
  3. 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

  1. Create module directory under appropriate parent (core/, feature/, etc.)
  2. Create build.gradle.kts applying convention plugin:
    plugins {
        id("ripdpi.android.library")
    }
    android { namespace = "com.poyka.ripdpi.your.module" }
    
  3. Add include(":your:module") to settings.gradle.kts
  4. Add Compose plugin if needed: id("ripdpi.android.compose")

Properties (Single Source of Truth)

All in gradle.properties:

PropertyMeaning
ripdpi.compileSdkAndroid compile SDK; read the live value before selecting SDK packages or APIs
ripdpi.minSdkMinimum supported Android API
ripdpi.targetSdkRuntime-behavior target; changes require separate compatibility testing
ripdpi.nativeNdkVersionPinned Android NDK version
ripdpi.nativeAbisFull CI/release ABI set
ripdpi.localNativeAbisDefaultLocal 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:buildRustNativeLibs runs before preBuild. If native build fails, check NDK installation path, Rust target availability, and the ripdpi.android.rust-native convention plugin under build-logic/convention/.
  • Local ABI fast path: local non-release builds follow ripdpi.localNativeAbisDefault; when it is host, Apple Silicon resolves to arm64-v8a and Intel hosts resolve to x86_64. Use -Pripdpi.localNativeAbis=x86_64 for emulator-focused iteration.

Common Mistakes

MistakeFix
Adding plugin directly to moduleUse convention plugin from build-logic/
Hardcoding version in build.gradle.ktsAdd to version catalog libs.versions.toml
Changing SDK versions in moduleChange in gradle.properties, convention plugins read it
Missing namespace in new library moduleRequired: 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