android-development▌
dpconde/claude-android-skill · updated Apr 8, 2026
Build Android applications following Google's official architecture guidance, as demonstrated in the NowInAndroid reference app.
Android Development
Build Android applications following Google's official architecture guidance, as demonstrated in the NowInAndroid reference app.
Quick Reference
| Task | Reference File |
|---|---|
| Project structure & modules | modularization.md |
| Architecture layers (UI, Domain, Data) | architecture.md |
| Jetpack Compose patterns | compose-patterns.md |
| Gradle & build configuration | gradle-setup.md |
| Testing approach | testing.md |
Workflow Decision Tree
Creating a new project?
→ Read modularization.md for project structure
→ Use templates in assets/templates/
Adding a new feature?
→ Create feature module with api and impl submodules
→ Follow patterns in architecture.md
Building UI screens? → Read compose-patterns.md → Create Screen + ViewModel + UiState
Setting up data layer? → Read data layer section in architecture.md → Create Repository + DataSource + DAO
Core Principles
- Offline-first: Local database is source of truth, sync with remote
- Unidirectional data flow: Events flow down, data flows up
- Reactive streams: Use Kotlin Flow for all data exposure
- Modular by feature: Each feature is self-contained with clear boundaries
- Testable by design: Use interfaces and test doubles, no mocking libraries
Architecture Layers
┌─────────────────────────────────────────┐
│ UI Layer │
│ (Compose Screens + ViewModels) │
├─────────────────────────────────────────┤
│ Domain Layer │
│ (Use Cases - optional, for reuse) │
├─────────────────────────────────────────┤
│ Data Layer │
│ (Repositories + DataSources) │
└─────────────────────────────────────────┘
Module Types
app/ # App module - navigation, scaffolding
feature/
├── featurename/
│ ├── api/ # Navigation keys (public)
│ └── impl/ # Screen, ViewModel, DI (internal)
core/
├── data/ # Repositories
├── database/ # Room DAOs, entities
├── network/ # Retrofit, API models
├── model/ # Domain models (pure Kotlin)
├── common/ # Shared utilities
├── ui/ # Reusable Compose components
├── designsystem/ # Theme, icons, base components
├── datastore/ # Preferences storage
└── testing/ # Test utilities
Creating a New Feature
- Create
feature:myfeature:apimodule with navigation key - Create
feature:myfeature:implmodule with:MyFeatureScreen.kt- Composable UIMyFeatureViewModel.kt- State holderMyFeatureUiState.kt- Sealed interface for statesMyFeatureNavigation.kt- Navigation setupMyFeatureModule.kt- Hilt DI module
Standard File Patterns
ViewModel Pattern
@HiltViewModel
class MyFeatureViewModel @Inject constructor(
private val myRepository: MyRepository,
) : ViewModel() {
val uiState: StateFlow<MyFeatureUiState> = myRepository
.getData()
.map { data -> MyFeatureUiState.Success(data) }
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5_000),
initialValue = MyFeatureUiState.Loading,
)
fun onAction(action: MyFeatureAction) {
when (action) {
is MyFeatureAction.ItemClicked -> handleItemClick(action.id)
}
}
}
UiState Pattern
sealed interface MyFeatureUiState {
data object Loading : MyFeatureUiState
data class Success(val items: List<Item>) : MyFeatureUiState
data class Error(val message: String) : MyFeatureUiState
}
Screen Pattern
@Composable
internal fun MyFeatureRoute(
onNavigateToDetail: (String) -> Unit,
viewModel: MyFeatureViewModel = hiltViewModel(),
) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
MyFeatureScreen(
uiState = uiState,
onAction = viewModel::onAction,
onNavigateToDetail = onNavigateToDetail,
)
}
@Composable
internal fun MyFeatureScreen(
uiState: MyFeatureUiState,
onAction: (MyFeatureAction) -> Unit,
onNavigateToDetail: (String) -> Unit,
) {
when (uiState) {
is MyFeatureUiState.Loading -> LoadingIndicator()
is MyFeatureUiState.Success -> ContentList(uiState.items, onAction)
is MyFeatureUiState.Error -> ErrorMessage(uiState.message)
}
}
Repository Pattern
interface MyRepository {
fun getData(): Flow<List<MyModel>>
suspend fun updateItem(id: String, data: MyModel)
}
internal class OfflineFirstMyRepository @Inject constructor(
private val localDataSource: MyDao,
private val networkDataSource: MyNetworkApi,
) : MyRepository {
override fun getData(): Flow<List<MyModel>> =
localDataSource.getAll().map { entities ->
entities.map { it.toModel() }
}
override suspend fun updateItem(id: String, data: MyModel) {
localDataSource.upsert(data.toEntity())
}
}
Key Dependencies
// Gradle version catalog (libs.versions.toml)
[versions]
kotlin = "1.9.x"
compose-bom = "2024.x.x"
hilt = "2.48"
room = "2.6.x"
coroutines = "1.7.x"
[libraries]
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" }
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }
Build Configuration
Use convention plugins in build-logic/ for consistent configuration:
AndroidApplicationConventionPlugin- App modulesAndroidLibraryConventionPlugin- Library modulesAndroidFeatureConventionPlugin- Feature modulesAndroidComposeConventionPlugin- Compose setupAndroidHiltConventionPlugin- Hilt setup
See gradle-setup.md for complete build configuration.
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.6★★★★★61 reviews- ★★★★★Benjamin Iyer· Dec 28, 2024
Registry listing for android-development matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Li Malhotra· Dec 20, 2024
android-development is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- ★★★★★Emma Bansal· Dec 16, 2024
We added android-development from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
- ★★★★★Dhruvi Jain· Dec 8, 2024
Solid pick for teams standardizing on skills: android-development is focused, and the summary matches what you get after install.
- ★★★★★Oshnikdeep· Nov 27, 2024
We added android-development from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
- ★★★★★Ava Flores· Nov 19, 2024
Useful defaults in android-development — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Nia Taylor· Nov 11, 2024
android-development has been reliable in day-to-day use. Documentation quality is above average for community skills.
- ★★★★★Yuki Martinez· Nov 7, 2024
Solid pick for teams standardizing on skills: android-development is focused, and the summary matches what you get after install.
- ★★★★★Yusuf Mensah· Oct 26, 2024
android-development has been reliable in day-to-day use. Documentation quality is above average for community skills.
- ★★★★★Ganesh Mohane· Oct 18, 2024
android-development fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
showing 1-10 of 61