Telegram Web Link
🤖 Есть ли чувство юмора у разработчиков Android SDK? Однозначно — да!

В исходниках можно найти такие шедевры 👇
// Проверяет используется ли сейчас Monkey Runner
ActivityManager.isUserAMonkey()

UserManager.isUserAGoat()
UserManager.DISALLOW_FUN

// Отдали дань памяти хиту
Chronometer.isTheFinalCountdown()

Log.wtf()

// Попало в релиз, хотя явно должно было быть исправлено
AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()

// Звёздные войны
SensorManager.GRAVITY_DEATH_STAR_I


Разработчики в Google точно любит пошутить 😄
А вы где встречали весёлые названия API или переменных — в Android, KMP или своих проектах?

#android
Please open Telegram to view this post
VIEW IN TELEGRAM
48👍20🤯3
Вот реальная история, как знание механики работы ViewModel спасло мне вечер 👇

У меня приложение на Compose и Jetpack Navigation 3 (работает на основе состояния Back Stack). Экран «Навигатор файлов» открывает папки рекурсивно: по сути это тот же экран, но с другими данными. Все данные — из одной и той же ViewModel.❗️Баг: при переходе в папку навигация срабатывает, UI не меняется. Современные ИИ подсказали общие вещи, но не помогли — промты, видимо, подвели (тут мне ещё надо прокачать знания) 🙂

Вспомнил ключевой факт про архитектуру:
👉 Все ViewModel живут в ViewModelStore.
👉 В пределах одного ViewModelStoreOwner (Activity/Fragment/NavBackStackEntry) получение ViewModel по умолчанию идёт по типу.
👉 Если нужно несколько экземпляров одного типа на одном owner’е — используем key.

Решение в одну строку — привязать ключ к ViewModel, связанный с текущей папкой:
@Composable
fun FileNavigator(
folderId: Id,
modifier: Modifier = Modifier,
) {
// новый folderId → новый экземпляр ViewModel → новый UI-стейт
val viewModel: FileNavigatorViewModel = viewModel(
key = "files(rootId='$folderId')"
)
// ...
}


Мини-чеклист, если ловите такой баг
👉 Один экран используется повторно с разными параметрами? → Нужен key.
👉 Меняется route, но owner тот же? → key обязателен.
👉 Используете Hilt/Koin? → У этих функций тоже есть параметр key (hiltViewModel(key=...), koinViewModel(key=...)).
👉 key должен детерминированно зависеть от входных данных (например, folderId).
👉 При навигации назад убедитесь, что ViewModel освобождается ожидаемо.

Ещё нюанс - если у вас сложная иерархия графов, проверьте, к какому ViewModelStoreOwner вы реально привязаны.

Рекомендую посмотреть мои видео по теме:
📹 Разбор Jetpack Navigation 3
🪙 Полный разбор Jetpack ViewModel в Android и Kotlin Multiplatform

#android #compose #androidjetpack #viewmodel #архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍84🤔10🤯52🔥2
🤯 А что вообще считать маленьким проектом в 2025 году?

В закрытом чате обсуждали, какого ноутбука хватит под «маленький KMP-проект» — но вот с тем, что считать маленьким, договориться не смогли.

Приложение с тремя экранами, но двенадцатью Gradle-модулями — это ещё маленькое?
KMP, но «только чуть-чуть под iOS» — считается?
Или когда просто хотел попробовать Compose, а закончил с DI, Router и UseCase на одну строчку логики?

В чём вообще измерять размер проекта — в строках кода, количестве модулей, экранах, фичах или времени сборки?

У меня есть мнение, но интересно, где проходит грань у вас 😏
Комментарии открыты — давайте поругаемся конструктивно.

#архитектура #android #kmp
🤯21👍124
🤖 Как проверить, какие комбинации фичей поддерживает камера смартфона

