Антоха Разраб c AI – Telegram
Антоха Разраб c AI
129 subscribers
30 photos
2 videos
42 links
Делаю продукты в соло с помощью AI. На работе Sr. Android Engineer

Канал БЕЗ рекламы
Download Telegram
Разбираем использование runBlocking в Android:

👉 Что такое runBlocking?

Функция, которая запускает новую корутину и блокирует текущий поток до её завершения.
Часто используется в примерах для демонстрации корутин в main() функции.
👉 Почему стоит быть осторожным с runBlocking в Android?

Блокирует текущий поток, что на Android может привести к замораживанию UI и возникновению ANR (Application Not Responding).
Особенно критично при выполнении операций ввода-вывода в главном потоке.
👉 Пример неправильного использования:
´´´
class MainViewModel(private val mainRepository: MainRepository) : ViewModel() {
// Не рекомендуется
private fun fetchPosters() = runBlocking {
mainRepository.fetchPosters()
}
}
´´
В этом примере runBlocking блокирует главный поток, что может привести к проблемам с отзывчивостью приложения.
👉 Рекомендуемые альтернативы:

Используйте viewModelScope для запуска корутин, что обеспечивает автоматическую отмену задач при уничтожении ViewModel.
Применяйте launch или async для асинхронных операций без блокировки главного потока.

(c) Черновик канала @droidgr
Разбираем библиотеку Immutable Collections в Kotlin:

👉 Почему стандартные коллекции Kotlin не всегда безопасны?

Стандартные коллекции (List, Set, Map) по умолчанию изменяемы, что может привести к непреднамеренным изменениям данных.
Даже коллекции, созданные с помощью listOf(), setOf(), mapOf(), являются только "только для чтения", но не по-настоящему неизменяемыми.
👉 Что предлагает библиотека Immutable Collections?

Предоставляет действительно неизменяемые коллекции, которые предотвращают случайные изменения и повышают безопасность в многопоточных средах.
Использует структурное разделение для оптимизации производительности и предотвращения ненужного копирования данных.
👉 Как начать использовать?

Добавьте зависимость в build.gradle.kts:

dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.5")
}

Создание неизменяемых коллекций:

import kotlinx.collections.immutable.*

val immutableList = persistentListOf("A", "B", "C")
val immutableSet = persistentSetOf(1, 2, 3)
val immutableMap = persistentMapOf("key1" to 100, "key2" to 200)
Добавление и удаление элементов:
kotlin
Копировать
Редактировать
val newList = immutableList.add("D") // Создает новый список
println(newList) // Вывод: [A, B, C, D]

val newMap = immutableMap.put("key3", 300)
println(newMap) // Вывод: {key1=100, key2=200, key3=300}

Оригинальные immutableList и immutableMap остаются без изменений.
👉 Преимущества в Jetpack Compose:

Избежание ненужных рекомпозиций: Неизменяемые коллекции помогают Compose отслеживать изменения состояния и предотвращают избыточные обновления UI.
Стабильность состояния: Благодаря структурному разделению, изменения создают новые объекты, сохраняя неизменность предыдущих версий, что улучшает производительность.
Предсказуемое поведение UI: Исключение случайных мутаций данных обеспечивает более надежную работу интерфейса.
Подробнее о библиотеке Immutable Collections и её использовании читайте в статье:

#Kotlin #ImmutableCollections #JetpackCompose #AndroidDevelopment

(c) Черновик канала @droidgr
Разбираем, что происходит при нажатии кнопки "Старт" в Android Studio:

👉 Шаг 1: Сборка приложения

Команда: ./gradlew assembleDebug
Описание: Компилирует код и генерирует APK-файл в директории app/build/outputs/apk/debug/.
👉 Шаг 2: Запуск эмулятора

Команды:
emulator -list-avds
emulator -avd <имя_эмулятора>
Описание: Первая команда отображает список доступных виртуальных устройств, вторая запускает выбранный эмулятор.
👉 Шаг 3: Установка APK на устройство

Команда: adb install -r app/build/outputs/apk/debug/app-debug.apk
Описание: Устанавливает или переустанавливает APK на подключенное устройство или эмулятор.
👉 Шаг 4: Запуск приложения

Команда: adb shell am start -n <package_name>/<activity_name>
Описание: Запускает указанную Activity приложения на устройстве.
Эти команды позволяют управлять процессом сборки и запуска приложения напрямую из терминала, что особенно полезно для разработчиков, предпочитающих минималистичные среды разработки.

Подробнее о процессе читайте в статье:

#AndroidStudio #CommandLine #AndroidDevelopment

(c) Черновик канала @droidgr
Channel name was changed to «Черновик Android Разраба»
Ну что ж, настало время попробовать сделать что-то в формате build in public. Обычно у меня в фоне есть проекты, которые я пилю сам, с помощью джунов или AI.

В этот раз идея простая: жена попросила сделать нормальный виджет погоды с UV-индексом на день. Оказалось, что таких приложений на удивление мало, хотя, казалось бы, программ с погодой тьма.

Я слишком ленив, чтобы писать всё с нуля, поэтому попробую сделать это одним махом. План следующий:

👉 Взять обычный шаблон.
👉 Сгенерировать основу через Kiro.
👉 Сделать ревью кода.
👉 Докрутить с помощью Claude и руками.

Из плохих новостей: мой старый аккаунт разработчика снесли за то, что я забыл пройти верификацию в мае. Придётся создавать новый, чистый.

