Android Broadcast
14.1K subscribers
3.47K photos
316 videos
11 files
5.78K links
Подборка новостей и статей для Android разработчиков.

Связь с автором @android_broadcast_bot
Реклама @android_broadcast_bot

РКН https://abdev.by/rkn_tg_ab
Download Telegram
Forwarded from Compose Broadcast
🔥⚙️ Compose iOS теперь Stable

Самый громкий и важный анонс в истории Compose Multiplatform с выходом версии 1.8.0

Что именно готово для продакшен применения
👉 Все основные фичи из Jetpack Compose работают на iOS
👉 Типобезопасная навигация с поддержкой deep link
👉 Гибкое управление ресурсами
👉 Поддержка iOS Accessibility API
👉 Ощущения от UI приложения как нативного (скрол, редактирование текста, drag-and-drop, адаптивный UI, навигация жестами и пр)
👉 Производительность UI на Compose близка к SwiftUI, но пока немного уступает

Новая эра мобильной разработки уже тут!

#compose #ios
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📹 Compose/iOS готов к продакшену? Прямой эфир с ответами на вопросы
Когда: четверг, 8 мая, 18:30 (GMT+3)

Буквально вчера вышел Compose iOS Stable и конечно же открывает возможности Android разработчиками по написанию мобильных приложений под обе платформы. Но всё ли так сладко, как заявляет JetBrains? Будем разбираться в этом с экспертом кто уже познал прелести продакшена!

👨‍💻 Эксперт - Никита, фуллстек Kotlin разработчик, автор проектов FlowMVI и respawn.pro. При анонсе Compose iOS Stable, его приложение было в официальном анонсе 🔥

👨‍💻 И еще одни эксперт - Чикишев Тимур, Senior Android разработчик в KTS. Начал пробовать Compose iOS еще до официального релиза. Успел адаптировать Android приложение с Compose на iOS, буквально на этой неделе сделали релиз

Задавайте свои вопросы в комментариях к посту, чтобы они были заданы на эфире

#android #compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Релиз Jetpack Navigation 2.9.0

🛠 Значительные переработки под капотом для улучшения поддержки KMP
👉 Добавлена поддержка обработки deep link из Kotlin Common кода
👉 Улучшения API

#jetpack #jetpackupdate #navigation #compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Как работает запрос фокуса в Compose (18М)

Продолжение серии статей. Во второй части погружаются в то как устроена работа фокуса на Compose, а именно что происходит при запросе фокуса, вызовом requestFocus(), и что делается под капотом этого API

В первой части рассмотрели API для работы с фокусом в Compose

#android #androidtv #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Compose Broadcast
Вышел Coil 3.2.0

Что нового
⬆️ Обновление Kotlin, Compose, Okio, Skiko, Coroutines и др зависимостей до актуальных версий
🛠 Исправление багов
👉 Compose артефакты требуют Java 11 и выше из-за перехода на Compose 1.8.0

#compose
Forwarded from Compose Broadcast
⚙️ Нужно ли проставлять аннотации @Stable и @Immutable сразу при написании кода? 🤔 Мой ответ — НЕТ!

Не стоит заниматься преждевременной оптимизацией. Пишите UI без оглядки на аннотации стабильности, а затем используйте инструменты анализа, чтобы определить, где действительно возникают лишние рекомпозиции и есть смысл оптимизировать типы.

Как анализировать рекомпозиции и пропуски?
👉 Используйте Layout Inspector в Android Studio (подробнее — в этом посте)
👉 Включайте отслеживание работы composable-функций в System Trace
👉 Можно воспользоваться библиотекой Compose Investigator, чтобы получать детальные логи по рекомпозициям

‼️ Важный нюанс:
Если вы используете типы из внешних библиотек или из модулей, где не подключён Compose Compiler, такие типы всегда считаются Unstable. Это может приводить к лишним рекомпозициям.

🚀 Strong Skipping Mode действительно упростил жизнь разработчикам, но старайтесь передавать в параметры Сomposable-функций только Stable или Immutable типы. Это позволит максимально эффективно использовать skipping и сделать UI более производительным.

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉 Jetpack Navigation 3 - навигация для Compose, написанная с нуля!

Будем честны Jetpack Navigation for Compose было никаким решением, до того как в ней появилась типобезопасная навигация, но и тогда остается много вопросов. Google решила что пора написать настоящую навигацию для Compose. Знакомьтесь - Jetpack Nav 3

Ключевые идеи в новой библиотеки: декларативное объявление + "навигация как состояние". Это полностью повторяет идеи что я заложил в NavState. Все это вылилось в принципы:
👉 Разработчик управляет back stack
👉 Возможность расширения и реализации собственной навигации на базовых компонентах
👉 Анимации из коробки
👉 Поддержка Predictive Back
👉 Поддержка адаптивных layout
👉 Сохранения состояния каждого элемент back stack, включая ViewModel
👉 Поддержка многомодульности

Пока представлена только первая альфа и библиотеки еще предстоит путь, как минимум обзавестись поддержкой KMP

🔗 Больше подробности в документации
🐱 Примеры использования на GitHub

Надо покопаться в ней и сделать видео на тему!

#jetpack #compose #навигация
Please open Telegram to view this post
VIEW IN TELEGRAM
Пример использования Jetpack Compose Nav3
// Определите route в вашем приложении
@Serializable data object Home
@Serializable data class Product(val id: String)

// Создайте back stack, указав начальный route
val backStack = remember { mutableStateListOf<Any>(ProductList) }