Современные смартфоны умеют снимать с HDR, 120 FPS и стабилизацией, но вот какая комбинация этих фич реально доступна — загадка. Например, стабилизация часто работает только при 1080p, а 60 FPS не всегда доступны в 4K.

С выходом Jetpack CameraX 1.5 появилось API GroupableFeature и новые параметры для SessionConfig, которые позволяют из кода проверить, какие функции камера может использовать одновременно.

// Пример проверки неподдерживаемых комбинаций
val unsupportedFeatures =
mutableSetOf<GroupableFeature>()
val appFeatureOptions =
setOf(HDR_HLG10, FPS_60, PREVIEW_STABILIZATION)
appFeatureOptions
.filterNot { it in currentFeatures }
.filter { featureOption ->
cameraInfo.isFeatureGroupSupported(
SessionConfig(
useCases = useCases,
requiredFeatureGroup =
currentFeatures + featureOption
)
)
}
.forEach { unsupportedFeatures.add(it) }


Так можно заранее отсеять неподдерживаемые сочетания — например, когда HDR и стабилизация не работают вместе при 60 FPS 🎥

Подробнее в статье (EN)

#android #camerax #Jetpack #androidjetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2110🔥3🤔3
🤖 Как автоматически проверить приложение перед публикацией в Google Play?

Когда вы загружаете сборку в Альфа или Бета канал Google Play, сервис автоматически запускает 🛒 Pre-launch Tests — набор проверок, которые выполняются на реальных устройствах в облаке Google. Цель этих тестов — убедиться, что приложение запускается, не падает и корректно отображается на разных экранах ещё до того, как его увидят тестировщики или пользователи. По сути, тест проходит “прокликивая” интерфейс, имитируя действия пользователя, переходя по кнопкам и ссылкам, чтобы найти проблемы вроде ANR, крашей или неправильного поведения UI. Как результат вы можете увидеть как проходило прокликивания, преддложения по улучшениям UI и лучше проверить качество приложения перед отправкой его конечным пользователям.

⚙️ Robo script - cценарии и повторяемость тестов
По умолчанию поведение бота недетерминированное — каждый запуск может идти по разным путям.
Чтобы добиться повторяемости, можно записать свой сценарий взаимодействия и загрузить его в консоль.
Такой сценарий называется Robo Script. Записать его можно прямо через Android Studio (если недоступно, то возможно отключили плагин), выполняя нужные действия в приложении.

Загруженный сценарий позволит прогонять одинаковые шаги при каждом тесте, что особенно полезно для авторизации, форм и сложных экранов.

🔐 Авторизация и тестовые данные
Если первый экран вашего приложения — логин, можно предоставить тестовый аккаунт (username/password), чтобы бот смог пройти авторизацию. Это важно, если вы хотите, чтобы тест охватил внутренние экраны и логику приложения.
Данные указываются в разделе Pre-launch report settings → Login credentials в Google Play Console.

🔗 Проверка deep links (ограничено 3 штуками)
Pre-launch Tests позволяют также протестировать работу deep links. Вы можете указать deeplink-URL, и Google Play автоматически запустит приложение с этим интентом, проверяя, открывается ли нужный экран и не происходит ли падений. Добавляются через настройки в Google Play Console.

🔥 Robo script не получится прогнать локально (либо я не знаб о такой возможности)
Те же Robo-тесты можно запускать и в Firebase Test Lab. Это позволит проверить приложение на большем количестве устройств и версий Android, а также встроить прогон в CI/CD — например, через GitHub Actions или Firebase CLI.

⚙️ Будет ли работать с Compose?
UI на Compose и Flutter корректно тестируются, так как бот взаимодействует через Accessibility API, а не напрямую с фреймворком. Проблемы возникают только при кастомной отрисовке или выключенном accessibility.

