TGINSIGHT CHAT
Android Broadcast
@android_broadcast
TechnologiesПодборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab#MQRZR
Posts récents
Page 1 sur 84 · 1,000 posts
Publié il y a 16 jours
🚀Jetpack Telecom 1.1.0 добавил то, чего не хватало VoIP-приложениям с самого начала — историю звонков прямо в системном дайлере. До этого момента пропущенный звонок в Telegram или любом другом VoIP-приложении требовал переключиться в само приложение, найти вкладку с историей и перезвонить оттуда. Теперь это можно делать прямо из нативного дайлера Android. Работает через два новых механизма. Первый — интеграция лога звонков. Приложение регистрирует звонки через TelecomManager.addCall, и они автоматически попадают в системную историю. Для обратного звонка нужно зарегистрировать intent-фильтр на TelecomManager.ACTION_CALL_BACK и правильно обработать EXTRA_UUID, который система отдаёт вместе с вызовом. UUID генерирует CallControlScope.getCallId в момент регистрации звонка — его и нужно хранить, чтобы потом разрезолвить детали вызова. Второй механизм — исключение из лога. Не каждый звонок стоит светить в системной истории, и теперь это явно контролируется через флаг isLogExcluded = true в CallAttributesCompat. Например, эфемерные или приватные звонки можно просто не записывать. ‼️ ВАЖНО: фичи доступны только на Android 16.1 (SDK 36.1) и выше. Кроме того, нативные дайлеры используют package allowlist для контроля того, какие VoIP-приложения отображаются в истории. Роллаут идёт поэтапно, первым подключился Google Meet. Для локального тестирования Google рекомендует Telecom Sample Dialer из platform-samples. Меня радует сам вектор: Google последовательно закрывает разрыв между VoIP и нативной телефонией. Жаль, что allowlist пока ограничивает возможности сторонних приложений. Печально то, что это делают так поздно, когда звонки не по телефону делают уже 5–10 лет. 🔗 Источник: android-developers.googleblog.com #Android#Telecom#AndroidJetpack
Hashtags
Publié il y a 16 jours
7 июня в Москве Яндекс проведет Mobile Runtime—летнюю встречу для мобильных разработчиков! Вместе с экспертами обсудим AI в мобилке, кросс-платформы, BDUI, скорость и качество приложений, а также движение индустрии и навыки будущего. Программа разделена на 2 трека: 🔹AI: как инструменты помогают ускорять работу и как AI-фичи внедряются в приложения — от кейсов до архитектуры и технических решений. 🔹Not so AI: нативная разработка, кроссплатформенность, архитектура, а также карьера, команды и развитие в индустрии. Например, Лев Бондаренко, старший iOS-разработчик в Яндекс Еде, расскажет о том, какие цели ставили при запуске медиаленты в приложении и как работали с возникающими трудностями. 🗺 В Москве очных участников встречи ждут воркшопы, дискуссии и соревнования в летнем дворике, а для тех, кто не сможет прийти, будет доступна онлайн-трансляция. ➡️Регистрация уже открыта
Publié il y a 18 jours
🤯Самый громкий анонс шоу - Googlebook. Новая категория ноутбуков на базе гибрида Android и ChromeOS, с Gemini в самом ядре. Запуск осенью. И тут главная боль. Я ждал, что Google наконец возьмёт ноутбуки под свой контроль, сделает эталонный девайс, как делает с Pixel смартфонами. А оказалось — партнёрская программа. Собирать будут Acer, Asus, Dell, HP, Lenovo. То есть нас ждёт стандартная история Android-смартфонов: разброс по качеству, цене, поддержке. Кто-то выпустит сырую дешёвку, кто-то нормальный дорогой девайс, и общее впечатление от платформы размажется. Со смартфонами Google это уже поняла и Pixel делает качественно. С ноутбуками — почему-то наступила на те же грабли. На мой взгляд — это главный провал шоу. Слово громкое, но точнее не подобрать. Что касается самой ОС, то пока выглядит как прокачанный ChromeOS с глубокой интеграцией с Android: общие файлы, объединённые подходы между смартфоном и ноутом. Деталей мало, всё решат софт и реальные сценарии. Но желания пойти купить нет от слова совсем. Вендорам, которые это будут собирать, доверия мало. Подождём первые девайсы. Если эталонного от Google не будет — буду грустить. #Android#Geminie#ChromeOS#Googlebook#Google
Publié il y a 18 jours
2️⃣Обновление Android Auto и автомобили с интегрированным Google Редизайн Android Auto в стиле Material 3 Expressive: новые шрифты, анимации, обои, поддержка виджетов. Оптимизировали круглые, прямоугольные и овальные дисплеи — теперь поддерживается любая форма. Immersive Navigation в Картах с 3D-зданиями, разметкой полос и светофорами. На поддерживаемых автомобилях теперь доступно видео в разрешении FHD с частотой 60 кадров в секунду на парковке, а также поддержка Dolby Atmos. Виджеты в машине действительно удобны, их давно ждали. Это позволит реализовать различные интеграции. Для России и Беларуси тема малоактуальна. Рынок сейчас почти полностью китайский, а там с Android Auto просто никак. Какая разница, как Google прокачал систему, если в вашей машине её всё равно не будет? Большие машины себе установят и поедут, остальным — мимо. Круглые дисплеи — дело вкуса. Прямоугольный кажется самым простым, понятным и удобным. #Android#AndroidAuto
Hashtags
Publié il y a 18 jours
Android Show 2026, ставший традицией перед Google I/O, снова привлек наше внимание. В прошлом году нам показали Material 3 Expressive, а в этом году мы увидели три ключевых направления развития. Давайте разберемся с каждым из них по порядку. 1️⃣ Наконец-то Google представил свой собственный аналог Apple Intelligence, получивший название Gemini Intelligence. Это интерфейс, работающий поверх Android, который анализирует контекст экрана и выполняет действия на его основе. Например, если долго зажать кнопку питания над списком заметок, Gemini автоматически добавит товары в корзину для доставки. Если в Gmail найдено расписание курса, Gemini поместит необходимые книги в корзину. Также он интегрируется с Chrome, обеспечивая автобраузинг на мобильных устройствах; с Gboard — очищая голосовой ввод от мычания и повторов; а также с генеративными виджетами для домашнего экрана и плитками Wear OS. Летом на свет появятся новые модели Pixel и Galaxy, а затем последуют часы, очки, автомобили и ноутбуки. Неожиданно, что обычный Gemini не обладал этими возможностями сам по себе. Пришлось вынести их в отдельный продукт под собственным брендом. С маркетинговой точки зрения это логично: создать «премиум-решение с продвинутыми AI-функциями» для дорогих устройств, чтобы бюджетные Android-смартфоны не получили к ним доступ. Тем не менее, остался небольшой осадок. #Google#Gemini
Publié il y a 27 jours
🚀Вышел AndroidX WebKit 1.16.0. Забирай в работу интеграции 👉 minSdk поднят до 24 (Android 7.0) — учитывайте при апгрейде. 👉 Async-старт WebView вышел из experimental. startUpWebView вместе с ProcessGlobalConfig позволяют прогреть WebView в фоне до того как он понадобится UI. Эту штуку давно ждали в стабильной версии — для меня самое ценное обновление этого релиза. 👉 Navigation API тоже стабильный. Больше не надо @OptIn — addNavigationListener даёт колбэки на разных стадиях навигации, ошибку загрузки через Navigation.webResourceError, URL текущей страницы через Page. Главное — теперь FCP и LCP метрики прилетают напрямую из WebView без инъекции JS: // Перед использованием проверь // WebViewFeature.isFeatureSupported(WebViewFeature.NAVIGATION_LISTENER) WebViewCompat.addNavigationListener(webView, object : NavigationListener { override fun onFirstContentfulPaintMillis(page: Page, millisFromNavStart: Long) { analytics.report("FCP", millisFromNavStart, page.url) } override fun onLargestContentfulPaintMillis(page: Page, millisFromNavStart: Long) { analytics.report("LCP", millisFromNavStart, page.url) } override fun onNavigationCompleted(navigation: Navigation) { navigation.webResourceError?.let { err -> Log.w("WV", "load failed: ${err.errorCode}") } } }) На один WebView можно вешать несколько листенеров и прокидывать свой Executor если нужны колбэки в фоновом потоке. 👉WebViewCompat.saveState теперь умеет ограничивать размер state. Если ловили TransactionTooLarge при сохранении состояния — это для вас. 👉 Подвезли addJavaScriptOnEvent для инъекции JS на загрузку документа и инъекцию скриптов в isolated worlds без конфликтов со страницей. Гибридным приложениям пригодится. 👉 [EXPERIMENTAL] BackForwardCacheSettings полностью переписали. Если использовали старый Builder через WebSettingsCompat.setBackForwardCacheSettings — ловите ошибку компиляции при апгрейде. Теперь так: val settings = WebSettingsCompat.getBackForwardCacheSettings(webView.settings) settings.setMaxPagesInCache(5) 👉Profile.setSpeculativeLoadingConfig депрекейтнут, замена через Profile.setMaxPrerenders плюс PrefetchCache.setMaxPrefetches и setPrefetchTtlSeconds (тоже experimental). #Android#Webview#Web#AndroidDev
Hashtags
Publié il y a 28 jours
🚀 Вышел Jetpack Paging 3.5.0 где добавили возможность получения данных как StateFlow // В ViewModel val pager = Pager(pagingConfig, pagingSourceFactory) val pagerFlow: Flow<ItemSnapshotList> = pager.flow.asState() // Пример в Compose val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList) val snapshot = itemsFlow.value LazyColumn { items(items = snapshot.items) { ... } } Также появилась возможность явно вызвать загрузку новых страниц через методы append() и prepend(), а также refresh() и retry() LazyColumn { item { LaunchedEffect(viewModel) { viewModel.prepend() } } items(snapshot.items) { item -> Text("Item: $item") } item { LaunchedEffect(viewModel) { viewModel.append() } } } Кажется, что сделали жизнь проще, но мой опыт с Paging всегда упирался в проблемы кэширования и удобной работы в Data слое. Всегда считал эту библиотеку архитектурно неудачной и ждал когда же ее переделают полностью. #Android#Jetpack#AndroidDev
Hashtags
Publié il y a 29 jours
🤖 GPT 5.5 и 5.4 лучше подходят для Android разработки, чем модели Claude. РАУНД! Данные официального бенчмарка Google #AI#Benchmark
Hashtags
Publié 4 mai
📹/e/OS - дегуглификация Android с подходом экосистемы Apple Продолжаю разбор как избавится на Android от слежки Google. /e/OS - это не просто форк AOSP, но и развитие экосистемы альтернативых сервисов, а также свои эталонные устройств на собственной ОС из коробки Все подробности в новом видео на 📹YouTube и 📹VK Video #AndroidBroadcast
Hashtags
Publié 4 mai
🐘 В мире Android и тем более KMP проектов огромное количество зависимостей. Та самая ситуация, когда build зеленый, sync прошел, но приложение падает в рантайме из-за NoSuchMethodError или ClassNotFoundException, знакома многим. Причина — тихий конфликт версий. Gradle по умолчанию старается брать самую новую версию из всех найденных, но срабатывает не всегда. В разных модулях одного проекта могут спокойно жить разные версии одной библиотеки (например, okhttp 4.9.0 в модуле А и 4.11.0 в модуле Б). Gradle не считает это конфликтом, потому что модули изолированы. В рантайме при передаче объекта между модулями — ClassCastException. Особенно больно это бьет в KMP, где общая бизнес-логика связывает всё в единую цепочку. Плагин 🐱Dependency Conflict Analyzer переворачивает подход. Он встраивается в Gradle и каждый раз при синхронизации автоматически анализирует весь граф зависимостей по всем модулям. Не нужно ничего запускать вручную или гадать, кто что подтянул. Если есть расхождение в major-версиях — плагин сразу покажет конфликт в консоли. Причём он найдет даже скрытые расхождения между разными модулями, которые Gradle игнорирует. # Пример работы плагина Version conflict detected: org.slf4j:slf4j-api - version 2.0.17 via: - project :app -> ch.qos.logback:logback-classic:1.4.11 -> org.slf4j:slf4j-api:2.0.17 ... - version 1.7.25 via: - project :app -> org.apache.logging.log4j:log4j-slf4j-impl:2.17.1 -> org.slf4j:slf4j-api:1.7.25 Такая проактивная проверка помогает фиксить конфликты еще на этапе разработки и писать более стабильный код. Попробуйте. #Gradle
Hashtags
Publié 4 mai
🤯 Те кто использовал Jetpack Paging 3 знают насколько он может справиться только с базовыми сценариямми. Шаг влево или вправо - уже боль! Сегодня хочу познакомить вас с альтернативой — библиотекой 🐱Paginator. Это KMP-решение для пагинации, которое решает те самые проблемы, где Paging 3 начинает "буксовать". Paginator построен на отличной модели от Jetpack Paging 3: страница — это адресуемая ячейка в кэше, кэш — обычная структура данных, а навигация — обычные методы. 1️⃣✅ Адресуемые страницы Прямые методы goNextPage(), goPreviousPage() и jump(Bookmark). Deeplink на сообщение из пуша решается одной строкой. 2️⃣✅ Мутации по запросу MutablePaginator предоставляет CRUD-операции: replace { it.id == 42 }, removeWhere { it.deleted }. Один лайк меняет один элемент без инвалидации всей страницы. 3️⃣✅ Сохраняемое состояние Кэш — обычная структура данных, которую можно сериализовать через kotlinx.serialization. Методы serializeToJson() и restoreFromJson() решают проблему Process Death без плясок с бубном. 4️⃣✅ Библиотека, а не фреймворк Написан на чистом Kotlin без платформенных зависимостей и живёт в commonMain. Логика пагинации становится частью общего доменного слоя KMP, не копируется между платформами и не имеет двух реализаций. 5️⃣✅ Курсорная пагинация "из коробки" Отдельный класс CursorPaginator с единой моделью состояний, транзакций и сериализации. Paginator — это не обёртка над Paging 3. Это другая модель, переосмысливающая ключевые типы. Обёртка просто не смогла бы дать ни мутации элемента, ни сериализации кэша. 🔗Оригинальная статья на Хабре 🐱Репозиторий Paginator #Android#AndroidDev#KMP
Hashtags
Publié 1 mai
🤖Говорун - open source приложения под Android с офлайн распознованием русской речи и переводом её в текст. Можно посмотреть как организована работа с записыванием звука, accessibility framework и работой с ИИ моделью на устройстве Установить можно из 🛒RuStore #Android#OpenSource
Hashtags