TGINSIGHT CHAT
Android Broadcast
@android_broadcast
TechnologiesПодборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab#MQRZR
Posts récents
Tag : #android · 490 posts
Publié 15 janv.
🤖 Те, кто занимается тестированием приложений на CI, явно сталкивались с разворачиваем Android устройств (реальных и эмуляторов) для запуска автотестов и другого тестирования. Наткнулся на решение Dockerify Android, которое позволит вам развернуть и управлять эмулятором через браузер. 🐱 Подробности в репозитории Dockerify Android #android#docker
Publié 14 janv.
🤖Проблемы обязательного edge‑to‑edge в Android В Android 16 по умолчанию включили режим edge‑to‑edge, и разработчики больше не могут от него отказаться, если таргетят новую версию SDK. Да, часть ответственных команд внедрила поддержку ещё раньше, другие начали дорабатывать интерфейс после объявления включения в Android 16. У меня дома стоит робот‑пылесос, и часть функций управления им на Pixel 9 Pro стала недоступна: кнопка меню уезжает под системный статус‑бар, и повлиять на это я никак не могу. В результате получаю дискомфорт, производителю пылесоса всё равно, Google — тоже. Считаю, что в такой ситуации Google могла бы поступить по‑другому: 🛒Запретить публикацию новых приложений без поддержки edge‑to‑edge и постепенно снимать с публикации старые, не обновлённые версии. 🤖Дать пользователю системную настройку, позволяющую отключать edge‑to‑edge для конкретного приложения, как это делает, например, часть других производителей Android‑устройств. Google формально двигает UI вперёд, но забывает, что за качество приложений отвечает магазин и именно он должен жёстко требовать соответствия современным гайдлайнам. Видно, с кого берут пример, но Apple хотя бы последовательно принуждает разработчиков внедрять нововведения из свежих версий iOS и просто не даст опубликовать приложение в App Store без поддержки нужных требований, а это в большинстве регионов единственный официальный способ распространения софта на iOS. #android#android16#edgetoedge
Hashtags
Publié 5 janv.
🔨LeakCanary становится частью Android Studio Google выкатили мощное обновление в Android Studio Panda (2025.3.1) — теперь легендарный LeakCanary интегрирован прямо в IDE. Больше не нужно полагаться только на экран телефона для анализа утечек. LeakCanary — это де-факто стандарт в Android-разработке для поиска утечек памяти. Библиотека автоматически отслеживает объекты, которыеине очищаются сборщиком мусора. Это те самые "крошки", которые со временем превращаются в мертвый груз в оперативной памяти и приводят к тормозам и вылетам с ошибкой OutOfMemoryError. В Android Studio Profiler появилась отдельная задача (task) для LeakCanary. Главная фишка — анализ переносится с девайса на компьютер. Раньше процесс анализа хипа (heap dump) “вешал” слабые тестовые девайсы на несколько секунд (а то и минут). Теперь же “тяжелая” работа по парсингу hprof файла выполняется мощностями вашего рабочего ноутбука. Что крутого: 🚀Скорость: Анализ происходит значительно быстрее за счет ресурсов ПК. ✅Удобство: Результат анализа открывается сразу в IDE. Работает навигация “Jump to Source” — кликнули на утечку, сразу перешли в код. ✅Контекст: Можно скопировать трейс утечки и сразу скормить его Gemini прямо в студии для подсказок. ❗️ Несмотря на тесную интеграцию, LeakCanary остается независимым Open Source инструментом. Это все тот же проект от Square, который развивает комьюнити. Google не “поглотила” его, а просто встроила удобный UI для запуска анализатора внутри IDE. Библиотека остается свободной и открытой. Попробовать можно уже в Canary-сборке Android Studio Panda. Источник - developer.android.com #AndroidDev#AndroidStudio#Android#Производительность
Publié 22 déc.
🤖Google ускорили компиляцию кода на устройстве на 18% без компромиссов в памяти и других ресурсах Команда Android Runtime (ART) опубликовала технический разбор оптимизаций, внедренных в 2025 году. Инженеры поставили амбициозную цель: сократить время компиляции, не жертвуя ни пиковым потреблением памяти, ни качеством генерируемого кода. Самая хорошая новость — это не эксклюзив Android 16 (или будущих версий). Так как начиная с Android 12 компонент ART был выделен в Project Mainline, обновления прилетают через Google Play System Updates. Часть оптимизаций уже раскатана в июньском апдейте 2025 года, остальные придут до конца года. Подробнее про работу этой системы у меня есть 📹отдельное видео Ускорение компиляции на устройстве влияет на два сценария: 👉JIT (Just-in-Time): Приложение быстрее получает оптимизированный код, что снижает лаги и повышает отзывчивость UI. 👉AOT (Ahead-of-Time): При установке или обновлении приложений устройство тратит меньше ресурсов CPU, что бережет заряд батареи и снижает нагрев. 🔗 Читать полный разбор в блоге Android Developers #Android#ART#Performance#Mainline
Publié 22 déc.
🤖Улучшаем работу со Stacktrace в Jetpack Compose (особенно в релизе) Команда Compose представила opt-in API для улучшения читаемости стектрейсов во время разработки и для релизов. Теперь становится возможным: 👉 Точно определять источник крешей в композиции, Side Effect (LaunchedEffect, DisposableEffect) и корутинах из rememberCoroutineScope. 👉 Изолировать падения для создания воспроизводимых примеров. 👉 Изучать креши, которые раньше показывали только внутренние фреймы Compose. Достаточно добавить одну строку в точке входа в приложение (например, в Application.onCreate()): // Включить stack trace только для минифицированных сборок (рекомендуемый способ) Composer.setDiagnosticStackTraceMode(ComposeStackTraceMode.Auto) // Или для локальной отладки (более точные, но тяжёлые трассировки) Composer.setDiagnosticStackTraceMode(ComposeStackTraceMode.SourceInformation) ‼️ВАЖНО Требуется Kotlin 2.3.0, а для режимов `Auto` и `GroupKeys` - включённый R8 с минификацией. Есть несколько режимов работы ✔️Auto (рекомендуется): использует GroupKeys для минифицированных сборок и None для отладочных. 👉GroupKeys: для минифицированных приложений. Использует маппинг-файл от R8 для восстановления примерного местоположения. 👉SourceInformation: для отладки. Даёт точные строки где произошел креш, но затратно по производительности. Стоит использовать только на этапе разработке. ❌None: ничего не добавляет (поведение по умолчанию). Под капотом любой креш в Compose коде оборачивается в DiagnosticComposeException, который добавляется в suppressed-исключения. В нём будет полная иерархия вызовов `@Composable` функций на момент падения! java.lang.IllegalStateException: Test layout error at <original trace> Suppressed: androidx.compose.runtime.DiagnosticComposeException: Composition stack when thrown: at ReusableComposeNode(Composables.kt:<unknown line>) at Layout(Layout.kt:79) at <lambda>(TempErrorsTest.kt:164) <-- Ваша функция! ... и т.д. ⚠️ Известные ограничения: 👉 В режиме SourceInformation для первых фреймов могут не указываться номера строк (<unknown line>). 👉GroupKeys указывает только на первую строку @Composable функции. 👉 Если сам сбор стектрейса упадёт, его исключение будет добавлено как suppressed. Подробнее в официальной документации 💬 А вы уже пользовались этой фичей? Делитесь в комментариях! 👇 #AndroidDev#Kotlin#Compose#R8#Android
Publié 21 déc.
🚀Media3 1.9.0: 4 новых модуля, Compose UI и умная предзагрузка Вышел крупный релиз Jetpack Media3 1.9.0. В центре обновления — четыре новых модуля и значительные улучшения производительности: 👉 Новый модуль media3-inspector — извлечение метаданных (длительность, формат) и кадров (превью) без запуска воспроизведения. Заменяет MediaMetadataRetriever. 👉 Новый модуль media3-ui-compose-material3 — готовые Compose-компоненты в стиле Material 3 для быстрой сборки UI плеера. 👉 Переписали media3-cast — автоматическое управление переходами между локальным (ExoPlayer) и удалённым (Chromecast) воспроизведением. 👉 Переписали media3-decoder-av1 (переписан) — стабильный AV1-декодер на основе библиотеки dav1d от автором VLC плеера. ⚡️ Умный PreloadManager - Добавлена интеграция с кэшем на диске и автоматическое управление памятью. Можно предзагружать большие очереди, не боясь превысить лимит оперативной памяти. ⏳Детектор «зависшего» плеера — автоматически сообщает об ошибке, если воспроизведение не прогрессирует. 👉 Упрощённая настройка кнопок в уведомлениях (Android Auto, Wear OS) через Player.COMMAND_*. 🔮 CompositionPlayer - экспериментальное API для реального превью видеомонтажа перед экспортом через Transformer. Подробности в официальном блоге #Android#Jetpack#Media#Chromecast
Publié 18 déc.
🚀Jetpack Ink 1.0 стабильна! Библиотека для работы с рукописным вводом и графикой Google выпустил стабильную версию Jetpack Ink 1.0 — библиотеку для создания продвинутых функций рукописного ввода (inking) и рисования в Android-приложениях. Это многомодульная библиотека, которая обрабатывает цифровые штрихи (strokes) от ввода (стилус или палец) до их показа. Она предоставляет все необходимые инструменты для создания реалистичного и отзывчивого опыта письма или рисования. 👨💻 Кому будет полезна? 👉 Разработчикам приложений для заметок, скетчей, цифровых подписей. 👉 Образовательным приложениям, требующим аннотирования документов или изображений. 👉 Любому продукту, где нужен реалистичный, выразительный пользовательский ввод поверх контента. Библиотека берет на себя сложности обработки графики, физики мазков и обработки жестов, позволяя легко добавить профессиональные функции рисования. #Jetpack#AndroidDev#Android
Hashtags
Publié 14 déc.
‼️RuStore отключает API биллинга у разработчиков, оформленными как самозанятые, с февраля 2026 На сайте документации магазина можно найти официальное письмо. Отключается не просто возможность совершения покупок в приложениях/играх, а всё API биллинга, что не позволит разработчикам даже проверять статус уже совершённых покупок. Как именно это будет работать с 1 февраля 2026: ✅Останется доступным: - Публикация и обновление приложений - Альтернативные способы монетизации (вне платежных инструментов RuStore) - Возвраты по ранее совершённым платежам - Переводы платных приложений в бесплатные по запросу ❌Будет отключено: - BillingClient SDK и Pay SDK — полностью - Платные приложения автоматически скроются с витрины - Списания по активным подпискам будут остановлены - Проверка статуса уже совершённых покупок станет невозможной ОСНОВНЫЕ ПРИЧИНЫ ОТКЛЮЧЕНИЯ: 1. Ужесточение регуляции статуса самозанятых в РФ (2026+). 2. Усиление требований регуляторов к платёжным системам 3. Предотвращение репутационных и юридических рисков из-за работы с самозанятыми ЧТО ДЕЛАТЬ РАЗРАБОТЧИКАМ: Вариант 1: Переход на ИП/ООО (рекомендуется). Не откладывайте! Регистрация ИП требует времени. Лучше начать процесс в конце 2025 года, чтобы успеть до февраля 2026. Вариант 2: Регистрация ООО/ИП и перевод приложения на новое юр.лицо Вариант 3: Сделать приложение бесплатным и перейти на другой биллинг СРОКИ И ВАЖНЫЕ ДАТЫ: 📅1 февраля 2026 — дата отключения API биллинга для самозанятых 📅1 апреля 2026 — дедлайн для выплаты заработанных до этого средств Более детальная информация доступна в официальной документации Для связи с поддержкой RuStore: 📧 [email protected] Я обращусь к представителю RuStore, чтобы получить официальную позицию от магазина #RuStore#Android#Монетизация
Hashtags
Publié 12 déc.
🤖Новые способы защиты в Android 16 от malware, которое злоупотребляет Accessibility В Android уже давно существует системная проблема - вредоносные приложения используют Accessibility API не для доступности, а для атак: скрытое считывание текста с экрана, автоматические клики по кнопкам без ведома пользователя, подмена пользовательских действий и обход бизнес-логики и другие. В Android 16 добавили возможность запрещать доступ к элементам UI в приложениях accessibilityDataSensitive - новый флаг позволяет явно пометить UI-элемент как содержащий чувствительные данные. Accessibility-сервисы не могут читать или взаимодействовать с этим элементом, за исключением — легитимные сервисы доступности (screen readers и т.п.), filterTouchesWhenObscured (был до Android 16) - когда у View (или окна) включён filterTouchesWhenObscured = true, то система игнорирует touch события, если в момент касания поверх окна есть другое приложение. Так делают злоумышленники для перехвата касаний, показывая прозрачный overlay Использовать нужно на: 👉 экранах логина, 👉 платежных формах, 👉 экранах с персональными и финансовыми данными. // Защита от tapjacking val composeView = LocalView.current DisposableEffect(Unit) { composeView.filterTouchesWhenObscured = true onDispose { composeView.filterTouchesWhenObscured = false } } // Защита чувствительных данных BasicText( text = "Password", modifier = Modifier.semantics { sensitiveData = true } ) <TextView android:filterTouchesWhenObscured="true" /> <TextView android:accessibilityDataSensitive="true" /> // Через код view.filterTouchesWhenObscured = true view.isAccessibilityDataSensitive = true Новые возможности на заменяет FLAG_SECURE, а дополняет его #Android#Android16#Безопасность#AndroidDev
Publié 9 déc.
🚀Cash App перевел Android-приложение на Metro — новый DI фреймворк для Kotlin Команда Cash App (Block) успешно мигрировала своё Android-приложение с Anvil/Dagger на Metro — современный фреймворк для dependency injection, разработанный Zac Sweers. Metro — это compile-time DI фреймворк, вдохновленный Dagger и Anvil, но реализованный как Kotlin compiler plugin. Он Kotlin-first, поддерживает K2 и работает значительно быстрее традиционных решений. Вобрал в себя всё лучшее от Dagger, Anvil и Kotlin-Inject Почему перешли на Metro? - Скорость сборки — ускорение инкрементальных сборок на ~60% - Поддержка Kotlin K2 — возможность использовать новейший компилятор Kotlin - Упрощение стека — отказ от kapt и Java-ориентированных инструментов - Современный подход — Kotlin-first дизайн и улучшенный DX - Более строгая валидация DI-графа - Улучшена безопасность типов (нуллабельность) - Поддержка KMP 📊 Результаты по скорости сборки: - Инкрементальные сборки → ускорение на 58-60% - Чистые сборки → ускорение на 17% - ABI-изменения → сборка за 11.9s вместо 28.8s Миграция 1500 модулей проводилась постепенно с двойной поддержкой двух DI фреймворков для безопасного перехода. В зависимости от настройки Gradle менялся DI и генерация кода. Впервые вижу подход, когда был описан граф для 2 разных DI с целью постепенной миграции. Миграцию с Koin на Metro так не сделать, но вот с Koin Annotations на Metro вполне может получится. #DI#KMP#Dagger#Metro#Android#AndroidDev#Anvil
Publié 8 déc.
🤖AGP 9.0: Fused Library Plugin — новый способ публикации нескольких модулей как один AAR В Android Gradle Plugin (AGP) 9.0 и новее появился инструмент, которого ждали многие разработчики SDK и библиотек. Встречайте плагин Fused Library (com.android.fused-library). Пока в экспериментальном режиме. Раньше, если вы разбивали свой код на много модулей, перед вами вставала дилемма: заставлять пользователя подключать 5 разных зависимостей или использовать неофициальные "fat-aar" скрипты. Теперь Google предлагает нативное решение. Fused Library плагин позволяет взять несколько Android Library модулей и упаковать их в один AAR [1]. 1️⃣ Для включения фичи надо будет добавить флаг в gradle.properties: android.experimental.fusedLibrarySupport=true 2️⃣ Затем создаем модуль для публикации (например, my-sdk-fused). В его build.gradle.kts добавляем: plugins { id("com.android.fused-library") `maven-publish` } androidFusedLibrary { namespace = "dev.androidbroadcast.mysdk" minSdk = 23 } dependencies { // Указываем модули для "слияния" include(project(":core")) include(project(":ui-components")) // Можно вливать даже внешние либы! include("dev.androidbroadcast:cool-fonts:1.0") } Обратите внимание на include — это ключевая команда для упаковки. 3️⃣ Используем компонент fusedLibraryComponent при публикации артефакта: publishing { publications { register<MavenPublication>("release") { groupId = "dev.androidbroadcast" artifactId = "fat-sdk" version = "1.0.0" from(components["fusedLibraryComponent"]) } } } Инструмент мощный, но есть особенности: ❌Data Binding не поддерживается. ⚠️Ресурсы: При совпадении имен побеждает ресурс из зависимости, указанной первой. ⚠️Build Types: Нельзя слить debug и release в один проход, нужны разные fused-модули. 🐞Source JAR: Пока есть известные проблемы с генерацией исходников. Подробнее читайте в [документации](https://developer.android.com/build/publish-library/fused-library) #Android#AndroidDev#Gradle#AGP#Maven
Publié 6 déc.
🤖Готовьтесь к Android Gradle Plugin 9.0 — грядут большие перемены! Совсем скоро состоится релиз Android Gradle Plugin 9.0 (AGP), который полностью меняет подход к конфигурации Android‑проектов: удаляет устаревшие API, упрощает настройку и пересматривает организацию конфигурации. Ключевые изменения: 👉 Переход на Gradle 9.X 👉 Поддержка Kotlin теперь встроена в AGP — подключение org.jetbrains.kotlin.android больше не требуется и даже будет рушить сборку. Из плюсов — минус один плагин. 👉 Плагин org.jetbrains.kotlin.multiplatform больше не будет работать с com.android.library и com.android.application. Используйте com.android.kotlin.multiplatform.library, а для приложения создавайте отдельный модуль. 👉 Массовые изменения в API — множество удалений без прямых альтернатив. В целом идёт отказ от старых публичных интерфейсов, ведь новые уже давно доступны, и авторы плагинов могут их использовать. 👉 Некоторые возможности конфигурации теперь будут доступны только в библиотечном плагине. Чтобы корректно обновиться до новой версии, нужно, чтобы все плагины, подключённые в проект, поддержали необходимые изменения — или отказаться от них. Подробнее обо всех изменениях — в документации Надеюсь, Android Studio добавит ассистента по миграции. А вот авторам плагинов, похоже, прибавится работы 😅 Как вам перемены? Пойдут ли они на пользу скорости сборки и удобству использования AGP? #Android#AndroidDev#Gradle#AGP#AndroidStudio