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é 25 sept.
🤖Адаптивность UI в Android-приложениях Android-приложения запускаются на экранах с разными размерами и ориентацией. Чтобы интерфейс выглядел хорошо в любых условиях, стоит учитывать несколько простых правил, которые я выработал за годы опыта 👇 1️⃣Не привязывайтесь к фиксированным размерам Фиче может быть выделен весь экран, часть окна или вообще маленький контейнер. Пусть она сама решает: занять всё пространство или только необходимое. Остальное — задача хоста, который через параметры (например, Modifier в Compose) подстроит отображение или сама правильно разместит (например, по центру). 2️⃣Используйте адаптивные компоненты Вместо LazyColumn — лучше LazyVerticalGrid, а для RecyclerView — GridLayoutManager. Они умеют подстраивать сетку под свободное место на экране. 3️⃣Закладывайтесь на увеличение текста и элементов Пользователь может менять скейл интерфейса: Google позволяет масштабировать всё, увеличивая DP → PX. Поэтому всегда предусмотрите скролл, если контента может стать больше. 4️⃣UI фичи не должен знать, где он окажется Фича отвечает только за свой UI. А вот приложение решает, как её показать: в одну панель или, например, в связке через ListDetailPaneScaffold, где на экране могут быть сразу несколько экранов. Даже если дизайнер подготовил макет только под смартфон в вертикали — попробуйте включить воображение. Немного гибкости и масштабирования дадут пользователям куда более удобный опыт без больших трудозатрат. 📚 Что почитать: - Практики по построению адаптивных приложений - Compose Material 3 Adaptive - Jetpack WindowManager - Как строить адаптивный UI через layout 💬 Делитесь в комментариях своими советами и болями адаптивности UI #android#ui#compose#adaptive#ux#material3
Publié 25 sept.
🚀Вышла новая Jetpack библиотека - Security State Provider (пока в статусе Альфа) Основная цель библиотеки — предоставить действительные (actionable) данные о состоянии безопасности устройства и его компонентов, в частности: 👉 Версии обновляемых компонентов (updateable system components). 👉 Наличие применённых исправлений безопасности (security patches / applied fixes). 👉 Общий “security state” — то есть агрегированное представление безопасности системы. То есть, библиотека даёт вам API, чтобы “спросить у Android”: насколько актуальна система, есть ли уязвимости, какие компоненты нуждаются в обновлении. Она не заменяет шифрование/криптографию (как, скажем, security-crypto), но с дополняет стек безопасности: помогает принимать решения на основании состояния платформы. #android#androidjetpack#безопасность
Publié 25 sept.
🤖Вышел Jetpack Window 1.5.0 Что нового: 👉WindowSizeClass появились разделения для больших (Large - от 1200 до 1600) и очень больших (XLarge - более 1600 dp) экранов 👉 Получение WindowMetrics теперь работает с Application Context, а не только с UI Context 👉 Добавили API для автоматического сохранения и восстановления статуса встраивания Activity при перезапуске процесса 👉 Удалили экспериментальное API WindowInsets #android#androidjetpack#jetpackupdate
Publié 24 sept.
🔨Как в Android Studio добавить собственный шаблоны файлов и шарить их между командой разработки (3м) Простой способ как ускорить свою разработку - генерация кода из шаблонов внутри IDE. В статье руководство как добавить свои собственные на основе File Templates #android#androidstudio
Hashtags
Publié 24 sept.
🤖Как написать свою библиотеку на C/C++ и работать с ней из Java/Kotlin кода в Android (11м) Рано или поздно любой разработчик сталкивается с C/C++ кодом в приложениях на разных уровнях: 1️⃣ Базовый уровень - работа с so файлами из подключенных библиотек 2️⃣ Уровень пользователя - вызов C/C++ кода библиотек из Java/Kotlin кода 3️⃣ Профи - написание C/C++ библиотека и использование их из Java/Kotlin кода Рекомендую вам почитать статью от разработчика из Яндекс Браузера, где много взаимодействия с C/C++ кодом. Автор освещает создания простой C/C++ библиотеки, как её собрать и встроить в код Android приложения через JNI. Java Native Interface (JNI) — это программный интерфейс, который позволяет коду на Java взаимодействовать с библиотеками, написанными на C, C++ и других языках. В Android он критически важен для выполнения ресурсоёмких операций и работы с нативным кодом. #android#jni#яндекс
Publié 23 sept.
🔨Вышла Canary версия следующей Android Studio Что в будущей версии Android Studio (подробнее тут) 👉Journeys for Android Studio - выполнение UI тестов, написаные на естественном языке 🔨Поддержка Backup и синхронизации настроек Android Studio ⭐️ Для крешей из Crashlytics будут предлагаться фиксы на основе AI 🔥 Android Studio позволит использовать локальные LLM 🔨 Возможность создания монохромной иконки приложения 🔨 Android Studio автоматом будет восстанавливать логи из LogCat на основе маппинга R8 #android#androidstudio
Hashtags
Publié 18 sept.
🤖🦢Пример написания библиотеки для Android на языке Swift (RU, 17м) В Swift 6 появилась возможность работать с Android NDK из Swift и всё это потом вызывать из Java при помощи JNI. Java Native Interface (JNI) – это мост который позволяет нативному коду обращаться к Java Virtual Machine (JVM). Когда вы пишете Java код, то вы используете Android SDK. Но когда вы используете языки как Swift или C++, которые не компилируются в Java байткод, вам уже нужен Android NDK для коммуникации с Java через JNI. Пример нативного кода #if os(Android) @_cdecl("Java_com_habr_swiftlib_myfirstandroidproject_SwiftInterface_initialize") public func initialize( envPointer: UnsafeMutablePointer<JNIEnv?>, clazzRef: jobject, callerRef: jobject ) { // Активируем Android logger LoggingSystem.bootstrap(AndroidLogHandler.taggedBySource) // Инициализируем JVM let jvm = envPointer.jvm() JNIKit.shared.initialize(with: jvm) // ДАЛЕЕ: кэшируем class loader // ДАЛЕЕ: пример `toString` // ДАЛЕЕ: пример `Task` } #endif Инструменты сгенерят вам код для работы из Java/Kotlin package com.habr.swiftlib.myfirstandroidproject object SwiftInterface { init { System.loadLibrary("MyFirstAndroidProject") } external fun initialize(caller: Any) } #android#ndk#swift
Publié 17 sept.
🖌Примеры адаптивного дизайна от команды Android в Figma Команда Android Дизайна выкатила на своей странице в фигме дизайн 4 приложений, который адаптирован под разны размеры экрана: смартфоны, маленькие и большие планшеты, складные устройства, ноутбуки и телевизоры Рекомендую всем посмотреть, чтобы посмотреть на подходы, а они на самом деле просты. Если хотите отдельный пост про техники адаптации дизайна - ставьте ❤️ #android#дизайн#adaptive#ui#material
Publié 17 sept.
🤖Обновили документацию по использования keep правил для R8 (минификатор кода по умолчанию) Какие разделы теперь доступны 👉Зачем нужны keep правила 👉Глобальные правила (для всего кода) и правила для конкретного кода 👉Лучшие практики 👉Примеры использования правил Явно задекларировали - НЕ ДЕЛАЙТЕ правило с сохранением кода всего пакета: -keep class com.example.pkg.** { *; } Мне не хватает описания списка всех оптимизаций кода, которые делает R8, и как писать код так, чтобы они срабатывали (например, такая особенность есть при загрузке классов через Service Loader, чтобы минификатор заменил создания через рефлексию на простой вызов конструктора) #android#r8
Publié 12 sept.
🤖Важность HDR в приложениях для передачи естественных цветов Почитал интересную статью от Google про важность использования HDR. Самое важное - HRD не только про яркость, а именно про правильность передачи цветов в приложениях, особенно когда дело касается фото. В Android 15 появилось API для контроля того смешивания HDR и SDR контента: // Требуется, чтобы Windows учитывало желаемый HDR headroom. // Обратите внимание, что эквивалентный API в SurfaceView НЕ требует // COLOR_MODE_HDR для ограничения headroom, // если на SurfaceView отображается HDR-контент. window.colorMode = ActivityInfo.COLOR_MODE_HDR // разные значения headroom могут // использоваться в зависимости от // желаемого headroom контента // И особенностей UI-дизайна приложения. window.desiredHdrHeadroom = when { /* только SDR */ -> 0f /* Смешанный, в основном SDR */ -> 1.5f /* Смешанный, в основном HDR */ -> 3f /* только HDR */ -> 5f else -> 0f } #android#hdr#android15
Hashtags
Publié 11 sept.
📸Вышла Jetpack CameraX 1.5.0 с новыми фичами и готовым UI для видоискателя камеры Что нового 🤖Camera Viewfinder - первый релиз стабильный релиз UI для показа камеры с простым встраиванием в UI (View и Compose) ⚙️ Первый релиз androidx.camera:camera-compose - работа с камерой в Compose UI 🛠 Исправление багов // Пример View Finder в Compose val currentSurfaceRequest: SurfaceRequest by viewModel.surfaceRequests.collectAsState() val coordinateTransformer = remember { MutableCoordinateTransformer() } CameraXViewfinder( surfaceRequest = surfaceRequest, // Can also use EMBEDDED implementationMode = ImplementationMode.EXTERNAL, modifier = modifier.pointerInput(Unit) { detectTapGestures { with(coordinateTransformer) { val surfaceCoords = it.transform() viewModel.focusOnPoint( surfaceRequest.resolution, surfaceCoords.x, surfaceCoords.y ) } } }, coordinateTransformer = coordinateTransformer ) #android#камера#jetpack#compose
Publié 11 sept.
🚀 Вышел Room 2.8.0 Самая важная (она и единственная) фича свежего релиза - получение SupportSQLiteDatabase, являющегося оберткой над RoomDatabase с SQLiteDriver. Честно, не знаю кому это пригодится, поэтому будет полезно узнать от вас в комментариях практический опыт. Менее масштабные, но всё же важные изменения: 👉 minSdk подняли с 21 до 23 👉 Добавили поддержку KMP таргетов: watchOS и tvOS 🛠 Исправили баги #android#jetpack#androidjetpack
Hashtags