一键导入
gradle-build-system
Gradle dependencies, modules, convention plugins, and Android build failure triage.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Gradle dependencies, modules, convention plugins, and Android build failure triage.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use this skill to generate well-branded interfaces and assets for RIPDPI (an Android-native, Compose-first VPN and DPI-bypass app), either for production or throwaway prototypes/mocks/etc. Contains essential design guidelines, colors, type, fonts, brand-ship icons, and an interactive UI kit of every public composable from the live ui/components tree.
Use when managing the Rust workspace, adding/removing crates, editing workspace dependencies, running cargo nextest/audit/deny, configuring Cargo profiles for Android cross-compilation, debugging Cargo.lock churn, migrating crate edition, or wiring Gradle to cargo via the ripdpi.android.rust-native plugin.
Use when modifying the diagnostics scan pipeline, ScanRequest/ScanReport types, ProbeTask families, ripdpi-monitor-engine / ripdpi-diagnostics-* crates, strategy-probe candidates, the diagnostics catalog (packs/profiles), wire-schema contracts between Rust and Kotlin, DIAGNOSTICS_ENGINE_SCHEMA_VERSION, golden contract tests, or adding a new probe type / profile. Triggers on diagnostics scans, strategy probes, automatic audit, dpi-detector profiles, or anything in core/diagnostics or native/rust/crates/ripdpi-monitor-*.
Android-specific Rust build, verification, and packaging — per-target 16 KiB page alignment, size-optimized release profile, ELF symbol allowlist, .so size budgets, NDK 29 specifics. Use when modifying .cargo/config.toml for Android targets, the workspace [profile.release] / [profile.android-jni] block, or when verifying a built .so before release.
Telemetry and observability discipline for the RIPDPI Android Rust stack — control-plane vs data-plane logging, bounded flume event queues, atomic counters, snapshot polling, readiness callbacks, and deterministic JSON contracts. Use when authoring or modifying telemetry emission code, the bounded event ring, the Kotlin-side telemetry consumer, or any per-packet logging.
Custom detekt rules, DI/privacy/suppression guardrails, detekt.yml configuration, and false-positive triage.
| name | gradle-build-system |
| description | Gradle dependencies, modules, convention plugins, and Android build failure triage. |
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.
| 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
[versions] in gradle/libs.versions.toml[libraries] with version.refimplementation(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.
core/, feature/, etc.)build.gradle.kts applying convention plugin:
plugins {
id("ripdpi.android.library")
}
android { namespace = "com.poyka.ripdpi.your.module" }
include(":your:module") to settings.gradle.ktsid("ripdpi.android.compose")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 |
includeBuild("build-logic") in settings). Changes to convention plugins require re-sync../gradlew staticAnalysis -- it aggregates detekt, ktlint, and Android lint for the quality-enabled Android modules.: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/.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.| 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..." } |