Android Broadcast – Telegram
Android Broadcast
14.4K subscribers
3.68K photos
367 videos
11 files
6.1K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Демонстрация добавления перевода строк с помощь Gemini в Android Studio

Какие сценарии для AI в IDE вы еще бы хотели увидеть ?

#androidstudio #gemini
👍50🔥6🤯2
Не нужно делать 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 #архитектура #лучшиепрактики
🔥98👍34🤯11💯81👏1
В вашем коде есть UseCase в одну строку? (как в посте выше)
Anonymous Poll
50%
Да
29%
Нет
2%
Не знаю
15%
Не использую UseCase
0%
Не пишу код
4%
Не участвую в опросе
👍4
📹 Опасности в Android: уязвимости и защитные меры (42м)

Увлекательное путешествие в мир безопасности Android! Разобрали самые интересные и коварные уязвимости, такие как Path Traversal, SQL-инъекции и Tapjacking. Но основное внимание уделили WebView: неправильной валидации данных, уязвимостям в библиотеке для парсинга URL, JavaScript Interface и загрузке диплинков.

В докладе нет скучных терминов и монотонных объяснений. Вместо этого — захватывающая история поиска уязвимостей и их устранения, основанная на личном опыте при разработке приложений.

Будет полезно всем тем, кто интересуется безопасностью Android-приложений.

📹 Версия на VK Video

#android #безопасность #mobius
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍389🔥1
🚀 Вышла первая Beta версия Room 2.7.0. Самое важное нововведение - переход на KMP с поддержкой Android, iOS и Desktop 🔥🔥🔥. Также на Android теперь можно использовать SQLite из артефакта, а не только тот что в Android ОС

#android #kmp #jetpack #room #sqlite
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥52👍5
Как лишние ресурсы могут повлиять на 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 #локализация #лучшиепрактики
👍46🔥10
Forwarded from AvitoTech
This media is not supported in your browser
VIEW IN TELEGRAM
Три слова для привлечения внимания любого тимлида: OKR, планирование и мотивация команды 🚀

А теперь, пока вы тут: встречаемся 26 февраля на Avito TeamLead Drinkup #3!

Обсудим, как оценивать софт скиллы на собеседовании, растить и мотивировать команду и зачем ИИ в менеджменте. Без нетворка, конечно, не оставим — он будет после основной программы.

Для регистрации кликайте сюда. Осталось не так много мест! 🔥

#management_avitotech
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤖 Вышла вторая Beta Android 16

Вышла вторая из четырёх Beta версий Android 16. Улучшили работу с медиа, новые возможности Camera2 API, форсирование Edge-to-edge и другие. Как всегда расскажу отдельными постами про самые интересные фичи

#android16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍192
🤖 Появился новый Intent для съёмки Motion Photo

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
⚙️ Профессиональные функции 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3
🤖 Точная настройка цветовой температуры и оттенка в 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 #камера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👏2
🤖 Улучшения поддержки UltraHDR в Android 16

Появилась поддержка UltraHDR в HEIC, также работают на поддержкой в AVIF. Также добавили новые параметры UltraHDR из черновика стандарта ISO 21496-1

#android #android16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
🤖 Включение Edge-to-edge для всех приложений без возможности выключения

В 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
🤖 Режим совместимости работы приложения для работы с 16KB размером страницы памяти (для всех приложений)

В 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
👍26
Android Broadcast
В региональных настройках Android 16 пользователь сможет менять метрическую систему Теперь разработчикам в зависимости от настроек рекомендуется форматировать размеры в приложениях, но вот API из коробки для того не дали. #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
Вышел багфикс Android Studio Ladybug Feature Drop (сейчас в стабильном релизе)

#androidstudio
🔥20👍6
Секреты JVM: что происходит с ошибками под капотом (4м)

Статья с примерами кода, как JVM обрабатывает исключения на низком уровне, что такое таблица исключений и какие сценарии используются для вариантов try-catch и try-finally.

#jvm
👍18
🏝 9 лет назад вышла первая версия Kotlin 🎉🎉🎉

Кажется, я совсем недавно еще работал с бета-версиями первой версии Kotlin, писал приложения с расписанием для университета, где учился, чтобы попробовать эту технологию. Тогда была только поддержка JVM и проводились эксперименты с JS.

Сегодня Kotlin - это уже целая экосистема💪, которая позволяет писать приложения для нескольких платформ, имеет огромное сообщество разработчиков, а также официальную поддержку от команды 🤖 Android в Google. А как хорош Compose Multiplatform ❤️❤️❤️

Уже появилось поколение разработчиков, которые начали свой путь именно с Kotlin для разработки под Android 🤯🤯🤯

Поделитесь в комментариях под постом в @kotlin_broadcast своей историей знакомства с этим языком и тем, что вас привлекло в нем.

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5217👍7
🛒 Представили Play Service TrustedTime API

Для тех приложений, которым важно получать настоящее время, а не то, что установлено на устройстве пользователем, всегда приходилось решать вопрос, откуда его взять. Теперь же появилось стандартизированное 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