Когда разработчик использует NotificationCompat.Builder для создания уведомлений из Android приложения, может показаться, что прямого контроля на внешний вид нету 🤯 На самом деле формируется не визуальный компонент, а объект данных, который описывает что есть в уведомление.
Этот объект — это просто структура, сериализуемая через Parcelable. Он передаётся в системный процесс через Binder — механизм межпроцессного взаимодействия в Android. А вот принимать и интерпретировать этот объект будет специальное системное приложение — SystemUI.
Уведомления отображаются не Android сам по себе, а конкретное приложение, которое называется
com.android.systemui. И это приложение полностью отвечает за то, как будет выглядеть уведомление. Оно решает, какие поля отобразить, где их разместить, какой стиль применить, как будет выглядеть кнопка, будут ли видны иконки — и многое другое. Часть из данных может игнорироваться.Вот почему одно и то же уведомление может выглядеть совершенно по-разному на разных устройствах и версиях ОС. Один и тот же вызов setContentTitle("Новость") может дать совершенно разный результат на Pixel с чистым Android и на Xiaomi с MIUI. Более того, даже RemoteViews, которые позволяют задавать кастомные layout’ы для уведомлений, могут игнорироваться или ограничиваться прошивками производителей.
Именно по этой причине я не люблю когда в уведомления вставляют Custom View, который выбивается из стиля и часто портит визуал системы и поведение. Мечтаю чтобы его поскорее запретили в Android. Пожалуйста, хотя бы в Android 17 🙏
Запомните
#android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍75❤6
Google продолжает прокачивать медиа API, и в этом релизе есть фичи, которые экономят время разработки и улучшают UX.
📺 ExoPlayer
👉 Плавная перемотка: новый ScrubbingMode делает скролл прогресс-бара без отрыва пальца супер-отзывчивым. Пользователь почувствует разницу.
👉 Встроенная видео-реклама: нативная поддержка Ads Interstitials в стриминге — меньше костылей.
👉 Длительность видео без проигрывания:
val duration = MetadataRetriever
.Builder(context, mediaItem)
.build()
.use { it.retrieveDurationUs().await() }
👉 PreCacheHelper — загрузка контента по частям для более быстрых стартов.
🎵 MediaSession
👉 Плеер в шторке не исчезает сразу после паузы — пользователю проще вернуться к просмотру.
✂️ Transformer API
👉 Экспериментальная обрезка видео через MP4 edit list.
👉 Опция CodecDbLite — ускоряет кодирование, подбирая оптимальные настройки под чипсет:
Transformer.Builder()
.setEncoderFactory(
DefaultEncoderFactory.Builder()
.setEnableCodecDbLite(true)
.build()
)
.build()
💡 Почему обновляться сейчас
👉 Меньше кастомного кода — больше нативных возможностей.
👉 Повышение отзывчивости плеера = выше удержание пользователей.
👉 Новые API для подготовки к интеграции рекламы и улучшенного UX.
Подробнее в анонсе или в changelog
#android #AndroidDev #Jetpack #Media3 #ExoPlayer
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Developers Blog
Media3 1.8.0 - What’s new?
Media3 1.8.0 release features a scrubbing mode in ExoPlayer, live streaming ad support with HLS interstitials, updated MetadataRetriever, and more.
👍35🔥13❤1
Media is too big
VIEW IN TELEGRAM
Виртуальная машина ART появилась в 5.0, а затем прошла огромную эволюцию и улучшается каждый релиз ОС. В новом видео рассказываю про то, как прокачали компиляцию кода приложения, что
Все видео для платных подписчиков можно найти тут
Если вам нравится что мы всей командой делаем для вас - ваше поддержка деньгами очень для нас важна.
#AndroidBroadcast #Android #AndroidDev #подкапотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🤯6❤1
Media is too big
VIEW IN TELEGRAM
#android16 #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔15👍9🏆3🤯2
where: Элегантное ограничение типов для чистоты и безопасностиКак часто в Android-разработке вы видели сомнительные
as-приведения? 🤔Вот пример, который недавно попался мне на глаза:
class Sample(private val activity: Activity) {
fun doSomething() {
// Опасно! Может упасть с ClassCastException,
// если activity не реализует LifecycleOwner
(activity as LifecycleOwner).lifecycle.addObserver(...)
}
}Опустим тот факт, что здесь стоит использовать слабую ссылку (
WeakReference) на Activity. Меня больше смутила необходимость вручную приводить Activity к LifecycleOwner.Да, в современной Android-разработке
AppCompatActivity и FragmentActivity реализуют этот интерфейс. Но наша цель — писать чистый и стабильный код, который не полагается на слепую веру, а гарантирует безопасность на уровне типов.💡Решение: Ограничение типов с помощью
whereВ Kotlin мы можем использовать условие
where для универсальных параметров, чтобы указать: «класс A должен быть одновременно и Activity, и LifecycleOwnerclass Sample<A>(private val activity: A)
where A : Activity,
A : LifecycleOwner {
fun doSomething() {
// Теперь activity можно использовать как LifecycleOwner
// БЕЗОПАСНО и без приведения типов
activity.lifecycle.addObserver(...)
}
}
Этот же подход отлично работает и для функций:
fun <A> doSomethingWith(activity: A)
where A : Activity,
A : LifecycleOwner {
// Полная типобезопасность
activity.lifecycle.addObserver(...)
}
В чем выигрыш?
Безопасность: Компилятор гарантирует, что в класс
Sample или функцию doSomethingWith можно передать только объект, который удовлетворяет обоим условиям:ClassCastException в рантайме.as.Используйте силу системы типов Kotlin на полную! Это делает код не только чище, но и стабильнее. 💪
#kotlin #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍161🔥36❤22
Media is too big
VIEW IN TELEGRAM
Узнайте, как ИИ-агент в Android Studio может значительно повысить вашу эффективность и качество приложений. Познакомьтесь с практическими возможностями на базе искусственного интеллекта: интеллектуальным преобразованием кода, автоматическим обновлением версий и новым набором инструментов для работы с интерфейсом, которые помогут создавать лучшие приложения быстрее.
#androidstudio #ai #ии #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4❤3
Работаете с WorkManager? Тогда вам точно пригодится встроенный в Android Studio инструмент — Background Task Inspector. Это ваш главный помощник для визуального мониторинга и отладки фоновых задач.
Что вы видите в инспекторе:
- Все WorkManager задачи в одном месте
- Текущие статусы: Running, Enqueued, Failed, Succeeded
- Детальную информацию о каждом воркере
Особенно мощно инструмент работает с цепочками задач:
// Например, у вас есть такая цепочка:
val workA = OneTimeWorkRequestBuilder<CleanupWorker>().build()
val workB = OneTimeWorkRequestBuilder<WaterColorFilterWorker>().build()
val workC = OneTimeWorkRequestBuilder<BlurEffectFilterColor>().build()
workManager
.beginWith(workA)
.then(workB)
.then(workC)
.enqueue()
Визуализация графа выполнения покажет:
- Какая задача завершилась успешно (Succeeded)
- Какая упала (Failed) и почему
- Как это повлияло на последующие задачи
Типичный сценарий отладки:
Видите статус «Enqueued»? Значит задача в очереди, но не запускается. Возможные причины:
- Ограничения не выполняются (нет сети, не заряжается устройство)
- Предыдущая задача в цепочке не завершилась
- Достигнут лимит параллельных задач
Преимущества использования:
- Экономия времени на логирование и отладку
- Наглядное представление сложных цепочек задач
- Быстрая диагностика проблем с выполнением фоновых операций
Инструмент уже ждет вас в Android Studio → View → Tool Windows → App Inspection → Background Task Inspector.
#AndroidStudio #Android #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤30👍8🤔1
Не так давно разобрал как работает Swift для Android, но там совсем "на скорую руку" сделали интеграцию с Gradle билд системой.
Решил показать как будет сделать нормальный плагин по лучшим практикам Gradle. Демонстрация разработки в новом видео.
Если у вас есть проблемы с Boosty - пишите @ab_manager
#AndroidBroadcast #Gradle #Swift #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍13🔥9❤4🤯1
Google выпустил Android 16 QPR2 — первое минорное обновление платформы, которое приносит новые функции без ломающих изменений.
🔧 Новый подход к версиям SDK
Теперь можно проверять минорные обновления через новые поля в Build:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA &&
Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1) {
// API из QPR2
}
Ключевые изменения:
👉 Расширенная темная тема — система автоматически инвертирует интерфейс для доступности
👉 Пользовательские формы иконок — пользователи могут менять форму всех иконок
👉 Интерактивный шеринг — обновление контента в реальном времени в превью шаринга
👉 Новый сборщик мусора — снижает нагрузку на CPU
Каждую фичу разберем подробнее в следующих постах! Подписывайте на @android_broadcast, чтобы не пропустить
#Android16 #AndroidDev #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤22👍17🔥1
Media is too big
VIEW IN TELEGRAM
Гугл выпустил Navigation 3 — это новая глава в построении навигации для Android-приложений. Всё, что вы знали, теперь стало мощнее, гибче и композабльнее!
00:00 — Базовые принципы Navigation 3
02:09 — NavEntry и entryProvider
03:29 — Разбор API на практике
07:17 — Навигация в многомодульном приложении
11:27 — Модуляризация: пишем код
15:57 — Анимации экранов
16:15 — Погружаемся в анимации
19:44 — Адаптивные макеты (Scenes)
23:01 — Scenes в действии
24:39 — Краткий итог и выводы
🔗 Официальное руководство
🔗 Рецепты для работы с Nav3 (Code recipes)
Навигация больше не будет болью! Смотрите, внедряйте и делитесь впечатлениями в комментариях.
#Android #AndroidDev #Jetpack #Compose #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍9🎉3
Легенда разработчик Джейк Уортон призвал использовать Beta и RC версии Android Jetpack библиотек, а не ждать стабильных релизов. Далее про причины
🚀 Beta ≠ "сырая версия". В экосистеме Android Jetpack бета-версии — это по сути стабильные релизы, которые прошли альфа-тестирование.
👍 Фиксы багов будут быстрее. Beta и RC получают исправления багов быстрее, чем стабильные релизы.
🔍 Раннее обнаружение проблем. Вы можете найти и сообщить о багах до выхода стабильного релиза и помочь сообществу раньше.
Такие причины сподвигнут вас брать Beta и RC? Ну точно нет. Некоторые ждут по 1-2 неделе после выхода Stable, чтобы обновляться!
#AndroidDev #Jetpack #BestPractices #JakeWharton
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉25🤔22👍13❤1🏆1🆒1
Google выпустил обновление библиотеки
SwipeRefreshLayout до версии 1.2.0. В основном релиз содержит исправления багов, которые улучшают работу жеста обновления.Исправление визуальных артефактов
- Иконка обновления теперь полностью убирается после сворачивания (исчезает её тень)
- Сброс всех свойств иконки после сворачивания, чтобы она корректно отображалась при следующем вызове
👍Корректная обработка Touch-событий. Метод
requestDisallowInterceptTouchEvent() теперь работает как в обычных ViewGroup. Это важно для вложенных scroll-контейнеров.Если новое поведение с обработкой touch-событий ломает ваше приложение, можно вернуть старое через:
swipeRefreshLayout.setLegacyRequestDisallowInterceptTouchEventEnabled(true)
#AndroidDev #Jetpack #UI
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍9
WebGPU — это новый графический и вычислительный API, который приходит на смену устаревающему WebGL. Его цель — дать разработчикам современный доступ к GPU для тяжёлых визуальных и вычислительных задач как в вебе, так и теперь — в Android, благодаря androidx.webgpu. Если упрощённо — WebGPU открывает дверь к автоматически оптимизированной работе с видеокартой без необходимости использовать низкоуровневые графические движки.
Что даёт WebGPU разработчикам:
🧩 Современная графика уровня Vulkan/Metal/DX12
⚙️ Compute-шейдеры для вычислений прямо на GPU
🚀 Высокую производительность рендеринга и ML-вычислений
🔁 Кроссплатформенность: единый подход Web + Android (и не только)
📦 Потенциально меньше нативного кода на C++/NDK
🧪 Удобный доступ к GPU-фичам для прототипов и экспериментов
Версия для Android пока в alpha, API нестабилен, документации немного. Но это важный шаг: Google фактически легализует WebGPU как будущий GPU-базис на Android.
#AndroidDev #Android #Jetpack #AndroidJetpack #WEB #GPU
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥9❤1
Команда Android Studio выпустила финальный стабильный релиз 2025 года — Otter 2 Feature Drop. Это большое обновление которое в основном строится вокруг AI
✨ Главные нововведения:
🔁 Бэкап и синхронизация настроек
#AndroidStudio #Android #AndroidDev #AI #ИИ #Gemini
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥4👎1
Совсем скоро состоится релиз 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍36❤7🔥5👎1
В 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍38🔥16❤5👎1
🚀 Cash App перевел Android-приложение на Metro — новый DI фреймворк для Kotlin
Команда Cash App (Block) успешно мигрировала своё Android-приложение с Anvil/Dagger на Metro — современный фреймворк для dependency injection, разработанный Zac Sweers.
Почему перешли на 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
Команда 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
👍43🔥18❤5👎1
Media is too big
VIEW IN TELEGRAM
Android XR расширяется на лёгкие AI-очки от Samsung, Gentle Monster и Warby Parker — стильные гаджеты для ношения весь день с Gemini для операций в реальном времени. Вышел Android XR SDK Developer Preview 3 с поддержкой glasses: Jetpack Compose Glimmer для прозрачных UI, Jetpack Projected для extension мобильных apps на очки, ARCore Geospatial.
Что нового для разработчиков:
👉 Compose Glimmer — UI Toolkit на основе Compose для AR-очков
👉 Projected — портируй app на glasses легко
👉 XR Emulator в Android Studio
👉 OpenXR плагины для Unreal/Godot
#AndroidXR #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13👎1
В 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40❤13🔥2👎1
Google выпустил стабильную версию Jetpack Ink 1.0 — библиотеку для создания продвинутых функций рукописного ввода (inking) и рисования в Android-приложениях.
Это многомодульная библиотека, которая обрабатывает цифровые штрихи (strokes) от ввода (стилус или палец) до их показа. Она предоставляет все необходимые инструменты для создания реалистичного и отзывчивого опыта письма или рисования.
👨💻 Кому будет полезна?
👉 Разработчикам приложений для заметок, скетчей, цифровых подписей.
👉 Образовательным приложениям, требующим аннотирования документов или изображений.
👉 Любому продукту, где нужен реалистичный, выразительный пользовательский ввод поверх контента.
Библиотека берет на себя сложности обработки графики, физики мазков и обработки жестов, позволяя легко добавить профессиональные функции рисования.
#Jetpack #AndroidDev #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37👎4❤3🔥1
Google выпустил новую библиотеку Core-Backported-Fixes 1.0. Она помогает приложениям определить, установлены ли на устройстве пользователя критические исправления системных ошибок от Google.
Когда Google выпускает исправление системной ошибки Android, его распространение на все устройства занимает месяцы. Эта библиотека позволяет приложению проверить, применено ли конкретное исправление на текущем устройстве, и в зависимости от этого выбрать безопасную стратегию работы.
Библиотека предоставляет API для проверки статуса известных проблем (
KnownIssues) по их ID.val fixManager = BackportedFixManager()
if (fixManager.isFixed(KnownIssues.KI_398591036)) {
// Исправление установлено, можно использовать функцию
useFeatureSafely()
} else {
// Исправления нет, включаем обходной путь
useFallbackWorkaround()
}
Пока что библиотека содержит информацию об одной известной проблеме -
KI_398591036: Аномальные цветовые тона при съёмке в формате JPEG-R на некоторых устройствах Pixel. Рекомендация — использовать обычный JPEG, пока проблема не исправлена.👨💻 Кому это будет полезно?
👉 Разработчикам, чьи функции зависят от конкретных системных исправлений.
👉 Приложениям, работающим с аппаратными возможностями (камера, датчики), где часто встречаются специфичные для устройств баги.
👉 Тем, кто хочет повысить стабильность и избежать сбоев, связанных с прошивкой.
#AndroidDev #Jetpack #Pixel
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16👎4❤2🎉1