gradle-build-performance

Debug and optimize Android/Gradle build performance. Use when builds are slow, investigating CI/CD performance, analyzing build scans, or identifying compilation bottlenecks.

By new-silvermoon · 723 installs

npx skills add new-silvermoon/awesome-android-agent-skills --skill gradle-build-performance

Source repository · Upstream listing

Gradle Build Performance When to Use Build times are slow (clean or incremental) Investigating build performance regressions Analyzing Gradle Build Scans Identifying configuration vs execution bottlenecks Optimizing CI/CD build times Enabling Gradle Configuration Cache Reducing unnecessary recompilation Debugging kapt/KSP annotation processing Example Prompts "My builds are slow, how can I speed them up?" "How do I analyze a Gradle build scan?" "Why is configuration taking so long?" "Why does my project always recompile everything?" "How do I enable configuration cache?" "Why is kapt so slow?" Workflow 1. Measure Baseline — Clean build + incremental build times 2. Generate Build Scan — ./gradlew assembleDebug scan 3. Identify Phase — Configuration? Execution? Dependency resolution? 4. Apply ONE optimization — Don't batch changes 5. Measure Improvement — Compare against baseline 6. Verify in Build Scan — Visual confirmation Quick Diagnostics Generate Build Scan Profile Build Locally Build Timing Summary Build Phases Phase What Happens Common Issues Initialization settings.gradle.kts evaluated Too many include() statements Configuration All build.gradle.kts files evaluated Expensive plugins, eager task creation Execution Tasks run based on inputs/outputs Cache misses, non incremental tasks Identify the Bottleneck Long configuration phase : Focus on plugin and buildscript optimization Long execution phase : Focus on task caching and parallelization Dependency resolution slow : Focus on repository configuration 12 Optimization Patterns 1. Enable Configuration Cache Caches configuration phase across builds (AGP 8.0+): 2. Enable Build Cache Reuses task outputs across builds and machines: 3. Enable Parallel Execution Build independent modules simultaneously: 4. Increase JVM Heap Allocate more memory for large projects: 5. Use Non Transitive R Classes Reduces R class size and compilation (AGP 8.0+ default): 6. Migrate kapt to KSP KSP is 2x faster than kapt for Kotlin: 7. Avoid Dynamic Dependencies Pin dependency versions: 8. Optimize Repository Order Put most used repositories first: 9. Use includeBuild for Local Modules Composite builds are faster than project() for large monorepos: 10. Enable Incremental Annotation Processing 11. Avoid Configuration Time I/O Don't read files or make network calls during configuration: 12. Use Lazy Task Configuration Avoid create() , use register() : Common Bottleneck Analysis Slow Configuration Phase Symptoms : Build scan shows long "Configuring build" time Causes & Fixes : Cause Fix Eager task creation Use tasks.register() instead of tasks.create() buildSrc with many dependencies Migrate to Convention Plugins with includeBuild File I/O in build scripts Use providers.fileContents() Network calls in plugins Cache results or use offline mode Slow Compilation Symptoms : :app:compileDebugKotlin takes too long Causes & Fixes : Cause Fix Non incremental changes Avoid build.gradle.kts changes that invalidate cache Large modules Break into smaller feature modules Excessive kapt usage Migrate to KSP Kotlin compiler memory Increase kotlin.daemon.jvmargs Cache Misses Symptoms : Tasks always rerun despite no changes Causes & Fixes : Cause Fix Unstable task inputs Use @PathSensitive , @NormalizeLineEndings Absolute paths in outputs Use relative paths Missing @CacheableTask Add annotation to custom tasks Different JDK versions Standardize JDK across environments CI/CD Optimizations Remote Build Cache Gradle Enterprise / Develocity For advanced build analytics: Skip Unnecessary Tasks in CI Android Studio Settings File → Settings → Build → Gradle Gradle JDK : Match your project's JDK Build and run using : Gradle (not IntelliJ) Run tests using : Gradle File → Settings → Build → Compiler Compile independent modules in parallel : ✅ Enabled Configure on demand : ❌ Disabled (deprecated) Verification Checklist After optimizations, verify: [ ] Configuration cache enabled and working [ ] Build cache hit rate 80% (check build scan) [ ] No dynamic dependency versions [ ] KSP used instead of kapt where possible [ ] Parallel execution enabled [ ] JVM memory tuned appropriately [ ] CI remote cache configured [ ] No configuration time I/O References [Optimize Build Speed](https://developer.android.com/build/optimize your build) [Gradle Configuration Cache](https://docs.gradle.org/current/userguide/configuration cache.html) [Gradle Build Cache](https://docs.gradle.org/current/userguide/build cache.html) [Migrate from kapt to KSP](https://developer.android.com/build/migrate to ksp) [Gradle Build Scans](https://scans.gradle.com/)