Forwarded from Android Broadcast
Всем кто разрабатывает под Android TV возрадуйтесь - первая Beta Jetpack Tv-Material 1.0 на Compose
#androidtv #compose #material #дизайн #jetpack #jetpackupdate
#androidtv #compose #material #дизайн #jetpack #jetpackupdate
👍13👏10🎉2
Вышел Compose Multiplatform 1.6.10:
👉 Экспериментальная поддержка Lifecycle и ViewModel. Подробности тут
👉 Экспериментальная поддержка Jetpack Navigation (версия 2.7.0). Пример тут
👉 Compose ресурсы стали поддерживать многомодульные проекты и публикацию библиотек, но надо использовать Kotlin 2.0.0
👉 При миграции на Kotlin 2.0 надо использовать дополнительный Gradle плагин
👉 Локализовали строки в модулях
Изменения в каждой платформе отдельными постами в @compose_broadcast
#compose #jetpack
👉 Экспериментальная поддержка Lifecycle и ViewModel. Подробности тут
👉 Экспериментальная поддержка Jetpack Navigation (версия 2.7.0). Пример тут
👉 Compose ресурсы стали поддерживать многомодульные проекты и публикацию библиотек, но надо использовать Kotlin 2.0.0
👉 При миграции на Kotlin 2.0 надо использовать дополнительный Gradle плагин
org.jetbrains.kotlin.plugin.compose. Руководство по миграции тут👉 Локализовали строки в модулях
ui, material и material3Изменения в каждой платформе отдельными постами в @compose_broadcast
#compose #jetpack
🎉27👍6🏆4
Обзор того что будет релизнуто в Compose 1.7.0
👉 Shared element transitions
👉 Анимации элементов в LazyColumn и LazyRow
👉 AnnotatedString.fromHtml() - конвертирование Html в AnnotatedString
👉 ContextualFlowRow и ContextualFlowColumn - layout с композицей только видимого на экране контента, а для контента что не вместилось показываете индикатор элементов что не влезли
👉 Улучшение производительности
👉 Больше стабильного API
👉 Strong skipping mode будет включен по умолчанию в Compiler 2.0.20 и чаще будет пропускать рекомпозицию. Нужно будет ставить меньше аннотаций
Что еще
👉 Типобезопасная навигация в Navigation Compose 2.8.0
👉 Поддержка Compose в Jetpack CameraX
#compose #kotlin2 #навигация #jetpack #анимация
👉 Shared element transitions
👉 Анимации элементов в LazyColumn и LazyRow
👉 AnnotatedString.fromHtml() - конвертирование Html в AnnotatedString
👉 ContextualFlowRow и ContextualFlowColumn - layout с композицей только видимого на экране контента, а для контента что не вместилось показываете индикатор элементов что не влезли
👉 Улучшение производительности
👉 Больше стабильного API
👉 Strong skipping mode будет включен по умолчанию в Compiler 2.0.20 и чаще будет пропускать рекомпозицию. Нужно будет ставить меньше аннотаций
Stable и ImmutableЧто еще
👉 Типобезопасная навигация в Navigation Compose 2.8.0
👉 Поддержка Compose в Jetpack CameraX
#compose #kotlin2 #навигация #jetpack #анимация
🔥26👍3
Стали доступны записи докладов KotlinConf'24. Доклады (10 видео) по Compose собрал в один плейлист на YouTube чтобы было удобно смотреть
#kotlinconf24 #compose #jetpack #производительность @compose_broadcast
#kotlinconf24 #compose #jetpack #производительность @compose_broadcast
❤28👍16🔥5
Forwarded from Android Broadcast
Media is too big
VIEW IN TELEGRAM
Видео про то как вставить Fragment в Compose с применением библиотеки fragment-compose (уже стабильная версия 1.8)
Почитать про использование Fragment в Compose можно в документации
#compose #fragment #android #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25
Рассказ про типобезопасную навигацию для Compose (EN,3м), какой она стала в Jetpack Navigation 2.8.0. Это всё будет работать и в Compose MP
#compose #android #jetpack #kmp
#compose #android #jetpack #kmp
👍23🔥1
Вышел Compose Material3 Adaptive 1.1.0
👉 ListDetailPaneScaffold и SupportingPaneScaffold добавили поддержку изменения разделителя между панелям жестом в UI и программистом из кода
👉 NavigableListDetailPaneScaffold и NavigableSupportingPaneScaffold теперь поддерживают predictive back. Также можно использовать ThreePaneScaffoldPredictiveBackHandler для поддержки predictive back с вашей собственной реализацией scaffold
👉 AnimatedPane теперь позволит задать разные движения для переключения панелей
#compose #jetpack
👉 ListDetailPaneScaffold и SupportingPaneScaffold добавили поддержку изменения разделителя между панелям жестом в UI и программистом из кода
👉 NavigableListDetailPaneScaffold и NavigableSupportingPaneScaffold теперь поддерживают predictive back. Также можно использовать ThreePaneScaffoldPredictiveBackHandler для поддержки predictive back с вашей собственной реализацией scaffold
👉 AnimatedPane теперь позволит задать разные движения для переключения панелей
#compose #jetpack
👍16
// Подключайте BOM для обновления до актуальных версиях
implementation("androidx.compose:compose-bom-beta:2025.03.01")
#compose #jetpack #android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
Forwarded from Android Broadcast
🛠 Значительные переработки под капотом для улучшения поддержки KMP
👉 Добавлена поддержка обработки deep link из Kotlin Common кода
👉 Улучшения API
#jetpack #jetpackupdate #navigation #compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
В Compose 1.9.0 (пока в альфа) добавили новый Modifier - keepScreenOn(), который будет держать экран включенным, пока Composable функция будет частью композиции
#jetpack
Box(
modifier = Modifier.keepScreenOn()
){
...
}
#jetpack
❤71👍50🔥2
Forwarded from Android Broadcast
🎉 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 #навигация
Будем честны Jetpack Navigation for Compose было никаким решением, до того как в ней появилась типобезопасная навигация, но и тогда остается много вопросов. Google решила что пора написать настоящую навигацию для Compose. Знакомьтесь - Jetpack Nav 3
Ключевые идеи в новой библиотеки: декларативное объявление + "навигация как состояние". Это полностью повторяет идеи что я заложил в NavState. Все это вылилось в принципы:
👉 Разработчик управляет back stack
👉 Возможность расширения и реализации собственной навигации на базовых компонентах
👉 Анимации из коробки
👉 Поддержка Predictive Back
👉 Поддержка адаптивных layout
👉 Сохранения состояния каждого элемент back stack, включая ViewModel
👉 Поддержка многомодульности
Пока представлена только первая альфа и библиотеки еще предстоит путь, как минимум обзавестись поддержкой KMP
🔗 Больше подробности в документации
#jetpack #compose #навигация
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥43👍9❤1
Forwarded from Android Broadcast
Media is too big
VIEW IN TELEGRAM
Месяц назад Google анонсировала навигацию специально разработанную под Compose и которая должна решить все боли. В видео показываю её возможности, делюсь своим мнение и рассказываю про недочеты, которые надеюсь что решат до стабильного релиза
#AndroidBroadcast #navigation #jetpack #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33❤3🤔2
Подкючайте артефакт
org.jetbrains.androidx.navigation3:navigation3-ui:1.0.0-alpha01 в common код и можете пробоватьЖдем актуализации до свежей альфа версии, а также адаптивные layout и интеграцию с ViewModel
#compose #kmp #naviation #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥4🤔2
This media is not supported in your browser
VIEW IN TELEGRAM
Решение использует dev сборки Jetpack Navigation 3 для Compose Multiplatform
#compose #jetpack #navigation3 #cmp #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥47👍9❤3
Опубликовали org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0-alpha03 - вариант lifecycle-viewmodel-navigation3 с поддержкой Compose Multiplatform
#compose #cmp #jetpack #navigation3
#compose #cmp #jetpack #navigation3
👍24
Появилась реализация навигации под Web-браузер, совместимая с Jetpack Navigation 3 и интегрированная с нативной историей браузера. Автор — Костя Цховребов из JetBrains (KMP-команда).
Теперь Web-приложения на Compose Multiplatform могут работать с привычным поведением браузера: кнопки Back/Forward, корректное управление историей, восстановление состояния и предсказуемая работа нескольких экранов.
Поддерживаются две стратегии навигации:
👉 Chronological - Классическая браузерная модель: линейный переход по посещённым состояниям (Back/Forward).
👉 Hierarchical - Мобильная модель навигации, имитирующая структуру экранов и вложенную иерархию — аналогично Android-приложениям.
🧪 Обе стратегии можно сравнить в онлайн-демо
Пример использования Chronological-навигации
@Composable
fun App() {
val backStack = remember { mutableStateListOf<Any>(Root) }
ChronologicalBrowserNavigation(
backStack = backStack,
saveKey = { key ->
when (key) {
is Root -> buildBrowserHistoryFragment("root")
is Profile -> buildBrowserHistoryFragment(
"profile",
mapOf("id" to key.id.toString())
)
else -> null
}
},
restoreKey = { fragment ->
when (getBrowserHistoryFragmentName(fragment)) {
"root" -> Root
"profile" -> Profile(
getBrowserHistoryFragmentParameters(fragment)
.getValue("id")
?.toInt() ?: error("id is required")
)
else -> null
}
}
)
NavDisplay(backStack) { /* ... */ }
}
Navigation3 Browser кажется важным шагом для формирования единой модели навигации в Compose Multiplatform: Android → Desktop → Web.
Это упростит мультиплатформенную архитектуру и сделает перенос логики между платформами гораздо чище.
#Kotlin #Compose #KMP #CMP #WEB #AndroidJetpack #Jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍11🔥3🤔3
🔥 Remote Compose — новый взгляд на Server-Driven UI в Jetpack Compose
В AndroidX Jetpack появилась новая экспериментальная библиотека
Remote Compose позволяет создавать и рендерить интерфейсы Jetpack Compose удалённо, без пересборки и релиза приложения.
UI генерируется на сервере, сериализуется в компактный бинарный документ и воспроизводится на устройстве.
Remote Compose открывает возможности, которые раньше требовали релиза приложения:
⚡️ Мгновенные A/B-тесты — вариации интерфейса меняются на сервере, без обновлений.
🎨 Обновление дизайна в реальном времени — карточки товаров, баннеры, сезонные темы.
📰 Динамические контентные экраны — новости, акции, спецпроекты, которые появляются мгновенно.
🧪 Фичи без мусора — нет необходимости тянуть все варианты экрана в бинарник.
Архитектура Remote Compose состоит из двух частей:
1️⃣ Создание документа
На сервере вы пишете обычные composable-функции — либо используете специальные Remote* элементы (RemoteColumn, RemoteText и др.).
Библиотека перехватывает draw-операции Compose и превращает UI в бинарный документ. Получается самодостаточный «UI-файл», который можно отправить на клиент.
2️⃣ Воспроизведение документа
На устройстве этот документ «проигрывается» плеером:
👉 есть Compose-плеер — для современных приложений;
👉 есть Android View-плеер — для старых архитектур.
Плеер интерпретирует более 90 низкоуровневых операций (рисование, layout, модификаторы, state), обеспечивая реальную нативную отрисовку, без WebView и без компонентов, которые нужно заранее описывать в приложении.
Почему это лучше JSON или WebView
❌ JSON-подход требует схем, ограничивает сложные эффекты, анимации и кастомные компоненты.
❌ WebView — это отдельный процесс, разная визуальная стилистика, тяжёлое потребление памяти и уязвимости
Remote Compose передаёт не структуру компонентов, а реальные команды рисования. Поэтому любое, самое сложное Compose-UI — будет воспроизведено точно так, как вы его задали.
Базовые принципы Remote Compose
👉 Документность — UI становится бинарным документом, который можно кешировать, версионировать, отправлять по сети.
👉 Платформенная независимость — один документ можно рендерить на телефоне, планшете, складном устройстве и даже часах.
👉 Отделение визуального уровня от логики — клиенту не нужно знать о ваших composable-функциях, ViewModel, DI и т.п.
👉 Двусторонняя связь — клики и события возвращаются на клиент, который решает, что делать (навигировать, логировать, изменять состояние).
👉 Поддержка анимаций и выражений — значения могут вычисляться по времени, переменным, условиям.
Для большинства приложений оптимальная модель — гибридная:
📱 основная навигация + критические экраны в “локальном Compose”,
⚙️ динамические зоны — через Remote Compose.
Если Remote Compose будет развиваться так же активно, как Compose в своё время, это может стать стандартом для динамических интерфейсов на Android. Как вам такой поворот с Compose?
Источник тут
#jetpack #android #compose #serverdrivenui #sdui #bdui
В AndroidX Jetpack появилась новая экспериментальная библиотека
androidx.compose.remote (пока еще даже на dev версия). Она предлагает совершенно другой подход к динамическим интерфейсам и может радикально изменить то, как мы обновляем UI в продакшене, категорически отличающаяся от текущих BDUI/SDUI решений.Remote Compose позволяет создавать и рендерить интерфейсы Jetpack Compose удалённо, без пересборки и релиза приложения.
UI генерируется на сервере, сериализуется в компактный бинарный документ и воспроизводится на устройстве.
Remote Compose открывает возможности, которые раньше требовали релиза приложения:
⚡️ Мгновенные A/B-тесты — вариации интерфейса меняются на сервере, без обновлений.
🎨 Обновление дизайна в реальном времени — карточки товаров, баннеры, сезонные темы.
📰 Динамические контентные экраны — новости, акции, спецпроекты, которые появляются мгновенно.
🧪 Фичи без мусора — нет необходимости тянуть все варианты экрана в бинарник.
Архитектура Remote Compose состоит из двух частей:
1️⃣ Создание документа
На сервере вы пишете обычные composable-функции — либо используете специальные Remote* элементы (RemoteColumn, RemoteText и др.).
Библиотека перехватывает draw-операции Compose и превращает UI в бинарный документ. Получается самодостаточный «UI-файл», который можно отправить на клиент.
2️⃣ Воспроизведение документа
На устройстве этот документ «проигрывается» плеером:
👉 есть Compose-плеер — для современных приложений;
👉 есть Android View-плеер — для старых архитектур.
Плеер интерпретирует более 90 низкоуровневых операций (рисование, layout, модификаторы, state), обеспечивая реальную нативную отрисовку, без WebView и без компонентов, которые нужно заранее описывать в приложении.
Почему это лучше JSON или WebView
❌ JSON-подход требует схем, ограничивает сложные эффекты, анимации и кастомные компоненты.
❌ WebView — это отдельный процесс, разная визуальная стилистика, тяжёлое потребление памяти и уязвимости
Remote Compose передаёт не структуру компонентов, а реальные команды рисования. Поэтому любое, самое сложное Compose-UI — будет воспроизведено точно так, как вы его задали.
Базовые принципы Remote Compose
👉 Документность — UI становится бинарным документом, который можно кешировать, версионировать, отправлять по сети.
👉 Платформенная независимость — один документ можно рендерить на телефоне, планшете, складном устройстве и даже часах.
👉 Отделение визуального уровня от логики — клиенту не нужно знать о ваших composable-функциях, ViewModel, DI и т.п.
👉 Двусторонняя связь — клики и события возвращаются на клиент, который решает, что делать (навигировать, логировать, изменять состояние).
👉 Поддержка анимаций и выражений — значения могут вычисляться по времени, переменным, условиям.
Для большинства приложений оптимальная модель — гибридная:
Если Remote Compose будет развиваться так же активно, как Compose в своё время, это может стать стандартом для динамических интерфейсов на Android. Как вам такой поворот с Compose?
Источник тут
#jetpack #android #compose #serverdrivenui #sdui #bdui
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥96🤯40❤18👍3🤔3
// Пример создания документа на севере
val document = captureRemoteDocument(
context = context,
creationDisplayInfo = displayInfo,
profile = profile
) {
RemoteColumn(modifier = RemoteModifier.fillMaxSize()) {
RemoteText("Dynamic Content")
RemoteButton(onClick = { /* action */ }) {
RemoteText("Click Me")
}
}
}
// Пример воспроизведения документа на клиенте
@Composable
fun DynamicScreen(document: CoreDocument) {
RemoteDocumentPlayer(
document = document,
documentWidth = screenWidth,
documentHeight = screenHeight,
modifier = Modifier.fillMaxSize(),
onNamedAction = { name, value, stateUpdater ->
// Обработка именнового действия из документа
when (name) {
"addToCart" -> cartManager.addItem(value)
"navigate" -> navController.navigate(value)
"trackEvent" -> analytics.logEvent(value)
}
},
bitmapLoader = rememberBitmapLoader() // Для загрузки картинок
)
}
Источник тут
#jetpack #android #compose #serverdrivenui #sdui #bdui
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯32👍8🔥2🤔1