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é 14 févr.
🤖Улучшения поддержки UltraHDR в Android 16 Появилась поддержка UltraHDR в HEIC, также работают на поддержкой в AVIF. Также добавили новые параметры UltraHDR из черновика стандарта ISO 21496-1 #android#android16
Hashtags
Publié 14 févr.
🤖Точная настройка цветовой температуры и оттенка в Camera2 В Android 16 появилась поддержка точной настройки цветовой температуры и оттенка для камеры, что особенно полезно для профессиональных видеосъёмочных приложений. Ранее в Android управление балансом белого осуществлялось через CONTROL_AWB_MODE, но выбор ограничивался предустановками (например, “Лампа накаливания”, “Облачно”, “Сумерки”). Теперь новый режим COLOR_CORRECTION_MODE_CCT позволяет использовать параметры COLOR_CORRECTION_COLOR_TEMPERATURE и COLOR_CORRECTION_COLOR_TINT для более точной коррекции баланса белого на основе коррелированной цветовой температуры (CCT). Пример кода: fun setCCT() { val colorTemperatureRange: Range<Int> = mStaticInfo.characteristics[CameraCharacteristics.COLOR_CORRECTION_COLOR_TEMPERATURE_RANGE] // Переключаемся в ручной режим для активации CCT reqBuilder[CaptureRequest.CONTROL_AWB_MODE] = CameraMetadata.CONTROL_AWB_MODE_OFF reqBuilder[CaptureRequest.COLOR_CORRECTION_MODE] = CameraMetadata.COLOR_CORRECTION_MODE_CCT reqBuilder[CaptureRequest.COLOR_CORRECTION_COLOR_TEMPERATURE] = 5000 reqBuilder[CaptureRequest.COLOR_CORRECTION_COLOR_TINT] = 30 val request: CaptureRequest = reqBuilder.build() } Теперь разработчики могут добиваться более точной цветопередачи, что особенно важно для профессиональной видеосъёмки. #android#android16#camera2#камера
Publié 14 févr.
⚙️Профессиональные функции Camera2 API. Гибридная автоэкспозиция 🎥✨ В Android 16 добавлены новые режимы гибридной автоэкспозиции (Hybrid AE) в Camera2. Теперь можно вручную управлять отдельными параметрами экспозиции, оставляя остальное на алгоритм автоэкспозиции (AE). Доступны два новых режима: 👉 ISO + AE – вы задаёте ISO, а автоэкспозиция регулирует выдержку. 👉 Выдержка + AE – вы управляете временем экспозиции, а AE настраивает ISO. Это даёт больше гибкости по сравнению с прежним подходом, где нужно было либо полностью полагаться на автоэкспозицию, либо вручную контролировать все параметры. fun setISOPriority() { // ... val availablePriorityModes = mStaticInfo.characteristics.get( CameraCharacteristics.CONTROL_AE_AVAILABLE_PRIORITY_MODES ) // ... // Включение AE режима reqBuilder.set( CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON ) reqBuilder.set( CaptureRequest.CONTROL_AE_PRIORITY_MODE, CameraMetadata.CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY ) reqBuilder.set( CaptureRequest.SENSOR_SENSITIVITY, TEST_SENSITIVITY_VALUE ) val request: CaptureRequest = reqBuilder.build() // ... } #android#android16#камера#camera2
Publié 13 févr.
Как лишние ресурсы могут повлиять на UI вашего приложения Библиотеки от Google и других популярных SDK часто содержат строки для десятков локалей, тогда как большинство приложений поддерживают всего 7–10 наиболее востребованных языков. Механизм выбора ресурсов в Android устроен таким образом, что система подбирает наиболее подходящий ресурс с учётом квалификаторов (например, локали). Если для конкретной локали, установленной на устройстве, в вашем проекте отсутствует соответствующий перевод, система может использовать строку из библиотеки по умолчанию. Это может привести к неожиданному отображению интерфейса. Чтобы избежать подобных ситуаций, вы можете явно задать набор локалей, которые поддерживает ваше приложение. Тогда все ресурсы для неуказанных локалей не попадут в финальный APK, что не только снижает его размер, но и обеспечивает предсказуемость UI. Пример настройки в build.gradle.kts (application модуль): android { androidResources { // Автоматически сгенерировать список локалей на основе ресурсов проекта // По умолчанию false generateLocaleConfig = true // Либо явно указать поддерживаемые локали localeFilters.addAll(setOf("en", "ru", "es", "de")) } } Ранее Android Gradle Plugin позволял фильтровать ресурсы по различным группам квалификаторов (например, плотность экрана, ориентация и т.д.), однако начиная с AGP 8.0 эта возможность объявлена устаревшей и поддерживается только фильтрация по локалям. Это связано с тем, что App Bundle эффективно разделяет ресурсы по плотности экрана, а применение других фильтров использовалось крайне редко. #android#gradle#локализация#лучшиепрактики
Publié 12 févr.
🚀 Вышла первая Beta версия Room 2.7.0. Самое важное нововведение - переход на KMP с поддержкой Android, iOS и Desktop 🔥🔥🔥. Также на Android теперь можно использовать SQLite из артефакта, а не только тот что в Android ОС #android#kmp#jetpack#room#sqlite
Publié 12 févr.
📹Опасности в Android: уязвимости и защитные меры (42м) Увлекательное путешествие в мир безопасности Android! Разобрали самые интересные и коварные уязвимости, такие как Path Traversal, SQL-инъекции и Tapjacking. Но основное внимание уделили WebView: неправильной валидации данных, уязвимостям в библиотеке для парсинга URL, JavaScript Interface и загрузке диплинков. В докладе нет скучных терминов и монотонных объяснений. Вместо этого — захватывающая история поиска уязвимостей и их устранения, основанная на личном опыте при разработке приложений. Будет полезно всем тем, кто интересуется безопасностью Android-приложений. 📹 Версия на VK Video #android#безопасность#mobius
Hashtags
Publié 12 févr.
Не нужно делать UseCase для простых вызовов В статье приводится пример с получением данных через UseCase с простым вызовом метода из единственной зависимости. Конечно, есть принятый подход, но зачем делать лишний класс только потому, что "так принято". Мне не нравится делать так: class FetchMemesUseCaseImpl( private val memeRepository: MemeRepository ) : FetchMemesUseCase { override suspend operator fun invoke(): List<Meme> { return memeRepository.fetchMemes() } class MemeListViewModel( private val fetchMemesUseCase: FetchMemesUseCase ) : ViewModel() а на замену просто получать данные из репозитория в ViewModel: class MemeListViewModel( private val memeRepository: MemeRepository ) : ViewModel() Не делайте избыточный код просто потому, что так принято у всех остальных или потому, что так сказал какой-то умный эксперт по разработке. Оценивайте здраво, что вам нужно сейчас, и при изменении требований вводите новые элементы в архитектуре. #android#архитектура#лучшиепрактики
Publié 12 févr.
Большой обзор по использованию UseCase (EN,16м) в Android #android#архитектура
Hashtags
Publié 12 févr.
Google выпустила Codelab по погружению в разработку под Android XR - ОС на основе Android для устройств смешенной реальности #android#codelab#androidxr
Hashtags
Publié 11 févr.
Детские ошибки при сборке Gradle-приложений (10м) Статья с рекомендациями по ускорению Gradle сборки Android и не только проектов 👉 Прибегайте к инкрементальной сборке 👉 Настройте Gradle Build Cache 👉 Включите Gradle Configuration Cache. Нужно чтобы все подключенные плагины поддерживали Config Cache. Актуальный статус тут 👉 Используйте Gradle Daemon 👉 ABI vs non-ABI зависимости Всё очень базово и вы не найдете в статье рецепты, но точно подсветит базу #gradle#android#производительность
Publié 11 févr.
Развитие Android глазами разработчика(11м) Обзор как развивался с 2007 года и до новых дней: Ant, Eclispe, NetBeans, RoboGuiece, ActionBarSherlock, AsyncTask, EventBus, MVC, Android Studio, Gradle, Material Design, RxJava, Volley, Retrofit, MVP/MVVM, Dagger, Kotlin, Coroutines, Gradle Kotlin DSL, Jetpack Compose, MVI, #android
Hashtags
Publié 11 févr.
Выполнение запросов SQLite на множестве потоков может привести к замедлению вашего приложения🤯 Разработчик делает классный разбор того, как работают запросы SQLite в Android и как их оптимизировать. Статья - параллельность в Android SQLite (EN,11м) Основные выводы: 👉 Используйте забандленную версию SQLite (добавит около 1 Мб за каждый ABI) 👉 Если работает с несколькими БД через ROOM, то задавайте CoroutineContext или Executor для выполнения запросов 👉Больше полезного в статье, почитай. Она того стоит #android#room#sqlite#jetpack