#android #googleplay #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥20👍123
Android Broadcast
📹 Собеседование на Kotlin Multiplatform разработчика 🎙 Проводит — Алексей Панов @kotlin_adept 🗓 Понедельник, 20 октября, 19:00 (GMT+3) Kotlin Multiplatform (KMP) набирает всё большую популярность — растёт количество вакансий и интерес со стороны компаний.…
🏝 Леша Панов @kotlin_adept поделился материалами для углублённого изучения KMP, которые помогут вам глубже разобраться в принципах работы Kotlin Multiplatform и Kotlin Native, а также лучше понять нюансы интеропа со Swift-кодом.

❗️ Подробности в канале Леши

#kmp #swift #native
Please open Telegram to view this post
VIEW IN TELEGRAM
👍196🔥4🤔1
Media is too big
VIEW IN TELEGRAM
Samsung представила Galaxy XR - шлем дополненной реальности. Аналог Apple Vision Pro но стоить будет 1800$ в США (в 2 раза дешевле устройства Apple)

Работает шлем на чипе Qualcomm а ОС - Android XR с Google сервисами. Можно запускать приложения как с адаптацией под XR, так и без неё.

Мнение автора:
Дорогая игрушка, которая будет нишевым устройством и скатится туда же куда и Vision. XR хочется видеть на очках, а нне шлемах.


#android #samsung #androidxr
🔥20👍61
Если хотите адаптировать приложение под Android XR, то Google уже подготовила материалы (хотя SDK пока в Dev Preview 🤯):

🔗 Документация и примеры на сайте
🐱 Примеры на GitHub

Codelab:
🤖 Learn Android XR Fundamentals: Part 1 - Modes and Spatial Panels
🤖 Learn Android XR Fundamentals: Part 2 - Orbiters and Spatial Environments

#android #androidxr
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥1🤔1
🕹 Представьте: вы оказались в кодовом подземелье. Перед вами двери, на которых написано: Массивы, Стек, Очередь, Дерево, Хеш-таблица

Чтобы пройти дальше, нужно выбрать правильный путь. Ошибешься — код рухнет, запросы будут тормозить, а на собесе придётся объяснять, почему сложность O(n²) звучит как приговор.

📖 Книга «Грокаем структуры данных» Марчелло Ла Рокка — это не скучный справочник, а карта подземелья. С ней вы:
— научитесь распознавать ловушки неоптимальных решений;
— выберете правильные инструменты под задачу;
— подготовитесь к «босс-файту» на собеседованиях;
— и пройдёте игру под названием «эффективный код».

⚡️ Если вы хотите апнуть скилл и прокачать мышление разработчика — этот «гайдбук» точно для вас.

👉 По промокоду broadcast — скидка 5% на книги издательства "Питер"

#реклама
👍12🤔3🔥2
🪙 LIVE Обсуждаем опыт интеграции ИИ в разработку в студии Surf
Когда: Четверг, 23 октября, 19:00 (GMT+3)

В последнее время я очень много читал материалов на тему применения ИИ технологий во всём цикле разработки приложений в Surf. Накопилось много вопросов и пригласил эксперта компании. Surf развивала и популяризировала Flutter, всегда интегрирую свежие подходы в проекты студии и вот сейчас ИИ.

Формат - свободное обсуждение, где любой сможет задать свой вопрос и подключиться в прямом эфире поболтать с Кириллом и Женей.

❗️Гость толк шоу - Женя Сатуров @saturov_stroit_komandu, Mobile CTO в Surf. За 10+ лет в мобильной разработке прошёл путь от стажёра до СТО. Один из основателей русскоязычного Flutter-сообщества и энтузиаст кроссплатформы. В данный момент занимаюсь внедрением AI в SDLC.

Смотреть в прямом эфире и подключиться к обсуждению смогут все подписчики уровня "Расширенный", а позже запись будет опубликована на Boosty и Закрытом Telegram сообществе

#ии
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥235🆒5👍1🙏1
🚀 Ergostol обновили свой легендарный стол Terra — и теперь версия Terra R 2.0 доступна по особенно выгодной цене. 🎯