// NavDisplay отображает ваш back stack
// Каждый раз, когда back stack меняется, отображение обновляется.
NavDisplay(
backStack = backStack, // Простой List<Any>

// Укажите, что должно происходить при нажатии кнопки "назад"
onBack = { backStack.removeLastOrNull() },

// Провайдер записей преобразует маршрут в NavEntry,
// который содержит контент для этого маршрута.
entryProvider = { route ->
when (route) {
is Home -> NavEntry(route) {
Column {
Text("Добро пожаловать в Nav3")
Button(onClick = {
// Чтобы перейти к другому экрану,
// просто добавьте его в back stack
backStack.add(Product("123"))
}) {
Text("Нажмите для навигации")
}
}
}
is Product -> NavEntry(route) { Text("Продукт ${route.id}") }
else -> NavEntry(Unit) { Text("Неизвестный route: $route") }
}
}
)


#jetpack #compose #навигация
⚙️ Как растет производительность Jetpack Compose

Google показала как они снизили лаги UI на Jetpack Compose за 2 года. Тесте проводились на Pixel 3a

В Compose 1.9.0 появятся еще улучшения:
🚀 Приостановка композции
🚀 Фоновая подготовка текста для отображения
🚀 Улучшения предзагрузки в LazyLayout

#compose #производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Androidify - пример приложения со всем модным стеком от Google: Jetpack Compose, Gemini API через Firebase AI Logic SDK, CameraX, Media3, Material 3 Expressive и Navigation 3. Поддержка экранов разных размеров и складных устройств

Больше подробностей в статье и есть 🐱исходный код на GitHub

#android #compose #material3expressive #пример
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯 Более 60 процентов из топ 1000 Android приложений в 🛒 Google Play используют ⚙️ Jetpack Compose. Источник

❗️ ВАЖНО Используют, а НЕ полностью написали на нём UI

#andorid #compose #googleplay #googleio
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Улучшили навигацию между Compose Preview и Composable функцией с которой связано превью

#compose #androidstudio
🔨 Android Studio Narwhal FD позволит настроить ⚙️ Compose превью как вам будет угодно

#androidstudio #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🔨 Compose превью теперь может быстро менять размеры. Это изменение в Android Studio Narwhal FD позволит проще проверять адаптивность UI, за что так топит Google

#androidstudio #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Серия статей с разборами лучших практик для Jetpack Compose:
1️⃣ 5 Core Optimizations Every Developer Should Know (EN, 5м, альт. ссылка)
2️⃣ 5 Advanced Techniques for Ultra-Smooth Apps (EN, 8м, альт. ссылка)
3️⃣ The Expert’s Toolkit (EN, 8м, альт. ссылка)
4️⃣ Runtime Mastery & Fine-Tuning (EN, 8м, альт. ссылка)

#compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
📹 Mastering text input in Compose (EN, 18м)

Google выпустили шикарное видео, где показали лучшие практики работы с текстовыми полями в Compose — с примерами, API и лайфхаками.

В ролике разработчики на примере рассказывают:
👉 как использовать state-based TextField — новый подход к управлению вводом;
👉 зачем нужен SecureTextField и как задать требования к паролю;
👉 как работает Autofill API (да, теперь можно сохранять логины и OTP);
👉 как кастомизировать поле ввода OTP с помощью BasicTextField и decorator;
👉 как принимать GIF и изображения через drag & drop с новым contentReceiver;
👉 как использовать input/output трансформации для автоподстановки скобок и тире в номерах;

#android #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉🚀 Новая Jetpack Библиотека - Photo Picker

Новая библиотека Jetpack Photo Picker позволит перенести встраиваемый Photo Picker из Android 16 на более ранние версии Android. Благодаря Mainline системе встраиваемый Photo Picker будет доступен на Android 14 и выше как часть ОС, а вот на других версиях будет помогать библиотека Jetpack Photo Picker, работающая скорее всего на основе Google Play Services.

Важно - сразу сделали версию для View и Compose

#android #jetpack #android16 #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
🐱 Библиотека Navigation - навигационная библиотека для Compose под Android, построенная вокруг состояния. Open source решение от подписчика канала (задавате вопросы в комментариях и поддержите Звездой на 🐱 GitHub)

// Создаем NavigationManager и передаем в него начальное состояние
val navigationManager = rememberNavigationManager(
NavigationState(
NavigationHost(
hostName = "Main",
initialDestination = FirstSampleDestination(),
)
)
)

@Parcelize
class FirstSampleDestination : ComposeDestination {

@IgnoredOnParcel
override val composable: @Composable (Destination) -> Unit = {
FirstSamplePane()
}
}

// инициализируем навигацию в Compose
Navigation(
navigationManager = navigationManager
) {
Pane(rememberNavigationHost("Main"))
}

// Пример перехода
navigationManager.execute(
ForwardCommand(SecondSampleDestination(text))
)

@Parcelize
data class SecondSampleDestination(val text: String) : ComposeDestination {

@IgnoredOnParcel
override val composable: @Composable (Destination) -> Unit = { destination ->
SecondSamplePane((destination as SecondSampleDestination).text)
}
}


Делитесь в комментариях как вам решение и я тоже пошел обсуждать

#compose #навигация #opensource
Please open Telegram to view this post
VIEW IN TELEGRAM
🔨 В Android Studio Narwhal Feature Drop в Layout Inspector появится счетчик дочерних (Child) рекомпозиций

#androidstudio #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM