ИИ агент для Android
Скинь код Kotlin или Compose-layout — получи исправление, объяснение или готовый компонент за минуты
2 ч/день
экономит на рутине
Kotlin/Java
Compose и XML
5 мин
типовая задача
Знакомо?
🐘
Gradle — непредсказуемый зверь
Build failed. Версия плагина не совпадает с AGP. Обновил одну зависимость — 20 конфликтов. Sync проекта — 4 минуты каждый раз.
🔄
Lifecycle — вечная ловушка
Activity пересоздаётся при повороте экрана. Данные пропадают. ViewModel, SavedStateHandle, remember — что использовать и когда?
📱
Compose — документация не успевает
API меняется каждый релиз. Composable из туториала устарел. Modifier-цепочка не работает. Stack Overflow — ответы годичной давности.
🏪
Play Store — отказ за отказом
Rejected: нарушение политики. Какой именно? Не указано. Исправил — опять rejected. Третья попытка — аккаунт под угрозой.
Реальные кейсы
1
Jetpack Compose UI для финтех-приложения
Android-разработчик Алексей переводил банковское приложение с XML на Compose. Экраны с графиками, анимациями и сложной навигацией — агент ускорил процесс в 3 раза.
Настройка
👤
Пользователь
Переписываю банковское приложение с XML на Jetpack Compose. Экран транзакций: список с группировкой по датам, pull-to-refresh, бесконечный скролл, sticky headers. На XML было 3 файла по 200 строк, хочу на Compose компактнее.
🤖
Агент
📋 Архитектура экрана транзакций на Compose:
Компоненты:
1. TransactionScreen — state holder, вызывает ViewModel
2. TransactionList — LazyColumn с sticky headers
3. TransactionItem — одна строка (иконка, сумма, категория)
4. DateHeader — sticky header с датой и суммой за день
Ключевые решения:
• LazyColumn + stickyHeader {} — нативная поддержка в Compose
• Pull-to-refresh: PullToRefreshBox (Material3 1.3+)
• Пагинация: LaunchedEffect при достижении последнего элемента
• Группировка: в ViewModel, не в UI слое
Начать с ViewModel + state или с UI?
Ежедневное использование
👤
Пользователь
С ViewModel. Данные приходят из Room — Transaction(id, amount, category, date, description). Нужна группировка по дням + пагинация по 20 записей.
🤖
Агент
✅ TransactionViewModel готов:
@HiltViewModel
class TransactionViewModel @Inject constructor(
private val repo: TransactionRepository
) : ViewModel() {
private val _uiState = MutableStateFlow(TransactionUiState())
val uiState = _uiState.asStateFlow()
init { loadNextPage() }
fun loadNextPage() {
viewModelScope.launch {
val txns = repo.getTransactions(
offset = _uiState.value.items.size, limit = 20
)
val grouped = txns.groupBy { it.date.toLocalDate() }
.toSortedMap(compareByDescending { it })
_uiState.update { state ->
state.copy(
items = state.items + grouped,
hasMore = txns.size == 20
)
}
}
}
}
data class TransactionUiState(
val items: Map<LocalDate, List<Transaction>> = emptyMap(),
val isLoading: Boolean = false,
val hasMore: Boolean = true
)
Room query с OFFSET/LIMIT, группировка в ViewModel, UI получает готовый Map. Скинуть LazyColumn с sticky headers?
2
Конфликт Gradle-зависимостей
Разработчик Настя обновила Firebase до версии 33 — проект перестал собираться. 14 ошибок совместимости. С агентом разобралась за 25 минут вместо привычных 4 часов.
Настройка
👤
Пользователь
Обновила com.google.firebase:firebase-bom с 32.7.0 до 33.1.0, проект не собирается. Ошибки:
> Could not resolve com.google.android.gms:play-services-basement:18.3.0
> Conflict between firebase-auth:23.0.0 and play-services-auth:21.0.0
> Duplicate class com.google.android.gms.internal.firebase-auth.zzab
Что делать? 14 ошибок, не понимаю с чего начать.
🤖
Агент
🔍 Классическая проблема BOM + Play Services.
Причина: Firebase BOM 33.x требует Play Services 21.x, но у тебя где-то прибит play-services-auth:21.0.0 вручную, и другой модуль тянет 20.x.
Диагностика (3 шага):
1. ./gradlew :app:dependencies --configuration releaseRuntimeClasspath | grep play-services
2. Найди кто тянет старую версию: grep -r "play-services" build.gradle*
3. Проверь: нет ли implementation "com.google.android.gms:play-services-auth:..." с фиксированной версией
Быстрое решение: убери все прямые зависимости на play-services — пусть BOM управляет версиями. Скинь свой build.gradle(:app) — найду конфликтующие строки.
Ежедневное использование
👤
Пользователь
Вот dependencies:
implementation platform("com.google.firebase:firebase-bom:33.1.0")
implementation "com.google.firebase:firebase-auth"
implementation "com.google.firebase:firebase-firestore"
implementation "com.google.android.gms:play-services-auth:20.7.0"
implementation "com.google.android.gms:play-services-location:21.0.1"
implementation "com.google.maps:google-maps-services:2.2.0"
🤖
Агент
✅ Нашёл 3 проблемы:
1. play-services-auth:20.7.0 — конфликт с BOM 33.x, который требует 21.2.0
Исправление: убери версию, пусть BOM управляет:
implementation "com.google.android.gms:play-services-auth"
2. play-services-location:21.0.1 — тоже прибита версия
Исправление: implementation "com.google.android.gms:play-services-location"
3. google-maps-services:2.2.0 — серверная библиотека, не Android. Она тянет свои gRPC-зависимости, конфликтующие с Firebase.
Если используешь Maps SDK:
implementation "com.google.android.gms:play-services-maps"
Если серверный геокодинг — вынеси в отдельный модуль с exclude group: "io.grpc"
После этих 3 правок — ./gradlew clean build. Должно собраться.
3
Room + Kotlin Flow для офлайн-режима
Джуниор-разработчик Тимур делал приложение доставки с офлайн-режимом. Синхронизация Room с API, кэширование, конфликты данных — агент провёл через все подводные камни.
Настройка
👤
Пользователь
Приложение доставки, курьер часто бывает без интернета. Нужен офлайн-режим: заказы загружаются из API, кэшируются в Room, при изменении статуса — синхронизация когда появится сеть. Не знаю как правильно организовать — первый раз делаю офлайн.
🤖
Агент
📋 Паттерн: Single Source of Truth + Offline-first
Принцип: UI всегда читает из Room (локальная БД). API — только для синхронизации. Room = единственный источник правды.
Архитектура:
1. OrderDao — Room DAO, возвращает Flow<List<Order>>
2. OrderRepository — координирует Room + API
3. SyncManager — WorkManager задача, синхронизирует при появлении сети
4. PendingAction — таблица очереди действий (статус изменён офлайн)
Поток данных:
• Онлайн: API → Room → UI (через Flow)
• Офлайн: Room → UI (кэш), действия → PendingAction таблица
• Сеть появилась: WorkManager → PendingAction → API → Room
Начнём с Room-сущностей?
Ежедневное использование
👤
Пользователь
Да. Заказ: id, address, status (new/picked/delivered), items list, updated_at. Нужно отслеживать какие заказы изменены офлайн.
🤖
Агент
✅ Три сущности + DAO готовы:
@Entity(tableName = "orders")
data class OrderEntity(
@PrimaryKey val id: String,
val address: String,
val status: OrderStatus,
val updatedAt: Long,
val isSynced: Boolean = true // false = изменён офлайн
)
@Entity(tableName = "pending_actions")
data class PendingAction(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val orderId: String,
val action: String, // "status_change"
val payload: String, // JSON: {"status":"delivered"}
val createdAt: Long = System.currentTimeMillis()
)
@Dao
interface OrderDao {
@Query("SELECT * FROM orders ORDER BY updatedAt DESC")
fun observeAll(): Flow<List<OrderEntity>>
@Query("SELECT * FROM orders WHERE isSynced = 0")
suspend fun getUnsynced(): List<OrderEntity>
@Transaction
suspend fun updateStatusOffline(id: String, status: OrderStatus) {
updateStatus(id, status, isSynced = false)
insertPendingAction(PendingAction(orderId = id, ...))
}
}
SyncWorker читает pending_actions, отправляет на сервер, помечает isSynced = true. Скинуть WorkManager-конфигурацию?
Вопросы про агента и Android
Агент работает с Kotlin и Java?
Да, оба языка. Kotlin — приоритет (Jetpack Compose, Coroutines, Flow), Java — для legacy-проектов. Агент подстраивается под язык, который ты используешь.
Поможет с публикацией в Play Store?
Да — чеклист требований, политика конфиденциальности, ProGuard-правила, оптимизация скриншотов и описания, разбор причин отказа. Не заменяет аккаунт разработчика, но помогает пройти ревью.
Знает Jetpack Compose последней версии?
Знает Compose, Material3, Navigation Compose, Hilt, Room, WorkManager, Paging 3 и другие Jetpack-библиотеки. Если API изменился — уточнит версию и подскажет актуальный подход.
Может ли помочь с архитектурой приложения?
Да — Clean Architecture, MVVM, MVI, Repository pattern, модуляризация. Поможет выбрать паттерн под проект и покажет как структурировать код с конкретными примерами.