К основному содержанию
скилл CX Codex

android-development · dpconde — скилл для Claude Code: Android на Kotlin

Скилл ведёт агента по официальной архитектуре Android: модули, Jetpack Compose, Hilt, Room. Пригодится, когда проект на Kotlin растёт и пора навести порядок в слоях.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add dpconde/claude-android-skill --skill android-development -a claude-code
npx skills add dpconde/claude-android-skill --skill dpconde-android-development -a claude-code
Открыть на GitHub

Что делает android-development

Скилл добавляет агенту справочники по архитектуре Android: структура модулей, слои UI, Domain и Data, паттерны Compose, настройка Gradle и подход к тестам. Внутри есть дерево решений по задачам — новый проект, новая фича, экран, слой данных — и шаблоны в assets/templates/. Агент читает нужный файл из references/ и дальше пишет код по этим правилам.

Фича делается парой модулей: api с ключом навигации и impl с экраном, ViewModel, UiState и Hilt-модулем. Состояние отдаётся через StateFlow, данные идут из репозитория поверх Kotlin Flow, локальная база считается источником правды. Для сборки предлагаются convention-плагины в build-logic/ — отдельные для app, library, feature, Compose и Hilt.

Скилл опирается на NowInAndroid как эталон, поэтому ваши модули будут выглядеть знакомо тем, кто его читал. Зависимости придётся прописать самому: в примерах версии Kotlin, Compose BOM, Hilt и Room помечены как 1.9.x, 2024.x.x, 2.48 и 2.6.x — это ориентир, а не готовый набор. Если в проекте уже своя схема модулей, скилл будет тянуть к этой.

Какие задачи решает

  • разложить фичу на модули api и impl без путаницы в зависимостях
  • собрать экран на Compose вместе с ViewModel и sealed-состоянием
  • подключить Hilt и Room в новый модуль
  • перевести репозиторий на offline-first с Kotlin Flow
  • вынести общую конфигурацию сборки в convention-плагины

Примеры запросов агенту

  • Создай новый Android-проект по структуре модулей из скилла
  • Добавь фичу profile: модули api и impl, экран, ViewModel и Hilt-модуль
  • Сделай offline-first репозиторий для списка заказов на Room и Flow

Как установить android-development

1Через Skills CLI (Vercel)

npx skills add dpconde/claude-android-skill --skill android-development -a claude-code
npx skills add dpconde/claude-android-skill --skill dpconde-android-development -a claude-code

2Вручную: положить файлы

~/.claude/skills/dpconde-android-development/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/dpconde-android-development/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Другие версии android-development

Похожие

android-kotlin-development aj-geddes Скилл для ИИ-агента, который ведёт разработку нативного Android-приложения на Kotlin: MVVM, Compose, Retrofit, Room. CX Codex +1 1 500установок claude-android-ninja DrJacky Помогает агенту собирать и переносить Android-приложения на Kotlin, Compose, Hilt и Room 3 без выдуманных API. CX Codex +1 604установок android-kotlin alinaqi Подсказывает агенту структуру Android-проекта на Kotlin: Coroutines, Jetpack Compose, Hilt, Room и тесты на MockK. Включается сам при работе с файлами .kt. CX Codex +1 3 300установок android-jetpack-compose-cursorrules-prompt-file PatrickJS Правило для Cursor, которое задаёт агенту ориентиры по Android-разработке на Jetpack Compose: архитектура, состояние, тесты. ★ 41 011звёзд репо android-clean-architecture affaan-m Подсказывает агенту, как раскладывать Android- и KMP-проект по слоям: модули, зависимости, UseCase, репозитории, работа с Room, SQLDelight и Ktor. CX Codex +1 5 200установок clerk-android clerk Скилл помогает агенту подключить Clerk к нативному Android-приложению на Kotlin и Jetpack Compose — через готовые AuthView/UserButton или свой поток авторизации. CX Codex +1 14 400установок

Рядом в теме «Мобильная разработка»

Всё по теме «Мобильная разработка» →

Вопросы о android-development

Как установить android-development в Claude?

Выполните npx skills add dpconde/claude-android-skill --skill android-development -a claude-code. Файл скилла окажется по пути ~/.claude/skills/dpconde-android-development/SKILL.md.

Что делает android-development?

Даёт агенту справочники и шаблоны по архитектуре Android: слои, модули, Compose, Hilt, Room, Gradle и тесты. Агент сверяется с ними, когда пишет экраны, ViewModel и репозитории.

Нужен ли скилл, если проект уже разбит на модули?

Он задаёт свою схему: app, feature/<имя>/api и impl, набор модулей core. Если у вас другая раскладка, агент будет предлагать привести её к этой.

Исходный текст

SKILL.md · MIT
---
name: android-development
description: Create production-quality Android applications following Google's official architecture guidance and NowInAndroid best practices. Use when building Android apps with Kotlin, Jetpack Compose, MVVM architecture, Hilt dependency injection, Room database, or multi-module projects. Triggers on requests to create Android projects, screens, ViewModels, repositories, feature modules, or when asked about Android architecture patterns.
---

# 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](references/modularization.md) |
| Architecture layers (UI, Domain, Data) | [architecture.md](references/architecture.md) |
| Jetpack Compose patterns | [compose-patterns.md](references/compose-patterns.md) |
| Gradle & build configuration | [gradle-setup.md](references/gradle-setup.md) |
| Testing approach | [testing.md](references/testing.md) |

## Workflow Decision Tree

**Creating a new project?**
→ Read [modularization.md](references/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](references/architecture.md)

**Building UI screens?**
→ Read [compose-patterns.md](references/compose-patterns.md)
→ Create Screen + ViewModel + UiState

**Setting up data layer?**
→ Read data layer section in [architecture.md](references/architecture.md)
→ Create Repository + DataSource + DAO

## Core Principles

1. **Offline-first**: Local database is source of truth, sync with remote
2. **Unidirectional data flow**: Events flow down, data flows up
3. **Reactive streams**: Use Kotlin Flow for all data exposure
4. **Modular by feature**: Each feature is self-contained with clear boundaries
5. **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

1. Create `feature:myfeature:api` module with navigation key
2. Create `feature:myfeature:impl` module with:
   - `MyFeatureScreen.kt` - Composable UI
   - `MyFeatureViewModel.kt` - State holder
   - `MyFeatureUiState.kt` - Sealed interface for states
   - `MyFeatureNavigation.kt` - Navigation setup
   - `MyFeatureModule.kt` - Hilt DI module

## Standard File Patterns

### ViewModel Pattern
```kotlin
@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
```kotlin
sealed interface MyFeatureUiState {
    data object Loading : MyFeatureUiState
    data class Success(val items: List<Item>) : MyFeatureUiState
    data class Error(val message: String) : MyFeatureUiState
}
```

### Screen Pattern
```kotlin
@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
```kotlin
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

```kotlin
// 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 modules
- `AndroidLibraryConventionPlugin` - Library modules  
- `AndroidFeatureConventionPlugin` - Feature modules
- `AndroidComposeConventionPlugin` - Compose setup
- `AndroidHiltConventionPlugin` - Hilt setup

See [gradle-setup.md](references/gradle-setup.md) for complete build configuration.

© dpconde · MIT · dpconde/claude-android-skill

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой