{"enrichment":{"faq":[{"a":"android-clean-architecture organizes projects into three core layers: Domain (business logic and UseCases), Data (repositories, data sources, and database/network clients), and Presentation (UI, ViewModels, and state management). Each layer has clear responsibilities and communicates through well-defined interfaces, ensuring testability and maintainability.","q":"What are the main layers in android-clean-architecture?"},{"a":"android-clean-architecture recommends organizing modules by feature or layer. Feature modules contain domain, data, and presentation submodules; layer modules separate concerns vertically. Use gradle convention plugins to enforce dependency rules\u2014presentation depends on domain, data depends on domain, and neither domain nor data depend upward. This prevents circular dependencies and maintains architectural integrity.","q":"How do you organize android modules in a clean architecture project?"},{"a":"android-clean-architecture implements UseCases as single-responsibility classes that orchestrate business logic by calling repositories. Repositories abstract data sources (local/remote) behind a clean interface. UseCases are invoked from ViewModels or presenters, often using Kotlin Flow or coroutines. This pattern isolates business rules from framework details and makes testing straightforward.","q":"What is the usecase repository pattern android approach?"},{"a":"android-clean-architecture supports both Koin and Hilt for dependency injection. Koin uses module declarations to wire repositories, UseCases, and ViewModels; Hilt uses annotations like @HiltViewModel and @Inject. Both approaches decouple object creation from usage, enable easy testing with mock implementations, and centralize configuration for cleaner code.","q":"How does android-clean-architecture handle dependency injection?"},{"a":"android-clean-architecture places database setup in the Data layer. Room and SQLDelight implementations are wrapped in repository classes that expose domain models, not database entities. Use mappers to convert between database and domain types. This keeps persistence details isolated and allows swapping database technologies without affecting business logic or UI layers.","q":"How do you integrate Room and SQLDelight in clean architecture?"},{"a":"android-clean-architecture uses Ktor as a network client in the Data layer. Create a dedicated data source class that handles HTTP requests and response parsing. Repositories call this data source and map responses to domain models. Ktor's multiplatform support makes it ideal for KMP projects, keeping network logic testable and separate from domain and presentation concerns.","q":"What role does Ktor play in android-clean-architecture projects?"}],"shadow_tags":["layered-architecture","module-boundaries","dependency-inversion","data-mapping","reactive-streams","structured-concurrency","sealed-types","multiplatform-design"],"summary_rewrite":"Learn to organize Android and KMP projects using Clean Architecture principles, including module boundaries, dependency inversion, and layered data flow. Covers UseCase and Repository patterns, database integration with Room and SQLDelight, network clients with Ktor, and dependency injection setup with Koin or Hilt."},"files":[{"bytes":8806,"path":"skills/android-clean-architecture/SKILL.md","sha256":"5d1e0b6142bbebe3bc17fbedd5dbeccdd3eee2f8a4c47857f254fb0a95847113","url":"https://skillfed.io/files/affaan-m/ECC/android-clean-architecture/0fff59da/SKILL.md"}],"id":"affaan-m/ECC/android-clean-architecture","links":{"html":"https://skillfed.io/affaan-m/ECC/android-clean-architecture","md":"https://skillfed.io/affaan-m/ECC/android-clean-architecture.md","repo":"https://github.com/affaan-m/ECC"},"meta":{"agents_supported":[],"first_seen":"2026-07-28","forks":35692,"language":"JavaScript","last_updated":"2026-07-27","license":"MIT","name":"android-clean-architecture","publisher":"affaan-m","stars":234207},"relations":{"similar":[{"id":"travisjneuman/.claude/android-development"},{"id":"travisjneuman/.claude/kotlin-multiplatform"},{"id":"affaan-m/ECC/kotlin-coroutines-flows"},{"id":"xtone/ai_development_tools/android-test-generator"},{"id":"xtone/ai_development_tools/android-api-client"},{"id":"Jeffallan/claude-skills/kotlin-specialist"},{"id":"vitorpamplona/amethyst/quartz-integration"},{"id":"alinaqi/maggy/android-kotlin"},{"id":"softspark/ai-toolkit/kotlin-patterns"},{"id":"vitorpamplona/amethyst/android-expert"}]},"slug":{"owner":"affaan-m","repo":"ECC","skill":"android-clean-architecture"},"version":"0fff59da"}
