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/)