#weather_app
😁2👍1
Антоха Разраб c AI
Ну что ж, настало время попробовать сделать что-то в формате build in public. Обычно у меня в фоне есть проекты, которые я пилю сам, с помощью джунов или AI. В этот раз идея простая: жена попросила сделать нормальный виджет погоды с UV-индексом на день. Оказалось…
Продолжаем #build_in_public. Немного технических деталей по будущему виджету

Откуда будем брать данные о погоде?
Open-Meteo (open-meteo.com). Это открытое и бесплатное API, что идеально подходит, пока проект некоммерческий. Никаких ключей и сложной регистрации.

Как будем определять локацию?
Тут всё просто:
📍 Автоматически определять ваше местоположение, чтобы сразу показать актуальный прогноз, стянув с gps
🗺 Если захочется посмотреть погоду в другом городе, можно будет выбрать точку вручную на карте. Для этого интегрируем OSM

Держим курс на простоту и функциональность!

#weather_app
👍1
Антоха Разраб c AI
Ну что ж, настало время попробовать сделать что-то в формате build in public. Обычно у меня в фоне есть проекты, которые я пилю сам, с помощью джунов или AI. В этот раз идея простая: жена попросила сделать нормальный виджет погоды с UV-индексом на день. Оказалось…
Задумался, как мне из координат указанных пользователем вытащить ближайший город. Думал, может Places API или что еще - а нет, все проще. В Android есть Geocoder API, которое делает ровно сказанное выше и достаточно неплохо.
🔥3
Не с первого раза, да и на старом добром xml, вместо модного glance, но заставил вчера вечером Claude Code догенерировать мне черновик 3 виджетов.

Если бы не подписка, потратил бы баксов 30 на 3 виджета с обновлением данных. Норм?

#weather_app
🔥42💅2
Внутрянка пока что только так. Бесплатная OSM и геокодер о котором писал выше.

Мне подсветили что Geocoder апи может крашится в зависимости от вендоров, так что надо сразу firebase crashlytic прикручивать и искать замену

#weather_app
🔥4
На экране выше очевидна проблема. В приложении погоды главный экран не показывает погоду.

Ну штош, пора это исправить. Своими руками делать не хочу, но попросить новый AI сервис это сделать за мен я - самое то.

Встречайте - бесплатный https://cto.new/ в обмен на ваши данные. Такой трейд меня устраивает.

В комментах можно найти 1 инвайт код в этот сервис

#weather_app #ai
🔥4
Первое, что я настраиваю на проектах - CI/CD, чтоб вообще забыть о проблемах деплоя. В этот раз, за 1 команду тоже не получилось. AI нагалюцинировал шаг с тестами, линтером и UI тестами, хотя их даже нет.

Это все вместе забирает 8 минут на каждую сборку под каждый пуш. Пришлось дотюнивать руками, но теперь у меня всегда под рукой билды для тестов.

Почему это удобно? Я планирую разработку через полностью автономного агента, а удобный пайплайн позволит сразу увидеть результат.

#weather_app
🔥9
Антоха Разраб c AI
На экране выше очевидна проблема. В приложении погоды главный экран не показывает погоду. Ну штош, пора это исправить. Своими руками делать не хочу, но попросить новый AI сервис это сделать за мен я - самое то. Встречайте - бесплатный https://cto.new/ в…
Сделав 10ку успешных запусков, сервис упер меня в rate limits. Удобно что я смог удаленно с телефона пописать задачки. Качество решения крайне высокое. Часть замержил сразу же через приложение GitHub

Есть, кстати, аналогичный сервис от гугла - https://jules.google.com/. Я совсем забыл что был в вейтлисте, а сейчас сервис бесплатен (15 задач в день) для всех. Гугловские модели кодят похуже, но для таких мелких приложений это норм

#ai
🔥2
Антоха Разраб c AI
Ну что ж, настало время попробовать сделать что-то в формате build in public. Обычно у меня в фоне есть проекты, которые я пилю сам, с помощью джунов или AI. В этот раз идея простая: жена попросила сделать нормальный виджет погоды с UV-индексом на день. Оказалось…
Самое кайфушное в работе с AI, это делать переводы для Android приложений. Качество высокое, контекст учитывается. С учетом того что для перевода Google уже давно использует ml - лучший способ сэкономить на своем инди проекте.

На сколько удачно - узнаем на продакшене по отзывам пользователей, но точно лучше чем машинный перевод.

#weather_app
👍4
Регистрировал аккаунт разработчика. Если вы давно этого не делали, то теперь со старта вас ждет:

👉 Верификация что у вас есть Android девайс через установку приложения Play Console
👉 Верификация личности и места проживания
👉 Верификация телефона
👉 Подтверждение всех ранее созданных аккаунтов или аккаунтов в которые вы заходили (читай рабочих аккаунтов)
👉 Длинный опросник с невозможностью его пропуска
👉 Необходимость указать контакты кого-то, кто может подтвердить вашу личность (???) Это вообще что?

А ну и самое главное-противное. Нужно набрать 12 альфа тестировщиков на 14 дней, чтобы выпустить приложение в продакшн

#android
🤯10🤬7🔥1🤔1
Шаблон для графики приложения Google Play

Каждый раз публикуя приложение в GP я сталкиваюсь с сопротивлением. Мне надо собрать тьму графики и ASO. В этот раз я нашел шаблон и просто запихаю в него графику с виджетами, Выглядит удобно и с минимальным количеством проблем

#android
👍2🔥2