Как лишние ресурсы могут повлиять на UI вашего приложения
Библиотеки от Google и других популярных SDK часто содержат строки для десятков локалей, тогда как большинство приложений поддерживают всего 7–10 наиболее востребованных языков.
Механизм выбора ресурсов в Android устроен таким образом, что система подбирает наиболее подходящий ресурс с учётом квалификаторов (например, локали). Если для конкретной локали, установленной на устройстве, в вашем проекте отсутствует соответствующий перевод, система может использовать строку из библиотеки по умолчанию. Это может привести к неожиданному отображению интерфейса.
Чтобы избежать подобных ситуаций, вы можете явно задать набор локалей, которые поддерживает ваше приложение. Тогда все ресурсы для неуказанных локалей не попадут в финальный APK, что не только снижает его размер, но и обеспечивает предсказуемость UI.
Пример настройки в build.gradle.kts (application модуль):
Ранее Android Gradle Plugin позволял фильтровать ресурсы по различным группам квалификаторов (например, плотность экрана, ориентация и т.д.), однако начиная с AGP 8.0 эта возможность объявлена устаревшей и поддерживается только фильтрация по локалям. Это связано с тем, что App Bundle эффективно разделяет ресурсы по плотности экрана, а применение других фильтров использовалось крайне редко.
#android #gradle #локализация #лучшиепрактики
Библиотеки от 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 #локализация #лучшиепрактики
👍46🔥10
Forwarded from AvitoTech
This media is not supported in your browser
VIEW IN TELEGRAM
Три слова для привлечения внимания любого тимлида: OKR, планирование и мотивация команды 🚀
А теперь, пока вы тут: встречаемся 26 февраля на Avito TeamLead Drinkup #3!
Обсудим, как оценивать софт скиллы на собеседовании, растить и мотивировать команду и зачем ИИ в менеджменте. Без нетворка, конечно, не оставим — он будет после основной программы.
Для регистрации кликайте сюда. Осталось не так много мест!🔥
#management_avitotech
А теперь, пока вы тут: встречаемся 26 февраля на Avito TeamLead Drinkup #3!
Обсудим, как оценивать софт скиллы на собеседовании, растить и мотивировать команду и зачем ИИ в менеджменте. Без нетворка, конечно, не оставим — он будет после основной программы.
Для регистрации кликайте сюда. Осталось не так много мест!
#management_avitotech
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Вышла вторая из четырёх Beta версий Android 16. Улучшили работу с медиа, новые возможности Camera2 API, форсирование Edge-to-edge и другие. Как всегда расскажу отдельными постами про самые интересные фичи
#android16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤2
val intent = Intent(MediaStore.ACTION_MOTION_PHOTO_CAPTURE)
// или MediaStore.ACTION_MOTION_PHOTO_CAPTURE_SECURE
// Задаем куда сохранить
intent.putExtra(MediaStoreEXTRA_OUTPUT, uri)
// или Uri через ClidData
intent.setClipData(clipData)
context.startActivity(intent)
#android16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
В 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3
В 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 #камера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👏2
Появилась поддержка UltraHDR в HEIC, также работают на поддержкой в AVIF. Также добавили новые параметры UltraHDR из черновика стандарта ISO 21496-1
#android #android16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
В Android 15 есть флаг R.attr#windowOptOutEdgeToEdgeEnforcement, который позволял отключить для приложения "обязательное" включение Edge-to-Edge. В Android 16 флаг помечен как устаревший (deprecated) и система его игнорирует, а значит для вашего приложения включится режим отображения от края до края экрана.
#android #android16 #edgetoedge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34🤯21
В Android 15 была добавлена поддержка 16 KB страниц памяти для оптимизации производительности платформы. В Android 16 появился режим совместимости, который позволяет запускать некоторые приложения, созданные для 4 KB страниц памяти, на устройствах с 16 KB страницами.
👉 Если Android обнаружит, что в вашем приложении используются 4 KB выровненные страницы памяти, система автоматически включит режим совместимости и покажет пользователю диалоговое окно с уведомлением.
👉 Чтобы избежать отображения этого диалога при запуске приложения, добавьте в AndroidManifest.xml атрибут
<application android:pageSizeCompat="true" />👉 Однако для максимальной производительности, стабильности и надёжности рекомендуется адаптировать приложение к 16 KB страницам, касается тех у кого есть нативные библиотеки и код
Подробнее о том, как обновить приложения для поддержки 16 KB страниц памяти, читайте в блоге.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
This media is not supported in your browser
VIEW IN TELEGRAM
В региональных настройках Android 16 пользователь сможет менять метрическую систему
Теперь разработчикам в зависимости от настроек рекомендуется форматировать размеры в приложениях, но вот API из коробки для того не дали.
#android #android16
Теперь разработчикам в зависимости от настроек рекомендуется форматировать размеры в приложениях, но вот API из коробки для того не дали.
#android #android16
👍26
Android Broadcast
В региональных настройках Android 16 пользователь сможет менять метрическую систему Теперь разработчикам в зависимости от настроек рекомендуется форматировать размеры в приложениях, но вот API из коробки для того не дали. #android #android16
Пример кода как работать с разными метрическими системами в коде
#android #android16
val lengthInMeters = 10.0 // Базовое значение в метрах
textView.text = getLocalizedLength(this, lengthInMeters)
fun getLocalizedLength(
context: Context,
meters: Double,
locale: Locale = Locale.getDefault(),
): String {
if (isMetric(context)) {
return "%.2f m".format(locale, meters)
} else {
val feet = meters * 3.28084
return "%.2f ft".format(locale, feet)
}
}
fun isMetric(context: Context): Boolean {
// Получаем текущий регион
val locale = context.resources.configuration.locales[0]
return when (locale.country) {
// США, Либерия, Мьянма используют имперскую систему
"US", "LR", "MM" -> false
else -> true // Остальные — метрическую
}
}
#android #android16
🤯32👍10
Секреты JVM: что происходит с ошибками под капотом (4м)
Статья с примерами кода, как JVM обрабатывает исключения на низком уровне, что такое таблица исключений и какие сценарии используются для вариантов try-catch и try-finally.
#jvm
Статья с примерами кода, как JVM обрабатывает исключения на низком уровне, что такое таблица исключений и какие сценарии используются для вариантов try-catch и try-finally.
#jvm
👍18
Forwarded from Kotlin Multiplatform Broadcast
Кажется, я совсем недавно еще работал с бета-версиями первой версии Kotlin, писал приложения с расписанием для университета, где учился, чтобы попробовать эту технологию. Тогда была только поддержка JVM и проводились эксперименты с JS.
Сегодня Kotlin - это уже целая экосистема
Уже появилось поколение разработчиков, которые начали свой путь именно с Kotlin для разработки под Android 🤯🤯🤯
Поделитесь в комментариях под постом в @kotlin_broadcast своей историей знакомства с этим языком и тем, что вас привлекло в нем.
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥52❤17👍7
Для тех приложений, которым важно получать настоящее время, а не то, что установлено на устройстве пользователем, всегда приходилось решать вопрос, откуда его взять. Теперь же появилось стандартизированное API.
// Создаем клиента для работы с Trusted Time API
val initializeTrustedTimeClientTask: Task =
TrustedTime.createClient(activity)
val trustedTimeClient: TrustedTimeClient =
initializeTrustedTimeClientTask.await()
val curTime: Long? = trustedTimeClient.computeCurrentUnixEpochMillis()
// Используем системное время, если нет возможности получить из TrustedTime API
// Может не подойти в вашем случае
?: System.currentTimeMillis()
Поддерживается Android 5.0 и выше (SDK 21+)
#google #gms #android
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥108🤯11👍9
В приложении под Android (любой стек), которое вы разрабатываете, есть поддержка edge-to-edge ?
Anonymous Poll
11%
Что это?
52%
Да
23%
Нет
10%
На отдельных экранах
1%
Не пишу код/не пишу под Android
4%
Не участвую в опросе
👍2
🔥Пример разработки реального проекта на KMP и Compose
Лучший способ научиться чему-то - посмотреть, как это делают опытные разработчики, задавать вопросы и иметь доступ ко всем исходникам. Но где это взять и кому доверять?
Уже некоторое время я занимаюсь разработкой неофициального клиента для сервиса Frame.io, который используется теми, кто занимается монтажом видео. Скорее всего сам сервис вам будет неинтересен, но всё это я делаю на основе современного стека:
🏝 Kotlin Multiplatform с ⚙️ Compose Multiplatform для Android, iOS и Desktop
🤯Многомодульная архитектура
🔥 Автоматизация процессов вокруг разработки
Весь процесс разработки я освещаю:
🔨 Макеты в Figma от дизайнера
✉️ Telegram чат с обсуждением процесса
📹 Видео с обзорами всех этапов
🐱 Исходный код в GitHub с продакшен подходом в разработке
Чтобы получить доступ, нужно оформить подписку уровня "Senior" на Boosty🪙 или в Telegram ✉️ , а также можно купить доступ один раз и навсегда
#AndroidBroadcast #frameio #кодинг
Лучший способ научиться чему-то - посмотреть, как это делают опытные разработчики, задавать вопросы и иметь доступ ко всем исходникам. Но где это взять и кому доверять?
Уже некоторое время я занимаюсь разработкой неофициального клиента для сервиса Frame.io, который используется теми, кто занимается монтажом видео. Скорее всего сам сервис вам будет неинтересен, но всё это я делаю на основе современного стека:
🤯Многомодульная архитектура
🔥 Автоматизация процессов вокруг разработки
Весь процесс разработки я освещаю:
Чтобы получить доступ, нужно оформить подписку уровня "Senior" на Boosty
При достижении определенного прогресса в разработке проекта доступ по подписке будет закрыт и предоставляться будет только за единоразовую плату. Тем кто оформит подписку и будет оформлена на срок заморозки - автоматом получат доступ навсегда
#AndroidBroadcast #frameio #кодинг
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥10🤯3👏2💯1
31 марта 2025 закрывается App Center
Многие знают App Center как удобный способ распространения сборок Android и iOS приложений
#android #ios #microsoft
Многие знают App Center как удобный способ распространения сборок Android и iOS приложений
#android #ios #microsoft
🤯20👍9👎4🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Emerge's Build Distribution - замена App Center
Emerge's Build Distribution сделали бесплатным с ограничениями:
✅ 5 тысяч загруженных сборок в месяц
✅ Без ограничений на кол-во пользователей
✅ Интеграция SSO включена
✅ SDK для автообновлений
Поддерживается🤖 Android и iOS
#andorid #ios #инструменты
Emerge's Build Distribution сделали бесплатным с ограничениями:
✅ 5 тысяч загруженных сборок в месяц
✅ Без ограничений на кол-во пользователей
✅ Интеграция SSO включена
✅ SDK для автообновлений
Поддерживается
#andorid #ios #инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🤯6👎4
История(12м) как в Альфа-Банке сокращали размер JSON файла, который передается на устройство для работы SDUI. Решением стала шаблонизация для отказа от одинаковых блоков UI с разными данными
#оптимизация #json
#оптимизация #json
👎19👍9🤯3