TGINSIGHT CHAT
Android Broadcast
@android_broadcast
TechnologiesПодборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab#MQRZR
Posts récents
Page 24 sur 84 · 1,000 posts
Publié 23 oct.
🔥Jetpack CameraX теперь разрабатывается вместе с командой камеры Pixel Вышла первая альфа-версия Jetpack CameraX 1.6.0 Главное изменение — переход на унифицированный высокопроизводительный стек камеры, тот самый, что используется в приложении камеры Pixel. Этот стек известен как CameraPipe — и теперь CameraX и Pixel Camera развиваются совместно. Новый стек принесёт: 👉 более быструю и стабильную инициализацию камеры, 👉 консистентную обработку фреймов, 👉 и улучшенную совместимость между устройствами. Повод задуматься для миграции на CameraX для тех, кто не решался это сделать #android#jetpack#androidjetpack#camerax#camera
Publié 23 oct.
🚀Вышел 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
Publié 22 oct.
🪙LIVE Обсуждаем опыт интеграции ИИ в разработку в студии Surf Когда: Четверг, 23 октября, 19:00 (GMT+3) В последнее время я очень много читал материалов на тему применения ИИ технологий во всём цикле разработки приложений в Surf. Накопилось много вопросов и пригласил эксперта компании. Surf развивала и популяризировала Flutter, всегда интегрирую свежие подходы в проекты студии и вот сейчас ИИ. Формат - свободное обсуждение, где любой сможет задать свой вопрос и подключиться в прямом эфире поболтать с Кириллом и Женей. ❗️Гость толк шоу - Женя Сатуров @saturov_stroit_komandu, Mobile CTO в Surf. За 10+ лет в мобильной разработке прошёл путь от стажёра до СТО. Один из основателей русскоязычного Flutter-сообщества и энтузиаст кроссплатформы. В данный момент занимаюсь внедрением AI в SDLC. Запись эфира доступна на 🪙Boosty #ии
Hashtags
Publié 22 oct.
Если хотите адаптировать приложение под 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
Hashtags
Publié 22 oct.
Samsung представила Galaxy XR - шлем дополненной реальности. Аналог Apple Vision Pro но стоить будет 1800$ в США (в 2 раза дешевле устройства Apple) Работает шлем на чипе Qualcomm а ОС - Android XR с Google сервисами. Можно запускать приложения как с адаптацией под XR, так и без неё. Мнение автора: Дорогая игрушка, которая будет нишевым устройством и скатится туда же куда и Vision. XR хочется видеть на очках, а нне шлемах. #android#samsung#androidxr
Hashtags
Publié 21 oct.
📹 Собеседование на Kotlin Multiplatform разработчика 🎙 Проводит — Алексей Панов @kotlin_adept 🗓 Понедельник, 20 октября, 19:00 (GMT+3) Kotlin Multiplatform (KMP) набирает всё большую популярность — растёт количество вакансий и интерес со стороны компаний.…
Publié 21 oct.
🤖 Как автоматически проверить приложение перед публикацией в 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#тестирование
Hashtags
Publié 21 oct.
Publié 20 oct.
🤖Как проверить, какие комбинации фичей поддерживает камера смартфона Современные смартфоны умеют снимать с 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
Publié 19 oct.
🤯А что вообще считать маленьким проектом в 2025 году? В закрытом чате обсуждали, какого ноутбука хватит под «маленький KMP-проект» — но вот с тем, что считать маленьким, договориться не смогли. Приложение с тремя экранами, но двенадцатью Gradle-модулями — это ещё маленькое? KMP, но «только чуть-чуть под iOS» — считается? Или когда просто хотел попробовать Compose, а закончил с DI, Router и UseCase на одну строчку логики? В чём вообще измерять размер проекта — в строках кода, количестве модулей, экранах, фичах или времени сборки? У меня есть мнение, но интересно, где проходит грань у вас 😏 Комментарии открыты — давайте поругаемся конструктивно. #архитектура#android#kmp
Hashtags
Publié 18 oct.
Вот реальная история, как знание механики работы 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#архитектура
Publié 18 oct.
🤖Есть ли чувство юмора у разработчиков 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
Hashtags