Skillshub android-architecture
Standards for Clean Architecture, Modularization, and Unidirectional Data Flow. Use when anyone sets up Android project structure, asks where code belongs in Clean Architecture layers, discusses modularization (feature/core modules), or questions UDF (events up, state down). (triggers: build.gradle.kts, settings.gradle.kts, clean-architecture, module, layers, domain, UDF, unidirectional, feature module, core module, presentation layer, data layer)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/android-architecture" ~/.claude/skills/comeonoliver-skillshub-android-architecture && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/android-architecture/SKILL.mdsource content
Android Architecture Standards
Priority: P0 (CRITICAL)
Implementation Guidelines
Layering (Clean Architecture)
- Domain: Pure Kotlin (No Android deps). Contains UseCases/Models.
- Data: Repository impl, DataSources (API/DB). Maps DTO -> Domain.
- UI: ViewModel + Composable. Maps Domain -> UiState.
Modularization
- Feature Modules:
,:feature:home
.:feature:profile - Core Modules:
(Design System),:core:ui
,:core:network
.:core:database - App Module: DI Root and Navigation Guard.
Unidirectional Data Flow (UDF)
- Events: UI -> ViewModel (Events).
- State: ViewModel -> UI (StateFlow<UiState>).
Jetpack Compose
- Hosting: Are you using
in Activity? (No XML Layouts)setContent - State: Is state hoisted to ViewModel using
?collectAsStateWithLifecycle - Unidirectional: Are events passed UP and state passed DOWN?
- Recomposition: Are Composables stable? (Check for unstable types in parameters)
- Navigation: Is
using Type-Safe destinations?Compose Navigation
Anti-Patterns
- No Logic in Activity: Host Navigation only.
- No Repo in UI: Access data exclusively via ViewModel.
- No Context in Domain: Keep Logic Pure.