{"id":"cfc5b12e-8b54-430d-82ec-39ee5692f079","shortId":"vdqAhe","kind":"skill","title":"android-modularization","tagline":"Design Android repositories with feature, core, and build-logic modules that scale without cyclic dependencies.","description":"# Android Modularization\n\n## When To Use\n- Use this skill when the request is about: android module split, feature modularization in android, break cyclic module dependency.\n- Primary outcome: Design Android repositories with feature, core, and build-logic modules that scale without cyclic dependencies.\n- Reach for this skill when the problem is dependency direction, API ownership, or feature/data/core boundaries, not task-level build speed tuning.\n- Handoff skills when the scope expands:\n- `android-gradle-build-logic`\n- `android-architecture-clean`\n\n## Workflow\n1. Map the current module graph first: app, feature, data, core, build-logic, and any dynamic-feature or test-only modules.\n2. Identify which direction is wrong: feature-to-feature coupling, framework leakage into domain/data, API surface too wide, or duplicated shared code with unclear ownership.\n3. Split by ownership and change rate, not by abstract theory; create the smallest module boundary that removes the current coupling problem.\n4. Keep `api` vs `implementation`, public surface area, and test fixture ownership explicit so the new boundary stays stable.\n5. Hand off build-speed or plugin-architecture issues only after the module graph itself is coherent.\n\n## Guardrails\n- Prefer official Android and Kotlin guidance over custom local conventions when they conflict.\n- Keep public APIs boring and explicit; avoid clever abstractions that hide Android lifecycle costs.\n- Do not mix architectural cleanup with product behavior changes unless the request explicitly needs both.\n- Document any compatibility constraints that will affect old modules or generated code.\n- Avoid over-modularizing a small codebase when the real need is a single clearer ownership boundary.\n\n## Anti-Patterns\n- Sprinkling helpers across modules without a clear ownership boundary.\n- Introducing framework-specific code into pure domain or data layers.\n- Refactoring every adjacent file when only one contract needed to change.\n- Leaving migration notes implied instead of writing them down.\n- Treating module count as the goal instead of build isolation and dependency clarity.\n\n## Examples\n### Happy path\n- Scenario: Review the fixture apps as app modules and map the next split into feature/core layers.\n- Command: `cd examples/orbittasks-compose && ./gradlew :app:projects`\n\n### Edge case\n- Scenario: Keep shared XML resources and manifest placeholders from leaking across modules.\n- Command: `cd examples/orbittasks-xml && ./gradlew :app:dependencies`\n\n### Failure recovery\n- Scenario: Differentiate modularization requests from architecture-clean and build-logic prompts.\n- Command: `python3 scripts/eval_triggers.py --skill android-modularization`\n\n## Done Checklist\n- The implementation path is explicit, minimal, and tied to the right Android surface.\n- Relevant example commands and benchmark prompts have been exercised or updated.\n- Handoffs to adjacent skills are documented when the request crosses boundaries.\n- Official references cover the chosen pattern and the main migration or troubleshooting path.\n\n## Official References\n- [https://developer.android.com/topic/modularization](https://developer.android.com/topic/modularization)\n- [https://docs.gradle.org/current/userguide/multi_project_builds.html](https://docs.gradle.org/current/userguide/multi_project_builds.html)\n- [https://developer.android.com/build/extend-agp](https://developer.android.com/build/extend-agp)\n- [https://developer.android.com/build/migrate-to-kotlin-dsl](https://developer.android.com/build/migrate-to-kotlin-dsl)","tags":["android","modularization","agent","skills","krutikjain","agent-skills","android-development","android-skills","androidx","claude-code","codex","cursor"],"capabilities":["skill","source-krutikjain","skill-android-modularization","topic-agent-skills","topic-android","topic-android-development","topic-android-skills","topic-androidx","topic-claude-code","topic-codex","topic-cursor","topic-jetpack-compose","topic-kotlin","topic-skills"],"categories":["android-agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/krutikJain/android-agent-skills/android-modularization","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add krutikJain/android-agent-skills","source_repo":"https://github.com/krutikJain/android-agent-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (3,567 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:28.198Z","embedding":null,"createdAt":"2026-05-18T13:20:50.813Z","updatedAt":"2026-05-18T19:13:28.198Z","lastSeenAt":"2026-05-18T19:13:28.198Z","tsv":"'/build/extend-agp](https://developer.android.com/build/extend-agp)':465 '/build/migrate-to-kotlin-dsl](https://developer.android.com/build/migrate-to-kotlin-dsl)':468 '/current/userguide/multi_project_builds.html](https://docs.gradle.org/current/userguide/multi_project_builds.html)':462 '/gradlew':360,380 '/topic/modularization](https://developer.android.com/topic/modularization)':459 '1':100 '2':124 '3':150 '4':172 '5':191 'abstract':159,232 'across':287,375 'adjac':307,433 'affect':259 'android':2,5,20,33,39,47,91,96,213,235,403,418 'android-architecture-clean':95 'android-gradle-build-log':90 'android-modular':1,402 'anti':283 'anti-pattern':282 'api':72,139,174,226 'app':107,345,347,361,381 'architectur':97,200,241,391 'architecture-clean':390 'area':179 'avoid':230,265 'behavior':245 'benchmark':424 'bore':227 'boundari':76,165,188,281,293,441 'break':40 'build':12,54,81,93,112,195,333,395 'build-log':11,53,111,394 'build-spe':194 'case':364 'cd':358,378 'chang':155,246,315 'checklist':406 'chosen':446 'clariti':337 'clean':98,392 'cleanup':242 'clear':291 'clearer':279 'clever':231 'code':146,264,298 'codebas':271 'coher':209 'command':357,377,398,422 'compat':255 'conflict':223 'constraint':256 'contract':312 'convent':220 'core':9,51,110 'cost':237 'count':327 'coupl':134,170 'cover':444 'creat':161 'cross':440 'current':103,169 'custom':218 'cyclic':18,41,60 'data':109,303 'depend':19,43,61,70,336,382 'design':4,46 'developer.android.com':458,464,467 'developer.android.com/build/extend-agp](https://developer.android.com/build/extend-agp)':463 'developer.android.com/build/migrate-to-kotlin-dsl](https://developer.android.com/build/migrate-to-kotlin-dsl)':466 'developer.android.com/topic/modularization](https://developer.android.com/topic/modularization)':457 'differenti':386 'direct':71,127 'docs.gradle.org':461 'docs.gradle.org/current/userguide/multi_project_builds.html](https://docs.gradle.org/current/userguide/multi_project_builds.html)':460 'document':253,436 'domain':301 'domain/data':138 'done':405 'duplic':144 'dynam':117 'dynamic-featur':116 'edg':363 'everi':306 'exampl':338,421 'examples/orbittasks-compose':359 'examples/orbittasks-xml':379 'exercis':428 'expand':89 'explicit':184,229,250,411 'failur':383 'featur':8,36,50,108,118,131,133 'feature-to-featur':130 'feature/core':355 'feature/data/core':75 'file':308 'first':106 'fixtur':182,344 'framework':135,296 'framework-specif':295 'generat':263 'goal':330 'gradl':92 'graph':105,206 'guardrail':210 'guidanc':216 'hand':192 'handoff':84,431 'happi':339 'helper':286 'hide':234 'identifi':125 'implement':176,408 'impli':319 'instead':320,331 'introduc':294 'isol':334 'issu':201 'keep':173,224,366 'kotlin':215 'layer':304,356 'leak':374 'leakag':136 'leav':316 'level':80 'lifecycl':236 'local':219 'logic':13,55,94,113,396 'main':450 'manifest':371 'map':101,350 'migrat':317,451 'minim':412 'mix':240 'modul':14,34,42,56,104,123,164,205,261,288,326,348,376 'modular':3,21,37,268,387,404 'need':251,275,313 'new':187 'next':352 'note':318 'offici':212,442,455 'old':260 'one':311 'outcom':45 'over-modular':266 'ownership':73,149,153,183,280,292 'path':340,409,454 'pattern':284,447 'placehold':372 'plugin':199 'plugin-architectur':198 'prefer':211 'primari':44 'problem':68,171 'product':244 'project':362 'prompt':397,425 'public':177,225 'pure':300 'python3':399 'rate':156 'reach':62 'real':274 'recoveri':384 'refactor':305 'refer':443,456 'relev':420 'remov':167 'repositori':6,48 'request':30,249,388,439 'resourc':369 'review':342 'right':417 'scale':16,58 'scenario':341,365,385 'scope':88 'scripts/eval_triggers.py':400 'share':145,367 'singl':278 'skill':27,65,85,401,434 'skill-android-modularization' 'small':270 'smallest':163 'source-krutikjain' 'specif':297 'speed':82,196 'split':35,151,353 'sprinkl':285 'stabl':190 'stay':189 'surfac':140,178,419 'task':79 'task-level':78 'test':121,181 'test-on':120 'theori':160 'tie':414 'topic-agent-skills' 'topic-android' 'topic-android-development' 'topic-android-skills' 'topic-androidx' 'topic-claude-code' 'topic-codex' 'topic-cursor' 'topic-jetpack-compose' 'topic-kotlin' 'topic-skills' 'treat':325 'troubleshoot':453 'tune':83 'unclear':148 'unless':247 'updat':430 'use':24,25 'vs':175 'wide':142 'without':17,59,289 'workflow':99 'write':322 'wrong':129 'xml':368","prices":[{"id":"a1701163-479b-4587-a5a3-2a86b3d1d860","listingId":"cfc5b12e-8b54-430d-82ec-39ee5692f079","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"krutikJain","category":"android-agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:20:50.813Z"}],"sources":[{"listingId":"cfc5b12e-8b54-430d-82ec-39ee5692f079","source":"github","sourceId":"krutikJain/android-agent-skills/android-modularization","sourceUrl":"https://github.com/krutikJain/android-agent-skills/tree/main/skills/android-modularization","isPrimary":false,"firstSeenAt":"2026-05-18T13:20:50.813Z","lastSeenAt":"2026-05-18T19:13:28.198Z"}],"details":{"listingId":"cfc5b12e-8b54-430d-82ec-39ee5692f079","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"krutikJain","slug":"android-modularization","github":{"repo":"krutikJain/android-agent-skills","stars":8,"topics":["agent-skills","android","android-development","android-skills","androidx","claude-code","codex","cursor","jetpack-compose","kotlin","skills"],"license":"mit","html_url":"https://github.com/krutikJain/android-agent-skills","pushed_at":"2026-03-25T05:47:20Z","description":"Android skills repository for Kotlin, Compose, XML, testing, CI, release work, and legacy upgrades","skill_md_sha":"e4f4ab0289c47a84a91f978fa1c66c58b751303e","skill_md_path":"skills/android-modularization/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/krutikJain/android-agent-skills/tree/main/skills/android-modularization"},"layout":"multi","source":"github","category":"android-agent-skills","frontmatter":{"name":"android-modularization","description":"Design Android repositories with feature, core, and build-logic modules that scale without cyclic dependencies."},"skills_sh_url":"https://skills.sh/krutikJain/android-agent-skills/android-modularization"},"updatedAt":"2026-05-18T19:13:28.198Z"}}