Навигация во Flutter сначала кажется автору простой: push и pop. Но по мере роста проекта появляются табы, вложенные модули, диплинки — и каждый экран начинает открываться по-своему, а
pop() ведёт себя непредсказуемо.Navigator 1.0 прост, но не масштабируется. Navigator 2.0 даёт контроль, но требует тонны бойлерплейта. Пакеты вроде
go_router (режим поддержки) и auto_route (кодогенерация) решают часть проблем, но не все.Автор и его команда прошли через все эти варианты в Яндекс Про — приложении с сотнями фич, несколькими командами и вложенной навигацией. Так появился
yx_navigation — новый пакет в экосистеме архитектурных решений для Flutter, следующий после yx_scope (DI) и yx_state (управление состоянием).В статье автор расскажет, с какими трудностями столкнулась команда, какие требования сформулировала, как устроен
yx_navigation сегодня и как именно он решает проблемы крупных приложений.#свежак #Flutter
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Kotlin Multiplatform Broadcast
Раньше всё было в одном composeApp, который одновременно был и KMP библиотекой, и приложением. Это создавало путаницу в build конфигах и платформенных настройках. iOS при этом уже жил в отдельной папке, и асимметрия торчала наружу.
Главным триггером изменений стал Android Gradle Plugin 9, который больше не позволяет применять Android application plugin к multiplatform модулю. Entry point Android приложения теперь обязательно вынесен в отдельный модуль.
Если в проекте есть нативный UI (например, SwiftUI для iOS), shared разбивается на два модуля:
sharedLogic без Compose зависимостей и sharedUI только для платформ с Compose Multiplatform. Для проектов с серверной частью добавляется server модуль и core с общими моделями и валидацией для шаринга между клиентом и сервером.Я ещё до этого держал каждый application в отдельном модуле, так что для меня новая дефолтная структура лишь оформляет то что уже стало здравым смыслом. Раньше с одним shared было неприятно из-за того что Kotlin stdlib и зависимости тащились в каждый iOS framework. Несколько атомарных shared модулей решают эту проблему и позволяют точечнее управлять тем что попадает на каждую платформу. Очень рад что JetBrains двигаются в сторону более атомарных модулей, но пока есть вопросы не будет ли дублирования базовых Kotlin библиотека в каждый Xcode фреймворк.
Новая структура уже доступна в KMP wizard на kmp.new и в IDE плагине.
🔗 Анонс
#Kotlin #KMP #Gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
‼️ Android View всё! Да здравствует Compose!
Google официально объявила о переходе к стратегии «Compose-first» и прекращении развития Android View, переводя его в режим поддержки.
Что это значит:
👉 Классы android.widget.* в Android SDK будут находиться в режиме поддержки.
👉 Библиотеки Android Jetpack про кастомные View (включая RecyclerView) также переходят в режим поддержки.
👉 Все инструменты в Android Studio будут создаваться только для Compose.
👉 Документация будет писаться только для Compose, однако некоторые разделы про View останутся.
🔗 Источник - оф сайт Android Developers
#Android #AndroidDev #Compose
Google официально объявила о переходе к стратегии «Compose-first» и прекращении развития Android View, переводя его в режим поддержки.
Что это значит:
👉 Классы android.widget.* в Android SDK будут находиться в режиме поддержки.
👉 Библиотеки Android Jetpack про кастомные View (включая RecyclerView) также переходят в режим поддержки.
👉 Все инструменты в Android Studio будут создаваться только для Compose.
👉 Документация будет писаться только для Compose, однако некоторые разделы про View останутся.
🔗 Источник - оф сайт Android Developers
#Android #AndroidDev #Compose
Forwarded from Android Broadcast
👉 CardView
👉 ConstraintLayout
👉 CoordinatorLayout
👉 CustomView
👉 Databinding
👉 DragAndDrop
👉 DrawerLayout
👉 DynamicAnimation
👉 Emoji
👉 Fragment
👉 GridLayout
👉 Interpolator
👉 Loader
👉 Navigation
👉 PercentLayout
👉 Preference
👉 RecyclerView
👉 SlidingPaneLayout
👉 SwipeRefreshLayout
👉 Transition
👉 VectorDrawable
👉 ViewPager
👉 ViewPager2
👉 Material Design Components (Views)
Считаю что делать так с RecyclerView поступили опрометчиво, ведь не все возможности может сделать Lazy*** Composable, а вот на Fragment и подавно куча приложений строится. Но нам дадут волшебные скиллы для миграции по одному экрану за раз
#Android #AndroidDev #Compose #
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
1.14.0 это одновременно и большой апдейт, и проводы. Новых фич для View-версии Material больше не будет, останутся только критические исправления. В документации Google прямым текстом советует всем, кто сидит на Views, начинать или продолжать миграцию на Compose.
Что приехало в релизе:
👉 Material 3 Expressive темы и стили получили статус stable;
👉 Новые компоненты для списков в стиле M3:
ListItemLayout, ListItemRevealLayout, ListItemCardView и другие. Готовые список-айтемы со свайпами вместо самописных решений на RecyclerView;👉
OverflowLinearLayout, который прячет дочерние элементы в overflow menu при нехватке места, по аналогии с action items в Toolbar;👉 Focus rings, декоративная обводка элемента при получении фокуса, удобно для клавиатурной навигации;
👉 Мелкая кастомизация: secondary icons для кнопок, overflow modes для button groups, delays для loading indicators.
Что ещё важно:
⚠️ minSdk подняли с 21 до 23 (Android 6.0). Для проектов с поддержкой Android 5.x это блокер апдейта;
🛠 Библиотека больше не дёргает deprecated API на новых версиях Android, и Play Console перестанет на это ругаться;
Лично для меня новость ожидаемая. Google толкает Compose уже несколько лет, View рано или поздно должен был умереть. Паниковать не стоит, библиотека не ломается, просто не будет новых релизов. Но если вы стартуете новый проект на Views в 2025-м, это прямой повод пересмотреть решение. А для больших легаси-приложений 1.14.0 хороший момент заложить миграцию на Compose в план на горизонте года-двух. Ну и меньше сил будет уходить на реализацию дизайн системы
🔗 Полный Changelog
#android #materialdesign #material3 #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Мобильная разработка
Android Skills — модульные AI-инструкции для разработки
Google выложила Android Skills — набор готовых markdown-инструкций для любой LLM (Claude, Gemini, GPT), которые проводят агента через рутинные архитектурные задачи в Android-проекте.
В наборе:
— View → Compose миграция с сохранением ViewModel-логики.
— Реализация adaptive-лейаутов под Android 17 (sw > 600 dp).
— Navigation 2 → Navigation 3 transformation.
— Миграция со старых camera-библиотек на CameraX.
Технически Skills — структурированные `.md` файлы с шагами, проверками и code patterns. LLM подключает их как контекст и идёт по чеклисту, не «вспоминая» Compose из памяти. Запуск — через новый Android CLI 1.0. Репо открытый, форкается под свой стек.
@mobi_dev (теперь и в Max)
Google выложила Android Skills — набор готовых markdown-инструкций для любой LLM (Claude, Gemini, GPT), которые проводят агента через рутинные архитектурные задачи в Android-проекте.
В наборе:
— View → Compose миграция с сохранением ViewModel-логики.
— Реализация adaptive-лейаутов под Android 17 (sw > 600 dp).
— Navigation 2 → Navigation 3 transformation.
— Миграция со старых camera-библиотек на CameraX.
Технически Skills — структурированные `.md` файлы с шагами, проверками и code patterns. LLM подключает их как контекст и идёт по чеклисту, не «вспоминая» Compose из памяти. Запуск — через новый Android CLI 1.0. Репо открытый, форкается под свой стек.
@mobi_dev (теперь и в Max)
Автор статьи рассказывает о переходе крупного многомодульного проекта с сотнями экранов на Jetpack Compose. Классический стек (XML, Cicerone, Dagger 2, MVVM) работал, но когда экранов стало несколько сотен, команда начала тратить больше времени на борьбу с неконсистентным состоянием UI. Потребовалось менять подход.
За полтора года миграции разработка ускорилась, а баги, связанные с состоянием экрана, практически исчезли.
В статье автор делится, как процесс был разделён на три этапа, что делали на каждом и к чему пришли. Материал будет полезен тем, кто уже знаком с Compose, хочет внедрить его в проект, но сомневается. Без разбора плюсов и минусов технологии — только практика.
#свежак #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Раньше переключения видимости между состояниями UI могли выглядеть немного топорно.
AnimatedContent позволяет задавать, как контент появляется и исчезает — затухание, сдвиг, масштабирование, что угодно!AnimatedContent(
targetState = isLoggedIn,
transitionSpec = {
// Slide in from right, slide out to left
slideInHorizontally { it } togetherWith slideOutHorizontally { -it }
}
) { loggedIn ->
if (loggedIn) HomeScreen() else LoginScreen()
}
Да, переходы имеют значение — пользователи это замечают. Такой уровень проработки вызывает доверие.
Большинство разработчиков используют
LazyColumn без key. Это нормально — пока вы не измените порядок элементов списка, и тогда каждый элемент начнет мигать и перерисовываться.Стабильные ключи позволяют Compose более явно понимать, какой элемент есть какой.
LazyColumn {
items(messages, key = { it.id }) { message ->
MessageRow(message)
}
}Эту возможность используют редко и часто понимают неправильно. Если у вас есть состояние, зависящее от другого состояния, используйте
derivedStateOf — тогда Compose будет выполнять рекомпозицию только при изменении результата, а не каждый раз при изменении исходного состояния.val showScrollToTop by remember {
derivedStateOf { listState.firstVisibleItemIndex > 3 }
}Научитесь правильно это использовать: это критически важно для UI-логики, завязанной на прокрутке./
Забудьте о вложенных layout-контейнерах только ради того, чтобы нарисовать собственную форму или градиент.
drawBehind даёт вам прямой доступ к Canvas прямо внутри модификатора.Text(
text = "Hello",
modifier = Modifier.drawBehind {
drawRoundRect(
color = Color(0xFF00D4AA),
cornerRadius = CornerRadius(12f)
)
}
)
Принцип, лежащий в основе
Scaffold, BoxWithConstraints и наших кастомных систем компоновки, где размер одного компонуемого элемента необходимо измерить перед компоновкой другого, заключается в том, что компонуемые элементы не знают своего собственного размера.Знание о его существовании обычно является большей частью необходимого — и большинству разработчиков никогда не приходится это писать — но это объясняет, как работают сложные компоновки.
#свежак #MiddlePath #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
Google показала новый профайлер на I/O 2026. APA пришёл на смену Android GPU Inspector и сразу доступен в открытой бете. Поставляется в двух вариантах: лёгкое standalone-приложение под Windows, macOS и Linux, и встроенный System Trace viewer в Android Studio в канареечных сборках Panda 4 и новее.
В этом релизе доступен System Profiler. Он показывает CPU, GPU, память и энергопотребление приложения в одном окне.
Под капотом Perfetto для системного трейсинга, можно открывать и существующие Perfetto-трейсы. GPU-счётчики читаются с железа Qualcomm, Arm, Imagination и Samsung (про Tensor ничего), есть события SurfaceFlinger по конвейеру рендера, треки FPS и времени кадра. Из рабочих мелочей появились вкладки и сплит окна для сравнения трейсов, проектная модель для A/B-тестов и скриншоты для навигации по таймлайну.
🧠 APA анализирует трейсы через SQL-запросы и идёт с Perfetto SQL skill для ИИ-агентов, так что запрос строится без знания схемы Perfetto. Perfetto Analysis отвечает на высокоуровневые вопросы вроде «почему медленно стартует приложение».
По заявлениям разработчиков рендеринг трейса в APA в 6–26 раз быстрее, чем в Android GPU Inspector, и стабильнее на больших данных. Лучший опыт по системным метрикам и GPU-счётчикам — на устройствах с Android 12 и выше.
Меня радует здесь формат, а не сам профайлер. Standalone-инструмент, который ставится за минуту и не тянет за собой тяжёлую IDE, это правильное направление. Android GPU Inspector тоже был отдельным приложением, так что путь не новый, но APA впервые собрал в standalone не только графику, а ещё CPU, память и энергопотребление. Очень жду когда начнется распил инструментов из Android Studio.
#Android #AndroidDev #Производительность #Performance #AndroidStudio
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
😁 Android CLI получил stable 1.0, и его главная команда тянется обратно в Android Studio.
Android CLI это тонкая прослойка между ИИ-агентом и Android-тулчейном. Работает с любым агентом: Claude Code, Codex, Gemini, Antigravity. Обновляется командой
Стоит понять, что CLI делает сам, а что нет. Сам он умеет то, чему не нужно понимание кода: создать проект, поставить зависимости, собрать, поднять эмулятор, задеплоить. Это обёртка над gradle, adb и SDK-тулзами, работает откуда угодно.
«Умные» операции CLI проксирует в запущенную Android Studio через новую команду android studio. Студия тут работает как бэкенд:
Ещё в релизе появились Journeys, сценарии на естественном языке для прогона по приложению, а библиотеку скиллов пополнили миграцией на CameraX, Perfetto SQL и Compose Style API.
Также появилась интеграция с Android разработкой в Antigravity на основе Android CLI
🤔 Меня в таких мостах к IDE смущает привязка к одной открытой папке проекта. MCP-сервер для Android Studio я по этой причине так и не стал использовать: работаю через git worktree, держу несколько папок-проектов одновременно, а мост видит только главную.
🔗 Источник Android Dev Blog
#Android #AndroidDev #AI #ИИ #AndroidStudio
Android CLI это тонкая прослойка между ИИ-агентом и Android-тулчейном. Работает с любым агентом: Claude Code, Codex, Gemini, Antigravity. Обновляется командой
android update.Стоит понять, что CLI делает сам, а что нет. Сам он умеет то, чему не нужно понимание кода: создать проект, поставить зависимости, собрать, поднять эмулятор, задеплоить. Это обёртка над gradle, adb и SDK-тулзами, работает откуда угодно.
«Умные» операции CLI проксирует в запущенную Android Studio через новую команду android studio. Студия тут работает как бэкенд:
analyze-file гоняет инспекции IDE, find-declaration и find-usages ищут символы через семантический индекс проекта, render-compose-preview отдаёт картинку Compose-превью из рендер-движка студии, version-lookup подтягивает актуальные версии зависимостей. Команда android studio check показывает pid живого процесса студии и статус проекта READY: CLI разговаривает с уже открытым инстансом по локальному каналу. Студия не запущена, у агента остаются только сборка и деплой, всё умное отваливается.Ещё в релизе появились Journeys, сценарии на естественном языке для прогона по приложению, а библиотеку скиллов пополнили миграцией на CameraX, Perfetto SQL и Compose Style API.
Также появилась интеграция с Android разработкой в Antigravity на основе Android CLI
🤔 Меня в таких мостах к IDE смущает привязка к одной открытой папке проекта. MCP-сервер для Android Studio я по этой причине так и не стал использовать: работаю через git worktree, держу несколько папок-проектов одновременно, а мост видит только главную.
🔗 Источник Android Dev Blog
#Android #AndroidDev #AI #ИИ #AndroidStudio
Forwarded from Android Broadcast
Беспроводной ADB наконец перестанет быть лотереей. С Platform Tools v37 и Android 17 устройство остаётся подключённым даже если сменить сеть или перезагрузить Mac. Просто продолжаешь работать.
Раньше при закрытии крышки ноутбука в устройство теряло соединение и подключайся снова. Теперь этот ритуал уходит. Устройства с включённым Wireless Debugging автоматически появляются в Device Manager Android Studio без каких-либо дополнительных действий.
Работает не только с телефонами, но и с часами, что актуально при разработке для Wear OS, где физическое подключение всегда было отдельной болью.
⚠️ Требования жёсткие: нужен Android 17 на устройстве и Android Platform Tools v37 или новее. Для большинства девайсов на руках это пока недоступно. Фича - задел на будущее.
#Android #AndroidDev #AndroidStudio
Please open Telegram to view this post
VIEW IN TELEGRAM
Команда Flutter представила версию 3.44, которая включает ряд значительных обновлений. Среди ключевых изменений — Hybrid Composition++ для Android, переход на Swift Package Manager в качестве стандартного менеджера пакетов для iOS/macOS и улучшенная поддержка Vulkan для Impeller.
Также представлена предварительная версия поддержки многооконного режима для настольных платформ. Canonical становится ведущим разработчиком проекта.
В рамках масштабной архитектурной эволюции Material и Cupertino отделяются от основного фреймворка. Внедряются новые подходы к UX для агентного взаимодействия с пользователями (GenUI) и инструменты для разработчиков: Agentic Hot Reload, Dart & Flutter Agent Skills.
Flutter 3.44 уже используется в мультимедийной системе Toyota RAV4 2026, а также готовится SDK для webOS от LG.
#свежак #Flutter
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Мобильная разработка
Compose Multiplatform 1.11: iOS становится ближе к нативному ощущению
Кроссплатформенный UI часто ломается на мелочах: курсор в text field, selection handles, жесты, системное меню. В Compose Multiplatform 1.11 JetBrains как раз двигает эти детали на iOS, а не только добавляет ещё один общий API.
В релизе есть experimental native text input поверх
Можно изучить релиз и выбрать, что тестировать в своём KMP-приложении. В деталях особенно полезны ограничения новых text input API и изменения в тестах.
@mobi_dev (теперь и в Max)
Кроссплатформенный UI часто ломается на мелочах: курсор в text field, selection handles, жесты, системное меню. В Compose Multiplatform 1.11 JetBrains как раз двигает эти детали на iOS, а не только добавляет ещё один общий API.
В релизе есть experimental native text input поверх
UIView, concurrent rendering по умолчанию, обновлённые Compose UI test APIs v2 и переработанная обработка touch для web targets. Для мобильных команд это хороший набор сигналов: где shared UI уже зрелый, а где нужна проверка на устройстве.Можно изучить релиз и выбрать, что тестировать в своём KMP-приложении. В деталях особенно полезны ограничения новых text input API и изменения в тестах.
@mobi_dev (теперь и в Max)
Forwarded from Кирилл Розов. Блог броадкастера
ADK (Agent Development Kit) - это open-source фреймворк для AI-агентов, и теперь у него есть Android-артефакт с поддержкой on-device моделей.
Ключевая архитектурная идея: облачный оркестратор ведёт диалог с пользователем и координирует работу. Когда нужно обработать приватные данные - документы, брони, личные файлы - он делегирует subagent'у, который работает на устройстве через ML Kit GenAI и AICore. Данные за пределы устройства не уходят.
В стек входят LLM-агенты, sequential agents, MCP tools, session state и long-term memory через Memory service, OpenTelemetry для наблюдаемости.
Можно использовать три варианта моделей:
👉 ML Kit GenAI для on-device Gemini Nano
👉 Firebase AI Logic для облачного Gemini
👉 Google GenAI для быстрого прототипирования.
‼️ ВАЖНО: версия 0.1.0, статус "В активной разработке". Это очень ранний экспериментальный релиз, не для продакшна.
Архитектурный паттерн с разделением на облачный оркестратор и on-device агент выглядит разумно - именно так я бы и хотел видеть подобный инструмент. Но внедрять в прод рано.
🔗 Источник Android Dev Blog
#Android #AI #Gemini
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from StartAndroid
What's new in Android development tools, Google I/O 2026
#googleio #android
https://www.youtube.com/watch?v=N4GgGBKnHe4
#googleio #android
https://www.youtube.com/watch?v=N4GgGBKnHe4
Forwarded from Android Broadcast
Keep rules из сторонних библиотек часто написаны с запасом: разработчик библиотеки не знает, как именно вы её используете, и кладёт широкое
-keep class com.library.** { *; }. R8 видит это и выключает оптимизацию для всего пакета, даже если вашему приложению нужны оттуда три класса. AGP 9.3.0-alpha05 добавил инструмент, который это наконец показывает с цифрами.Configuration Analyzer генерирует HTML-отчёт, в котором по каждому keep rule и по каждой библиотеке видны три метрики:
👉 Shrinking score - процент кода, доступного для удаления неиспользуемых классов и методов
👉 Optimization score - процент кода, доступного для инлайнинга, мёрджинга классов и прочих R8-оптимизаций
👉 Obfuscation score - процент кода, доступного для обфускации имён
Начиная с AGP 9.3.0-alpha05 отчёт генерируется автоматически в build/outputs/mapping/release/configanalyzer.html при каждом билде с квлюченной минификацией. Для AGP 9.2 и ниже нужно при запуске
./gradlew assembleRelease передать системный флаг com.android.tools.r8.dumpkeepradiushtmltodirectory с путём до папки куда сохранить отчет.Помимо широких правил анализатор выделяет ещё два типа мусора:
👉 unused rules, которые не матчат ни один класс в текущем билде (обычно появляются после рефакторинга)
👉 subsumed rules, когда одно широкое правило перекрывает другое и делает его бессмысленным.
‼️ ВАЖНО: требует R8 9.3.7-dev, который идёт в комплекте только с AGP 9.3.0-alpha05. Это ранняя alpha. На продакшн-сборки без тщательной проверки не стоит.
Это первый инструмент с конкретными цифрами по влиянию сторонних библиотек на R8. Раньше это была область догадок и ручного анализа mapping-файлов. Теперь можно прийти к мейнтейнеру с отчётом и показать: вот твоё правило, вот 35% заблокированной оптимизации у нас в проекте. Круто если такой отчет можно будет получить как XML/JSON чтобы встраивать в другие инструменты.
#Android #AndroidDev #R8 #Performance #agp #Произодвительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM