Плагин предоставит вам AI-функции для автодополнения, пояснения кода, рефакторинга, генерации сообщений к коммитам и многого другого. Из России и Беларуси сервис работать не будет, но если вы настроите, то сможете использовать и бесплатный Gemini. Скорее всего, он будет лучше интегрирован.
Кроме того, сервис платный, даётся 7 дней пробного периода, что кажется очень мало для полноценной проверки.
#android #androidstudio #jetbrains #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
👎45🔥9👍7🤯1
В Android каждому приложению выделяется ограниченный объем оперативной памяти и это может стать неожиданной проблемой для разработчиков. Разберём, какие лимиты существуют и как на них можно повлиять.
Какие есть лимиты?
1. Heap Size (размер кучи) для кода, исполняющегося в JVM
- Android ограничивает объём памяти, доступный одному процессу (приложение может иметь их несколько).
- Лимит зависит от устройства: размера его оперативной памяти, разрешения и размера экрана, версии ОС и прочих характеристик.
- Узнать доступный объём можно так:
val maxMemoryMb = Runtime.getRuntime().maxMemory() / (1024 * 1024)
Log.d("MemoryInfo", "Max heap size: ${maxMemory}MB")
2. Large Heap Mode
- Можно попросить систему выделить больше памяти через задание в в AndroidManifest
android:largeHeap="true", но увеличение не гарантируется. Узнать доступный размер можно так:val activityManager = getSystemService<ActivityManager>()
val largeMemoryClass = activityManager.largeMemoryClass
Log.d("MemoryInfo", "Large Heap: ${largeMemoryClass}MB")
Для Pixel 9 Pro XL с 16 Гб оперативной памяти стандартный лимит - 512 Мб, а c флагом large heap - 1 Гб. Google Play никак не ограничивает вас в выставлении этого флага и сможете смело опубликоваться, но использовать опцию без явной причины не стоит!
Как можно использовать больше памяти?
✅ Запуск нескольких процессов
Каждый процесс имеет свой heap limit. Можно вынести часть логики в сервис с
android:process=":extra_process". Каждый Android компонент связан с определённым процессом и динамически из кода создать/задать не получится.✅ NDK (Native Code, C++)
Обход heap-лимитов возможен через выделение памяти в C++:
void* bigMemory = malloc(500 * 1024 * 1024); // 500MB
Но при этом важен контроль утечек памяти.
✅ Перенос части нагрузки на видеопамять
Можно использовать GPU для хранения и обработки данных, например:
- Текстуры и буферы в OpenGL/Vulkan
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
- Аппаратное декодирование видео через MediaCodec
val decoder = MediaCodec.createDecoderByType("video/avc")- Использование Hardware Bitmaps для рендеринга изображений
val options = BitmapFactory.Options().apply { inPreferredConfig = Bitmap.Config.HARDWARE }
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.image, options)❌ Злоупотребление Large Heap
Запрос большого heap-а не даёт гарантий – Android всё равно ограничит память при нехватке ресурсов. Некоторые производители вовсе игнорируют этот флаг из манифеста
#android #подкапотом
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍69❤5👎3💯2
🚀 Вышел Jetpack WindowManager 1.4 - библиотека с API для построения адаптивного UI в Material3 (можно применить и к другим UI Kit): WindowSizeClass, Activity embedding, WindowsInfoTracker и др.
Про изменения отдельными постами дальше
#jetpack #ui #material
Про изменения отдельными постами дальше
#jetpack #ui #material
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13👎3
Сделали рефакторинг 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👎10👍9😢2
👉 Изменение размера панелей теперь поддерживается из коробки
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👎7
This media is not supported in your browser
VIEW IN TELEGRAM
Пример изменения размера панелей с помощью нового API из Jetpack WindowManager 1.4
1🔥33👍5👎4
Добавили возможность получения больше о физическом состоянии складного устройства. Новое 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16👎5😢1
Сравнение Dagger 2, Dagger Hilt и Koin (4м)
Быстрый рассказ про популярные DI для Android. Полезно тем, кто выбирает свой первый DI или сомневается в выборе
#android #di
Быстрый рассказ про популярные DI для Android. Полезно тем, кто выбирает свой первый DI или сомневается в выборе
#android #di
👍52👎12🎉3
Media is too big
VIEW IN TELEGRAM
Обзор библиотеки Kotlin Inject - DI для KMP, API которого аналогично Dagger. В видео происходит демонстрация возможностей, сравнение с другими DI и личное мнение о том стоит ли использовать эту библиотеку в проде.
#видео #kmp #di
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍32👎9
В рамках 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35🔥11👎5
Google добавила поддержку мультимодального Gemini в Android Studio. Теперь можно загрузить мокап или диаграмму и получить код. Источник - @MishaalAndroidNews
#androidstudio #ai #gemini
#androidstudio #ai #gemini
👍19👎9
👉 финальное API и изменений не будет
👉 поведение ОС, влияющие на приложения, не будет меняться
👉 можно публиковать приложения в Google Play c поддержкой найсвежайшего Android (указать targetSdk)
#android16 #googleplay
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24👎5🎉2
В Android 16 добавили поддержку Auracast - технология беспроводного аудио-вещания на основе Bluetooth LE Audio. Она позволяет передавать звук на неограниченное количество совместимых устройств (наушников, колонок, слуховых аппаратов) одновременно, как радиотрансляция.
#android16 #bluetooth
#android16 #bluetooth
👍54👎3🔥2
Фон под текстом для обеспечения лучшей контрастности и читаемости - новая фича Android 16. Пользователь сможет включать в настройках, а разработчики узнать о статусе через Accessibility API
#android16
#android16
👍39👎12🤯10
Local Network Protection (LNP) - Новая фича для будущего Android. Позволит пользователю контролировать какие приложения могут иметь доступ в локальную сеть. Появится новое Runtime Permission, но потом. Разработчики уже могут потестировать через вызовы shell команд
#android16
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
#android16
👍25👎8❤1
Google представила новую библиотеку c фокусом на 2 основных областях:
👉 Форматирование даты и времени, следуя лучшим практикам, опираясь на настройки пользователя и предоставляя доступ на новых и старых версиях Android
👉 Backport android.icu.text.MessageFormat - API для подготовки строк для показа пользователю с опциональными аргументами
👉 Библиотека будет портировать новые i18n API на старые версии Android
#android #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍6👎4
#android #jetpack #navigation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19👎5❤1
Всё также идет подготовка к первому стабильному релизу Room с поддержкой KMP, самые важные:
🔥 Исправлено падение компилятора с NPE при обработке не JVM исходников через KSP
🛠 Исправлены Авто Миграции при добавление новой колонки в FTS таблице
#android #jetpack #room #sql #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉16👍15👎3❤1
Google выпустила обновленную библиотеку Jetpack Credentials 1.5.0, и вот главные изменения, которые вам стоит знать:
Теперь при использовании Credential Manager API вы можете связать запрос получения учетных данных (GetCredentialRequest) с конкретным UI-элементом вашего приложения (например, поле логина или пароля). В результате, после того как пользователь закроет основной селектор и перейдет к заполнению полей вручную, он увидит дополнительные предложения учетных данных прямо на клавиатуре или в выпадающем списке. Это значительно улучшит UX вашего приложения и облегчит процесс входа.
Новый тип RestoreCredential позволяет автоматически переносить учетные данные пользователя со старого устройства на новое при настройке Android. Если пользователь выберет ваше приложение для переноса, ему не придется заново вводить данные — все произойдет автоматически. Подробности тут.
Как здорово, что такие возможности появляются, но их проблема — полагаться на разработчиков, которые вряд ли станут затягивать это API.
#android #jetpack #backup
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35👎7
В последнее время я стал чаще выкладывать короткие видео в истории Telegram @android_broadcast, чтобы приносить больше пользы.
Прошу вас поддержать канал голосом, чтобы иметь возможность публиковать больше контента и лучше оформить канал.
Прошу вас поддержать канал голосом, чтобы иметь возможность публиковать больше контента и лучше оформить канал.
13👎32👍28🔥2
Forwarded from Kotlin Adept Notes (Alex Panov)
Мы с вами говорили про отличия между платформами, но что говорить о мультиплатформе, если даже на разных Android-устройствах могут быть отличия в поведении, и явным рекордсменом по количеству особенностей являются устройства Xiaomi 🧡
Сегодня поговорим про регулярные выражения и букву ё. Кто ее только не отменял, но Xiaomi пошли дальше всех.
К нам прилетел баг, что при введении ФИО буква ё не проходит валидацию по регулярному выражению. Первое, что приходит в голову, это, что мы написали кривой regex, ведь на самом деле, если использовать такое регулярное выражение
Дальше мы подумали, а что если клавиатура на Xiaomi использует какой-то другой символ ё и мы оказались правы. Действительно стандартная клавиатура использовала
Все дело в клавиатуре, которая выбрана по умолчанию, если поменять клавиатуру на Gboard, то все будет окей. Так что перед проверкой данных нам пришлось делать замену данного символа, чтобы пройти валидацию и на бекенде👍
Давайте порадуемся за Семëна с Xiaomi, теперь у него все будет хорошо🫡
#Android #Regex #Xiaomi
Сегодня поговорим про регулярные выражения и букву ё. Кто ее только не отменял, но Xiaomi пошли дальше всех.
К нам прилетел баг, что при введении ФИО буква ё не проходит валидацию по регулярному выражению. Первое, что приходит в голову, это, что мы написали кривой regex, ведь на самом деле, если использовать такое регулярное выражение
^[а-яА-Я]*$ то буква ё не попадает в этот диапазон и нужно определять ее отдельно, но нет, дело было не в этом.Дальше мы подумали, а что если клавиатура на Xiaomi использует какой-то другой символ ё и мы оказались правы. Действительно стандартная клавиатура использовала
\u00eb символ юникода вместо \u0401Все дело в клавиатуре, которая выбрана по умолчанию, если поменять клавиатуру на Gboard, то все будет окей. Так что перед проверкой данных нам пришлось делать замену данного символа, чтобы пройти валидацию и на бекенде
Давайте порадуемся за Семëна с Xiaomi, теперь у него все будет хорошо
#Android #Regex #Xiaomi
Please open Telegram to view this post
VIEW IN TELEGRAM
👍121