TGViewer
Channel Public Channel
Android Broadcast

Android Broadcast

@android_broadcast

Подборка новостей и статей для Android разработчиков.

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

РКН https://abdev.by/rkn_tg_ab #MQRZR
Subscribers
14.6K
Photos
3.9K
Videos
399
Links
6.3K

Showing posts older than #8812 · Back to latest

Older Posts 20 shown
Post #8810 7.11K
🔨 Play Billing Lab — крутой инструмент от Google, который поможет быстро внедрить и протестировать покупки в Android-приложениях без лишних сложностей.

Теперь не нужно ломать голову над тестированием подписок или внутренних покупок вручную. Play Billing Lab позволяет:

✅ Создавать и управлять тестовыми покупками
✅ Легко симулировать разные сценарии оплаты
✅ Быстро находить ошибки интеграции Play Billing Library
✅ Проверять поведение приложения при отмене подписок, возобновлении и других сценариях

И всё это — без реальных платежей и рисков для пользователей.

Приложение прошло мимо меня, а вы уже пользовались этим инструментом? Делитесь впечатлениями и опытом в комментариях!

#android #googleplay
  • 👍 60
  • 🤯 1
Post #8809 6.22K

Forwarded from Kotlin Adept Notes (Alex Panov)

Мы с вами говорили про отличия между платформами, но что говорить о мультиплатформе, если даже на разных Android-устройствах могут быть отличия в поведении, и явным рекордсменом по количеству особенностей являются устройства Xiaomi 🧡

Сегодня поговорим про регулярные выражения и букву ё. Кто ее только не отменял, но Xiaomi пошли дальше всех.

К нам прилетел баг, что при введении ФИО буква ё не проходит валидацию по регулярному выражению. Первое, что приходит в голову, это, что мы написали кривой regex, ведь на самом деле, если использовать такое регулярное выражение ^[а-яА-Я]*$ то буква ё не попадает в этот диапазон и нужно определять ее отдельно, но нет, дело было не в этом.

Дальше мы подумали, а что если клавиатура на Xiaomi использует какой-то другой символ ё и мы оказались правы. Действительно стандартная клавиатура использовала \u00eb символ юникода вместо \u0401

Все дело в клавиатуре, которая выбрана по умолчанию, если поменять клавиатуру на Gboard, то все будет окей. Так что перед проверкой данных нам пришлось делать замену данного символа, чтобы пройти валидацию и на бекенде 👍

Давайте порадуемся за Семëна с Xiaomi, теперь у него все будет хорошо 🫡

#Android #Regex #Xiaomi
  • 👍 121
Post #8808 6.17K
В последнее время я стал чаще выкладывать короткие видео в истории Telegram @android_broadcast, чтобы приносить больше пользы.

Прошу вас поддержать канал голосом, чтобы иметь возможность публиковать больше контента и лучше оформить канал.
  • 👎 32
  • 👍 28
  • 🔥 2
Post #8807 6.73K
🚀 Jetpack Credentials 1.5.0 позволяют переносить учетные данные на новое Android-устройство.

Google выпустила обновленную библиотеку Jetpack Credentials 1.5.0, и вот главные изменения, которые вам стоит знать:

🤖 Вторичный интерфейс для выбора учетных данных
Теперь при использовании Credential Manager API вы можете связать запрос получения учетных данных (GetCredentialRequest) с конкретным UI-элементом вашего приложения (например, поле логина или пароля). В результате, после того как пользователь закроет основной селектор и перейдет к заполнению полей вручную, он увидит дополнительные предложения учетных данных прямо на клавиатуре или в выпадающем списке. Это значительно улучшит UX вашего приложения и облегчит процесс входа.

🤖 Восстановление учетных данных (Restore Credentials)
Новый тип RestoreCredential позволяет автоматически переносить учетные данные пользователя со старого устройства на новое при настройке Android. Если пользователь выберет ваше приложение для переноса, ему не придется заново вводить данные — все произойдет автоматически. Подробности тут.

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

#android #jetpack #backup
  • 👍 35
  • 👎 7
Post #8805 6.58K
🚀 Jetpack Room 2.7.0 RC02 с фиксами

Всё также идет подготовка к первому стабильному релизу Room с поддержкой KMP, самые важные:
🔥 Исправлено падение компилятора с NPE при обработке не JVM исходников через KSP
🛠 Исправлены Авто Миграции при добавление новой колонки в FTS таблице

#android #jetpack #room #sql #kmp
  • 🎉 16
  • 👍 15
  • 👎 3
  • ❤ 1
Post #8804 7.14K
🚀 Jetpack Navigation 2.8.9 получила исправление регресса работы Deep Link в версии 2.8.8

#android #jetpack #navigation
  • 👍 19
  • 👎 5
  • ❤ 1
Post #8803 7.15K
🚀 Jetpack Core i18n 1.0 - библиотека для качественной интернационализации приложения

Google представила новую библиотеку c фокусом на 2 основных областях:
👉 Форматирование даты и времени, следуя лучшим практикам, опираясь на настройки пользователя и предоставляя доступ на новых и старых версиях Android
👉 Backport android.icu.text.MessageFormat - API для подготовки строк для показа пользователю с опциональными аргументами
👉 Библиотека будет портировать новые i18n API на старые версии Android

#android #jetpack
  • 🔥 27
  • 👍 6
  • 👎 4
Post #8802 6.63K
Local Network Protection (LNP) - Новая фича для будущего Android. Позволит пользователю контролировать какие приложения могут иметь доступ в локальную сеть. Появится новое Runtime Permission, но потом. Разработчики уже могут потестировать через вызовы shell команд
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>


#android16
  • 👍 25
  • 👎 8
  • ❤ 1
Post #8801 6.63K
Фон под текстом для обеспечения лучшей контрастности и читаемости - новая фича Android 16. Пользователь сможет включать в настройках, а разработчики узнать о статусе через Accessibility API

#android16
  • 👍 39
  • 👎 12
  • 🤯 10
Post #8800 6.06K
В Android 16 добавили поддержку Auracast - технология беспроводного аудио-вещания на основе Bluetooth LE Audio. Она позволяет передавать звук на неограниченное количество совместимых устройств (наушников, колонок, слуховых аппаратов) одновременно, как радиотрансляция.

#android16 #bluetooth
  • 👍 54
  • 👎 3
  • 🔥 2
Post #8799 5.62K
🤖 Вышла третья бета Android 16 и новая версия ОС достигла Platform Stability, а это значит
👉 финальное API и изменений не будет
👉 поведение ОС, влияющие на приложения, не будет меняться
👉 можно публиковать приложения в Google Play c поддержкой найсвежайшего Android (указать targetSdk)

#android16 #googleplay
  • 👍 24
  • 👎 5
  • 🎉 2
Post #8797 5.53K
‼️ Vulkan становится обязательным для Android

В рамках Game Developer Conference Google объявила что все чипы, которые будут выходить с Android 17+ (выйдет летом 2026 года) как первый релиз будут обязаны поддерживать Vulkan API 1.4.

Вендоры при выпуске устройств с Android 17+ (не обновления) должны будут поддерживать ANGLE

ANGLE (Almost Native Graphics Layer Engine) — это реализация OpenGL ES поверх Vulkan или Direct3D, используемая в Android для запуска приложения без поддержки Vulkan


#android #android17
  • 👍 35
  • 🔥 11
  • 👎 5
Post #8795 5.84K
📺 Обзор Kotlin Inject или как будет выглядеть Dagger на Kotlin Multiplatform

Обзор библиотеки Kotlin Inject - DI для KMP, API которого аналогично Dagger. В видео происходит демонстрация возможностей, сравнение с другими DI и личное мнение о том стоит ли использовать эту библиотеку в проде.

#видео #kmp #di
  • 👍 32
  • 👎 9
Post #8794 5.99K
Сравнение Dagger 2, Dagger Hilt и Koin (4м)

Быстрый рассказ про популярные DI для Android. Полезно тем, кто выбирает свой первый DI или сомневается в выборе

#android #di
  • 👍 52
  • 👎 12
  • 🎉 3
Post #8793 5.46K
🚀 Улучшили API для работы с Foldable

Добавили возможность получения больше о физическом состоянии складного устройства. Новое API WindowInfoTracker.supportedPostures позволит понять поддерживает ли устройство режим tabletop (устройство частично сложено, складной экран разделён на 2 зоны)

val currentSdkVersion = WindowSdkExtensions.getInstance().extensionVersion
val message =
if (currentSdkVersion >= 6) {
val supportedPostures = WindowInfoTracker.getOrCreate(LocalContext.current).supportedPostures
buildString {
append(supportedPostures.isNotEmpty())
if (supportedPostures.isNotEmpty()) {
append(" ")
append(
supportedPostures.joinToString(
separator = ",", prefix = "(", postfix = ")"))
}
}
} else {
"N/A (WindowSDK version 6 is needed, current version is $currentSdkVersion)"
}


#jetpack #android #foldable
  • 👍 16
  • 👎 5
  • 😢 1
Post #8792 5.03K
Пример изменения размера панелей с помощью нового API из Jetpack WindowManager 1.4
  • 🔥 33
  • 👍 5
  • 👎 4
Post #8791 5.05K
🚀 Обновления Activity Embedding

👉 Изменение размера панелей теперь поддерживается из коробки
val splitAttributesBuilder: SplitAttributes.Builder = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.33f))
.setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)

if (WindowSdkExtensions.getInstance().extensionVersion >= 6) {
splitAttributesBuilder.setDividerAttributes(
DividerAttributes.DraggableDividerAttributes.Builder()
.setColor(getColor(context, R.color.divider_color))
.setWidthDp(4)
.setDragRange(
DividerAttributes.DragRange.DRAG_RANGE_SYSTEM_DEFAULT)
.build()
)
}
val splitAttributes: SplitAttributes = splitAttributesBuilder.build()


👉 Управление затемнением интерфейса под диалогом диалога

👉 Возможность закрепить Activity Task (набор Activity) по id в части экрана
fun pinActivityStackExample(taskId: Int) {
val splitAttributes: SplitAttributes = SplitAttributes.Builder()
.setSplitType(SplitAttributes.SplitType.ratio(0.66f))
.setLayoutDirection(SplitAttributes.LayoutDirection.LEFT_TO_RIGHT)
.build()

val pinSplitRule = SplitPinRule.Builder()
.setDefaultSplitAttributes(splitAttributes)
.build()

SplitController.getInstance(applicationContext)
.pinTopActivityStack(taskId, pinSplitRule)
}


#jetpack #ui #material #activity
  • 👍 7
  • 👎 7
Post #8790 4.99K
🚀 Изменения в WindowSizeClass

Сделали рефакторинг API, чтобы оно позволило добавлять собственные значения в будущем (помимо NORMAL, LARGE, EXPANDED), а также отказались от WindowWidthSizeClass и WindowHeightSizeClass.
// Было. Теперь deprecated 

val sizeClass = WindowSizeClass.compute(widthDp, heightDp)
when (sizeClass.widthSizeClass) {
COMPACT -> doCompact()
MEDIUM -> doMedium()
EXPANDED -> doExpanded()
else -> doDefault()
}


// Стало в 1.4
val sizeClass = WindowSizeClass.BREAKPOINTS_V1
.computeWindowSizeClass(widthDp, heightDp)


// Проверяем от самого большого размера к наименьшему
when {
sizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_EXPANDED_LOWER_BOUND) -> {
doExpanded()
}
sizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_MEDIUM_LOWER_BOUND) -> {
doMedium()
}
else -> {
// Ветка по умолчанию должна быть для
// самого маленького поддерживаемого UI
doCompact()
}
}


#jetpack #material #adaptive #ui
  • 👎 10
  • 👍 9
  • 😢 2
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →