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
Forwarded from Kotlin Multiplatform Broadcast
👉 Язык: стабильные контекстные параметры, явные backing-поля и несколько нововведений для use-site таргетов аннотаций.
👉 Стандартная библиотека: стабилизация UUID API
👉 Kotlin/JVM: поддержка Java 26 и аннотации в метаданных включены по умолчанию.
👉 Kotlin/Native: поддержка SPM как зависимостей, обновления Swift export и CMS GC включён по умолчанию.
👉 Kotlin/Wasm: инкрементальная компиляция включена по умолчанию и поддержка WebAssembly Component Model.
👉 Совместимость с Gradle 9.5.0.
👉 Компилятор Kotlin: более согласованное поведение inline-функций при компиляции в .klib.
🔗 Полный список изменений
#Kotlin #Kotlin240
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Kotlin Multiplatform Broadcast
До этого мультимодальные модели работали так: картинку сначала обрабатывает отдельный блок, аудио тоже через свой. Каждый такой блок ест память и добавляет задержку. Gemma 4 12B делает это без посредников. Картинка и звук идут прямо в модель. Один пайплайн для всего.
На практике это значит меньше памяти под инфраструктуру и выше скорость отклика. Модель запускается на железе с 16GB VRAM (не потребляет, а столько оперативки в компе надо) или unified memory, то есть MacBook Pro с M3 тянет без проблем. Apache 2.0, весы на Hugging Face и Kaggle, запуск через Ollama или LM Studio.
Задачи, которые это открывает:
👉 локальный агент с пониманием скриншотов и голоса
👉 анализ изображений без отправки данных в облако
👉 голосовой ввод прямо в агентный пайплайн.
Для тех, кто строит агентов с приватными данными или просто не хочет зависеть от API-ключей и облачных лимитов — это рабочий вариант.
Мне интересно попробовать именно в связке с локальным агентом: один инстанс, текст плюс скриншот плюс аудио, без облака. Посмотрим, насколько это работает на практике, а не только на бенчмарках.
🔗 Оф анонс
#AI #Gemma
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from StartAndroid
Автор предлагает разрабатывать ViewModel не для всего экрана, а по жизненному циклу и области ответственности. ViewModel может жить столько, сколько нужен конкретный UI-компонент.
#android #compose #viewmodel
https://proandroiddev.com/stop-building-god-viewmodels-with-one-screen-one-viewmodel-569fe4cb3784
#android #compose #viewmodel
https://proandroiddev.com/stop-building-god-viewmodels-with-one-screen-one-viewmodel-569fe4cb3784
Medium
Stop Building God ViewModels with “One Screen = One ViewModel”
Using the New Android ViewModel APIs for Lifecycle-Aware Compose Architecture
Forwarded from Android Broadcast
🤯 Android 17 умеет убивать ваше приложение молча. Без стектрейса. Разбираемся. И ЭТО БЕЗ КЛИКБЕЙТА
Начиная с Android 17, появился системный MemoryLimiter — лимит памяти на процесс, привязанный к общему объёму RAM устройства. Превысил лимит — процесс убит. Без эксепшена, без стектрейса.
Как это выглядит:
👉 причина завершения в ApplicationExitInfo =
👉 в описании строка "MemoryLimiter:AnonSwap"
👉 в Crashlytics этого НЕ будет: это не краш, а системное убийство процесса
И сразу разрушим главное заблуждение: это НЕ про heap size.
getMemoryClass() и largeHeap ограничивают только Java-кучу — объекты под управлением ART. Превысил — получишь OutOfMemoryError со стектрейсом, который ловится. А новый MemoryLimiter считает другое — анонимную память ВСЕГО процесса:
👉 битмапы (с Android 8 их пиксели в нативной памяти, в Java-куче их нет)
👉 нативные библиотеки, медиакодеки, Skia
👉 веса on-device ML/LLM моделей (mmap/нативка)
Всё это в getMemoryClass() не видно. Можно сидеть втрое ниже heap-лимита, никогда не словить OOM — и всё равно быть убитым, потому что суммарная нативная память процесса вылезла за порог. getMemoryClass и OOM — про Java-кучу. MemoryLimiter — про весь процесс. Это два разных предохранителя, и старый про новый вам ничего не скажет.
Важные оговорки, чтобы не было паники на пустом месте:
👉 в Android 17 лимиты заданы консервативно: цель — экстремальные утечки и выбросы, а не нормальные приложения
👉 включены только на части устройств
👉 конкретных чисел Google не публиковал. Реальный лимит своего девайса можно снять командой: adb shell am memory-limiter status
В зоне риска тяжёлые сценарии на устройствах среднего и бюджетного сегмента.
Уже есть задокументированный случай на бете — крупная on-device модель Gemma падала на Pixel 6a с 6 ГБ RAM именно из-за MemoryLimiter. 6 ГБ — это уже не бюджетник. Java-куча там небольшая, а нативка с весами модели — гигабайты в RAM.
Два мифа, которые гуляют по сети и которые повторять не надо:
👉 НЕТ подтверждения, что система шлёт «вежливое предупреждение» перед убийством
👉 НЕТ официального «дедлайна для разработчиков 30 июня». Google его не объявлял
Это первый раз, когда дисциплина по памяти не совет, а правило от ОС. Сейчас лимиты мягкие, но направление одностороннее — закручивать будут, а не отпускать. И самое неприятное тут не сам лимит, а его невидимость: пользователи будут терять сессии, а вы не узнаете, пока специально не начнёте смотреть.
💬 Как вы думаете, связаны ли меры с тем, что оперативка стала дорожать и вставить по 12–16 ГБ стало дорого?
#Android #Android17 #Производительность
Начиная с Android 17, появился системный MemoryLimiter — лимит памяти на процесс, привязанный к общему объёму RAM устройства. Превысил лимит — процесс убит. Без эксепшена, без стектрейса.
Как это выглядит:
👉 причина завершения в ApplicationExitInfo =
REASON_OTHER👉 в описании строка "MemoryLimiter:AnonSwap"
👉 в Crashlytics этого НЕ будет: это не краш, а системное убийство процесса
И сразу разрушим главное заблуждение: это НЕ про heap size.
getMemoryClass() и largeHeap ограничивают только Java-кучу — объекты под управлением ART. Превысил — получишь OutOfMemoryError со стектрейсом, который ловится. А новый MemoryLimiter считает другое — анонимную память ВСЕГО процесса:
👉 битмапы (с Android 8 их пиксели в нативной памяти, в Java-куче их нет)
👉 нативные библиотеки, медиакодеки, Skia
👉 веса on-device ML/LLM моделей (mmap/нативка)
Всё это в getMemoryClass() не видно. Можно сидеть втрое ниже heap-лимита, никогда не словить OOM — и всё равно быть убитым, потому что суммарная нативная память процесса вылезла за порог. getMemoryClass и OOM — про Java-кучу. MemoryLimiter — про весь процесс. Это два разных предохранителя, и старый про новый вам ничего не скажет.
Важные оговорки, чтобы не было паники на пустом месте:
👉 в Android 17 лимиты заданы консервативно: цель — экстремальные утечки и выбросы, а не нормальные приложения
👉 включены только на части устройств
👉 конкретных чисел Google не публиковал. Реальный лимит своего девайса можно снять командой: adb shell am memory-limiter status
В зоне риска тяжёлые сценарии на устройствах среднего и бюджетного сегмента.
Уже есть задокументированный случай на бете — крупная on-device модель Gemma падала на Pixel 6a с 6 ГБ RAM именно из-за MemoryLimiter. 6 ГБ — это уже не бюджетник. Java-куча там небольшая, а нативка с весами модели — гигабайты в RAM.
Два мифа, которые гуляют по сети и которые повторять не надо:
👉 НЕТ подтверждения, что система шлёт «вежливое предупреждение» перед убийством
👉 НЕТ официального «дедлайна для разработчиков 30 июня». Google его не объявлял
Это первый раз, когда дисциплина по памяти не совет, а правило от ОС. Сейчас лимиты мягкие, но направление одностороннее — закручивать будут, а не отпускать. И самое неприятное тут не сам лимит, а его невидимость: пользователи будут терять сессии, а вы не узнаете, пока специально не начнёте смотреть.
#Android #Android17 #Производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Compose Broadcast
Всё сводится к более точечному встраиванию Compose экранов в iOS Controller и перекладывание навигации на нативные элементы.
#Compose #iOS #iOS26 #LiquidGlass
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
#Android #AndroidDev #Производительность #Оптимизация
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from iOS Good Reads – swift, разработка мобильных приложений, архитектура, блокчейн, VR, AR, карьера, IT (Egor Tolstoy)
AdaEngine – новый игровой движок на Swift
AdaEngine – 2D игровой движок, построенный вокруг паттерна Entity Component System. Есть поддержка физики, кастомных шейдеров и описания интерфейса на SwiftUI.
Только-только вышел первый публичный релиз, если есть вопросы, пишите автору – @SpectralDragon.
AdaEngine – 2D игровой движок, построенный вокруг паттерна Entity Component System. Есть поддержка физики, кастомных шейдеров и описания интерфейса на SwiftUI.
Только-только вышел первый публичный релиз, если есть вопросы, пишите автору – @SpectralDragon.
adaengine.org
A simple and scalable game engine built in Swift.
Forwarded from Mobile Developer
https://proandroiddev.com/resolving-savedstatehandle-crashes-with-hilt-assisted-injection-in-jetpack-navigation-3-63ebd50b88af
Боль при миграции на Nav3: код из Nav2, где ViewModel читал аргументы маршрута из SavedStateHandle через toRoute(), внезапно крашится. Причина - Nav3 больше не пропихивает Route в SavedStateHandle автоматически.
Внутри - полный пример с Serializable Route'ами, фабрикой, регистрацией в entryProvider DSL и тестовым кейсом.
——————
Telegram | Селеба | Max | YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from StartAndroid
Вышел Kotlin 2.4.0
Что нового:
- Language: Stable context parameters, explicit backing fields, and multiple features for annotation use-site targets.
- Standard library: Stabilized support for the UUID API and support for checking sorted order.
- Kotlin/JVM: Support for Java 26 and annotations in metadata enabled by default.
- Kotlin/Native: Support for Swift packages as dependencies, updates on Swift export, and the CMS GC enabled by default.
- Kotlin/Wasm: Incremental compilation enabled by default and support for WebAssembly Component Model.
- Kotlin/JS: Support for value class export and ES2015 features in JS code inlining.
- Gradle: Compatibility with Gradle 9.5.0.
- Maven: Automatic alignment between Java and JVM target versions.
- Kotlin compiler: More consistent inline function behavior during .klib compilation.
#kotlin
https://blog.jetbrains.com/kotlin/2026/06/kotlin-2-4-0-released/
Что нового:
- Language: Stable context parameters, explicit backing fields, and multiple features for annotation use-site targets.
- Standard library: Stabilized support for the UUID API and support for checking sorted order.
- Kotlin/JVM: Support for Java 26 and annotations in metadata enabled by default.
- Kotlin/Native: Support for Swift packages as dependencies, updates on Swift export, and the CMS GC enabled by default.
- Kotlin/Wasm: Incremental compilation enabled by default and support for WebAssembly Component Model.
- Kotlin/JS: Support for value class export and ES2015 features in JS code inlining.
- Gradle: Compatibility with Gradle 9.5.0.
- Maven: Automatic alignment between Java and JVM target versions.
- Kotlin compiler: More consistent inline function behavior during .klib compilation.
#kotlin
https://blog.jetbrains.com/kotlin/2026/06/kotlin-2-4-0-released/
The JetBrains Blog
Kotlin 2.4.0 Released - The JetBrains Blog
The Kotlin 2.4.0 release is out! This release brings new language features, support for Swift packages as dependencies, updates to Swift export, and more. Take a look!