До 27 октября включительно на сайте ergostol.ru действует скидка –30% на этот эргономичный стол с электроприводом.
☄️ А по промокоду ANDROID10 можно получить ещё –10% на все товары в корзине.

Что изменилось? Теперь стол стал ещё удобнее:
🔵диапазон высоты от 63 до 128 см — самый широкий среди моделей Ergostol;
🔵подходит для роста от 145 до 200 см;
🔵выдерживает до 100 кг — всё необходимое оборудование легко помещается;
🔵двухмоторное подстолье с круглыми опорами и плавным ходом 32 мм/сек;
🔵регулируемое расстояние между опорами и пульт с дисплеем и памятью высоты.

Terra R 2.0 — это стиль, надёжность и комфорт, которые легко вписываются в любой интерьер.

Реклама. ООО «СОФТЭФФЕКТ». ИНН 7735575262
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔7👍61
🚀 Вышел Jetpack WorkManager 2.11.0

Что важного в новой версии:

❗️ minSdk: 23 (Marshmallow). Lollipop (API 21–22) больше не поддерживается.

🎉 Новое API: setRemoteSessionTimeoutMillis() в Configuration.Builder — задаёт время жизни сессии RemoteWorkManager после последнего использования.
class App : Application(), Configuration.Provider {
override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
// Сколько живёт RemoteWorkManager-сессия после последнего использования
.setRemoteSessionTimeoutMillis(TimeUnit.MINUTES.toMillis(5))
.build()
}
}


🎉 Тестирование: TestDriver.stopRunningWorkWithReason(...) — можно останавливать выполняющуюся работу с указанием причины.
Зачем: удобно эмулировать внешние условия (остановку системой/приложением) и проверять, что код корректно реагирует на «принудительное завершение».
// Arrange
val request = OneTimeWorkRequestBuilder<MyWorker>().build()
WorkManager.getInstance(context).enqueue(request).result.get()

// Act
val testDriver = WorkManagerTestInitHelper.getTestDriver(context)!!
testDriver.stopRunningWorkWithReason(
request.id,
/* reason */ 0 // укажите код причины, например ваш тестовый/константу из проекта
)

// Assert — далее проверяете ожидаемое состояние


🛠 Также сделали исправление багов

#android #jetpack #workmanager #jetpackupdate #androidjetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍154🔥3
🔥 Jetpack CameraX теперь разрабатывается вместе с командой камеры Pixel

Вышла первая альфа-версия Jetpack CameraX 1.6.0

Главное изменение — переход на унифицированный высокопроизводительный стек камеры, тот самый, что используется в приложении камеры Pixel. Этот стек известен как CameraPipe — и теперь CameraX и Pixel Camera развиваются совместно.

Новый стек принесёт:
👉 более быструю и стабильную инициализацию камеры,
👉 консистентную обработку фреймов,
👉 и улучшенную совместимость между устройствами.

Повод задуматься для миграции на CameraX для тех, кто не решался это сделать

#android #jetpack #androidjetpack #camerax #camera
🔥40🤯96👍1
🪙 Прожарка кода Androidify (1.5 часа) - самый свежий open source от Android команды из Google, который показал как не надо делать!

Взял самое свежее opensource приложения от разработчиков Android команды Google, разбирал его, исправлял и был в шоке от того как пишут. Таких разработчиков ИИ точно заменит либо помогал писать Gemini?

В видео найдете много пояснений что сделано плохо, как сделать лучше и главное - почему!

#AndroidBroadcast #codereview #прожарка #google #android
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥164🤯4🤔2👍1
🏝 KSP стало независеть от версии Kotlin. Неужели API плагинов Kotlin компилятора стало стабильным? Обновляйтесь до версии KSP 2.3.0 (версии Kotlin в названии больше нету)

Также KSP1 теперь deprecated, нужно чтобы всё умело работать с новой версией.

#ksp #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
27🔥13👍8🤯4
2025/10/24 04:26:54
Back to Top
HTML Embed Code: