Как Google разводит по изолированным доменам автомобильный Android
AAOS SDV, версия Android Automotive для программно-определяемых автомобилей, построена на виртуализации: Google использует Cuttlefish, чтобы разделять системы, живущие в одной машине на одном железе.
Прошлые анонсы были про фичи, а этот текст про то, как устроена безопасность: доменная изоляция как фундамент и виртуализация как способ развести сосуществующие инстансы.
Читать стоит, если смотрите в сторону автомобильных проектов, но и обычному мобильному разработчику полезно как модель: те же приёмы изоляции постепенно спускаются в потребительский Android. Как она устроена, расписано в разборе Google.
#android
AAOS SDV, версия Android Automotive для программно-определяемых автомобилей, построена на виртуализации: Google использует Cuttlefish, чтобы разделять системы, живущие в одной машине на одном железе.
Прошлые анонсы были про фичи, а этот текст про то, как устроена безопасность: доменная изоляция как фундамент и виртуализация как способ развести сосуществующие инстансы.
Читать стоит, если смотрите в сторону автомобильных проектов, но и обычному мобильному разработчику полезно как модель: те же приёмы изоляции постепенно спускаются в потребительский Android. Как она устроена, расписано в разборе Google.
#android
Android Developers Blog
AAOS SDV - Secure by Design
News and insights on the Android platform, developer tools, and events.
Движок IntelliJ уехал из IDE и работает в VS Code по LSP
В VS Code уже ставится расширение Java and Kotlin by IntelliJ IDEA с идентификатором
Причину переезда называют прямо: агенты уже ходят в языковые серверы за быстрым и детерминированным поиском по коду, и в перспективе это экономит токены. Поэтому движок и вынесли наружу.
Практические оговорки. Расширение привязано к VS Code версии 1.105.1 и выше, редакторы на его основе вроде Cursor тоже считаются, а одиночный
#kotlin
В VS Code уже ставится расширение Java and Kotlin by IntelliJ IDEA с идентификатором
JetBrains.intellij-server. Это не оболочка, изображающая IDE, а языковой движок IntelliJ, говорящий по протоколу LSP.Причину переезда называют прямо: агенты уже ходят в языковые серверы за быстрым и детерминированным поиском по коду, и в перспективе это экономит токены. Поэтому движок и вынесли наружу.
Практические оговорки. Расширение привязано к VS Code версии 1.105.1 и выше, редакторы на его основе вроде Cursor тоже считаются, а одиночный
.java-файл без проекта не заработает. Preview-сборки умирают через 30 дней после релиза, зато для чистого Kotlin остаётся бесплатный языковой сервер под Apache-2. Инструкция по запуску.#kotlin
DEV Community
IntelliJ Java Kotlin LSP now runs inside VS Code
Install JetBrains.intellij-server in VS Code, open a Maven Gradle or Bazel folder, then prove go-to-definition works.
❤3
Tinder срезал холодный старт на 47% через R8 Configuration Analyzer
Кодовая база росла вместе с приложением, и к моменту оптимизации около 70% кода оставались неоптимизированными: 17 dex-файлов, из них три выделены только под запуск. R8 был включён, но большую часть его работы блокировали keep-правила, и команда не могла определить, какие именно.
Это и закрывает новый R8 Configuration Analyzer. Он показывает оценки по shrinking, оптимизации и обфускации и подсвечивает слишком широкие, дублирующие и устаревшие keep-правила, включая те, что приехали из сторонних библиотек.
Итог после чистки: холодные старты минус 47%, размер загрузки минус 28,98%, до 61,5 МБ, а ANR по ощущению пользователя минус 28%. Цифры и скриншоты анализатора лежат в блоге Android Developers.
#android
Кодовая база росла вместе с приложением, и к моменту оптимизации около 70% кода оставались неоптимизированными: 17 dex-файлов, из них три выделены только под запуск. R8 был включён, но большую часть его работы блокировали keep-правила, и команда не могла определить, какие именно.
Это и закрывает новый R8 Configuration Analyzer. Он показывает оценки по shrinking, оптимизации и обфускации и подсвечивает слишком широкие, дублирующие и устаревшие keep-правила, включая те, что приехали из сторонних библиотек.
Итог после чистки: холодные старты минус 47%, размер загрузки минус 28,98%, до 61,5 МБ, а ANR по ощущению пользователя минус 28%. Цифры и скриншоты анализатора лежат в блоге Android Developers.
#android
Android Developers Blog
Tinder cuts app cold starts by 47% with new R8 Configuration Analyzer
News and insights on the Android platform, developer tools, and events.
Media3 1.11 добавил слоты Player в Compose и предзагрузку коротких видео через PlayerPool
Media3 это библиотека, на которой работает подавляющее большинство топовых медиаприложений под Android. В 1.11 изменения затронули воспроизведение, редактирование и UI-компоненты сразу.
Для тех, кто на Compose, главное в UI-модулях: настраиваемые слоты
Помимо этого интеграцию с Cast обновили под SystemUI Output Switcher, добавили сетевое расширение на клиенте Ktor и утилиты муксинга для Ogg и WAV.
#android
Media3 это библиотека, на которой работает подавляющее большинство топовых медиаприложений под Android. В 1.11 изменения затронули воспроизведение, редактирование и UI-компоненты сразу.
Для тех, кто на Compose, главное в UI-модулях: настраиваемые слоты
Player с готовыми дефолтами, интерактивные жесты, наблюдатели состояния и предзагрузка коротких видео через PlayerPool. Последнее прямо про ленты в стиле Reels, где следующий ролик должен стартовать мгновенно.Помимо этого интеграцию с Cast обновили под SystemUI Output Switcher, добавили сетевое расширение на клиенте Ktor и утилиты муксинга для Ogg и WAV.
#android
Android Developers Blog
Media3 1.11 - What's new?
News and insights on the Android platform, developer tools, and events.
Космос, Ferrari, котёнок в коробке: обои на рабочий стол выбирали часами, перебирая варианты один за другим. SpaceWeb и Типичный программист вспомнили это в анкете к 25-летию компании, вместе с любимым спортом и лучшим другом — тоже родом из школьных анкет.
Между вопросами — история аськи, скайпа, биткоина и самой компании с 2001 по 2026 год, плюс немного будущего. В конце — промокод на услуги SpaceWeb и ответ на вопрос какое ты хранилище информации!
Между вопросами — история аськи, скайпа, биткоина и самой компании с 2001 по 2026 год, плюс немного будущего. В конце — промокод на услуги SpaceWeb и ответ на вопрос какое ты хранилище информации!
Справочник по BLE во Flutter: от разрешений и MTU до архитектуры сервиса под продакшен
Туториалы по Flutter обычно заканчиваются на REST. Как только надо поговорить с пульсометром, умной лампой или своим железом, начинается Bluetooth Low Energy, где разрешения различаются между Android и iOS и даже между версиями Android, а жизненный цикл соединения имеет больше состояний, чем ожидаешь. Пакет
🔘 теория BLE, конфигурация обеих платформ, разбор рекламных пакетов при сканировании;
🔘 согласование MTU, обнаружение сервисов, чтение и запись, уведомления и дескрипторы;
🔘 спаривание, фоновая работа, обработка ошибок и архитектура сервиса под продакшен;
🔘 каждый фрагмент кода в справочнике разобран построчно.
#flutter
Туториалы по Flutter обычно заканчиваются на REST. Как только надо поговорить с пульсометром, умной лампой или своим железом, начинается Bluetooth Low Energy, где разрешения различаются между Android и iOS и даже между версиями Android, а жизненный цикл соединения имеет больше состояний, чем ожидаешь. Пакет
flutter_blue_plus прячет платформенную боль, оставляя контроль над сканированием и обменом.🔘 теория BLE, конфигурация обеих платформ, разбор рекламных пакетов при сканировании;
🔘 согласование MTU, обнаружение сервисов, чтение и запись, уведомления и дескрипторы;
🔘 спаривание, фоновая работа, обработка ошибок и архитектура сервиса под продакшен;
🔘 каждый фрагмент кода в справочнике разобран построчно.
#flutter
freeCodeCamp.org
Bluetooth Low Energy in Flutter: A Handbook for Devs
Most Flutter tutorials stop at network calls and REST APIs. The moment you need to talk to a physical device, a heart rate monitor, a smart bulb, a fitness tracker, an industrial sensor, or your own c
Kotlin, NDK и JNI: как позвать C и C++ из Android-приложения
Поводов спуститься в нативный код три: не хватает производительности, есть готовая библиотека на C или нужна функциональность уровнем ниже, чем даёт платформа. Инструментарий даёт Android NDK, а мостом между Kotlin или Java и нативной стороной работает JNI.
Разбор начинается с архитектуры этой связки, а не с копипасты первого рабочего примера: видно, какие слои участвуют, где проходят границы ответственности и в каком месте вы платите за переход через JNI.
Полезно как карта местности перед первым спуском, особенно если раньше нативный код в проекте трогал кто-то другой.
#kotlin
Поводов спуститься в нативный код три: не хватает производительности, есть готовая библиотека на C или нужна функциональность уровнем ниже, чем даёт платформа. Инструментарий даёт Android NDK, а мостом между Kotlin или Java и нативной стороной работает JNI.
Разбор начинается с архитектуры этой связки, а не с копипасты первого рабочего примера: видно, какие слои участвуют, где проходят границы ответственности и в каком месте вы платите за переход через JNI.
Полезно как карта местности перед первым спуском, особенно если раньше нативный код в проекте трогал кто-то другой.
#kotlin
DEV Community
Kotlin Native Interop: Calling C and C++ from Android
Kotlin Native Interop: Calling C and C++ from Android Android applications can combine...
Android Skills специально строят так, чтобы их можно было выбросить
Google выпустил официальные Android Skills в апреле, отклик превзошёл ожидания, и теперь команда объясняет философию проекта и отвечает на накопившиеся вопросы.
Главный из них: почему официальных навыков так мало. Ответ в заголовке поста: они строятся с расчётом на депрекацию. Навык живёт ровно столько, сколько живёт разрыв между тем, что модель знает сама, и тем, что ей приходится подсказывать.
Практическая часть про то, что происходит при установке и использовании навыка. Понимание этой механики напрямую экономит и токены, и время, если вы работаете с агентом в Android-проекте.
#android
Google выпустил официальные Android Skills в апреле, отклик превзошёл ожидания, и теперь команда объясняет философию проекта и отвечает на накопившиеся вопросы.
Главный из них: почему официальных навыков так мало. Ответ в заголовке поста: они строятся с расчётом на депрекацию. Навык живёт ровно столько, сколько живёт разрыв между тем, что модель знает сама, и тем, что ей приходится подсказывать.
Практическая часть про то, что происходит при установке и использовании навыка. Понимание этой механики напрямую экономит и токены, и время, если вы работаете с агентом в Android-проекте.
#android
Android Developers Blog
Inside Android Skills - Built for deprecation
News and insights on the Android platform, developer tools, and events.
Compose Multiplatform 1.12.0 отдаёт запущенное приложение агенту через MCP
Вышла версия 1.12.0. Главное для тех, кто кодит с ассистентом: в Compose Hot Reload появился MCP-сервер, через который агент обращается к работающему приложению, а не угадывает его состояние по исходникам.
Помимо этого подтянули управление веб-ресурсами и дали более тонкий контроль над состояниями окна на десктопе.
Если у вас общий UI под Android и iOS, смотреть стоит именно на связку hot reload и агентов: это тот случай, когда инструмент меняет цикл правка-сборка-проверка, а не добавляет ещё один API в список. Заметка о релизе в блоге JetBrains.
#compose
Вышла версия 1.12.0. Главное для тех, кто кодит с ассистентом: в Compose Hot Reload появился MCP-сервер, через который агент обращается к работающему приложению, а не угадывает его состояние по исходникам.
Помимо этого подтянули управление веб-ресурсами и дали более тонкий контроль над состояниями окна на десктопе.
Если у вас общий UI под Android и iOS, смотреть стоит именно на связку hot reload и агентов: это тот случай, когда инструмент меняет цикл правка-сборка-проверка, а не добавляет ещё один API в список. Заметка о релизе в блоге JetBrains.
#compose
The JetBrains Blog
Compose Multiplatform 1.12.0 Released - The JetBrains Blog
This release brings MCP server for AI agents in Compose Hot Reload, automatic font fallback for web, and v2 version of the window and dialog API for desktop.
Android 17 включает ECH на уровне всей системы
Google добавил в Android 17 поддержку Encrypted Client Hello: стандарт скрывает от сети, какие сайты открывает пользователь. Работает в паре с приватным DNS и прячет имя домена, шифруя его ключом, который расшифровывает только сам сайт.
Для разработчика тут две практические детали. Первая: ECH GREASE включён по умолчанию, устройство подмешивает фиктивные ECH-расширения к сайтам без поддержки, чтобы защищённые соединения не выделялись на общем фоне. Вторая: OkHttp уже втянул поддержку ECH в ядро библиотеки, так что сторонним приложениям она доступна.
В том же наборе Local Network Protection: приложение теперь обязано спросить разрешение, прежде чем сканировать локальную сеть или подключаться к устройствам в ней. Разбор в The Hacker News.
#android
Google добавил в Android 17 поддержку Encrypted Client Hello: стандарт скрывает от сети, какие сайты открывает пользователь. Работает в паре с приватным DNS и прячет имя домена, шифруя его ключом, который расшифровывает только сам сайт.
Для разработчика тут две практические детали. Первая: ECH GREASE включён по умолчанию, устройство подмешивает фиктивные ECH-расширения к сайтам без поддержки, чтобы защищённые соединения не выделялись на общем фоне. Вторая: OkHttp уже втянул поддержку ECH в ядро библиотеки, так что сторонним приложениям она доступна.
В том же наборе Local Network Protection: приложение теперь обязано спросить разрешение, прежде чем сканировать локальную сеть или подключаться к устройствам в ней. Разбор в The Hacker News.
#android
👍5
iOS Safari уносит панели за экран при открытии клавиатуры, и лечится это одной строкой CSS
Сценарий узкий, но узнаваемый: полноэкранный мобильный редактор сделан оверлеем с
🔘 воспроизводится только на коротком контенте, поэтому легко не поймать на тестах;
🔘 плясок с viewport в JavaScript не нужно: достаточно
#ios
Сценарий узкий, но узнаваемый: полноэкранный мобильный редактор сделан оверлеем с
position: fixed, сверху закреплённая панель инструментов, снизу навигация. Открывается системная клавиатура, и Safari укатывает весь ваш хром за пределы экрана.🔘 воспроизводится только на коротком контенте, поэтому легко не поймать на тестах;
🔘 плясок с viewport в JavaScript не нужно: достаточно
padding-bottom: 60vh на области редактирования.#ios
DEV Community
The iOS Safari keyboard scroll bug, fixed with one line of CSS
If you build a full-screen mobile editor as a position: fixed overlay with a fixed toolbar on top and...
Незарегистрированные приложения выпадут из Google Play 30 сентября
Google включает проверку разработчика: package name приложения должен быть зарегистрирован в Play Console. 99% приложений зарегистрировали автоматически, остальное на вас: проверьте список на главной Play Console. Осталось три недели, дальше приложение удаляют из Play глобально.
С той же даты установки проверяют у пользователей Бразилии, Индонезии, Сингапура и Таиланда, не только из Play: Galaxy Store, GetApps, HONOR и OPPO App Market, Palm Store, V-Appstore. Остальные страны подключат в 2027 году. Сборки, которые вы раздаёте мимо стора, регистрируются в Play Console, иначе они не поставятся на сертифицированные устройства.
Если приложений много, в июле заработали API: Android Developer ID Status API проверяет, зарегистрирован ли package name, Android Developer Console API регистрирует имена из CI/CD.
#android
Google включает проверку разработчика: package name приложения должен быть зарегистрирован в Play Console. 99% приложений зарегистрировали автоматически, остальное на вас: проверьте список на главной Play Console. Осталось три недели, дальше приложение удаляют из Play глобально.
С той же даты установки проверяют у пользователей Бразилии, Индонезии, Сингапура и Таиланда, не только из Play: Galaxy Store, GetApps, HONOR и OPPO App Market, Palm Store, V-Appstore. Остальные страны подключат в 2027 году. Сборки, которые вы раздаёте мимо стора, регистрируются в Play Console, иначе они не поставятся на сертифицированные устройства.
Если приложений много, в июле заработали API: Android Developer ID Status API проверяет, зарегистрирован ли package name, Android Developer Console API регистрирует имена из CI/CD.
#android
В Китае генеративные фичи вашего iOS-приложения могут отвечать иначе
Вызовы Writing Tools и фреймворка Foundation Models вы пишете один раз, а отвечать на них в разных регионах будут разные модели. The New Stack со ссылкой на Reuters пишет, что Apple собрала для Китая отдельную модель при участии Alibaba: ни ChatGPT, ни Gemini, ни Claude предоставлять там свои сервисы не могут, поэтому опереться можно только на то, что разработано или одобрено внутри страны. Рядом с новой моделью должен работать Qwen, возможно и технологии Baidu.
Какая модель отвечает за какую часть Apple Intelligence, ни Apple, ни партнёры не объяснили. Даты запуска тоже нет, Reuters ждёт сервис в ближайшие месяцы.
Так что генеративные фичи придётся тестировать на китайском аккаунте отдельно. Промпт, отлаженный на европейском регионе, там может ответить иначе.
#ios
Вызовы Writing Tools и фреймворка Foundation Models вы пишете один раз, а отвечать на них в разных регионах будут разные модели. The New Stack со ссылкой на Reuters пишет, что Apple собрала для Китая отдельную модель при участии Alibaba: ни ChatGPT, ни Gemini, ни Claude предоставлять там свои сервисы не могут, поэтому опереться можно только на то, что разработано или одобрено внутри страны. Рядом с новой моделью должен работать Qwen, возможно и технологии Baidu.
Какая модель отвечает за какую часть Apple Intelligence, ни Apple, ни партнёры не объяснили. Даты запуска тоже нет, Reuters ждёт сервис в ближайшие месяцы.
Так что генеративные фичи придётся тестировать на китайском аккаунте отдельно. Промпт, отлаженный на европейском регионе, там может ответить иначе.
#ios
Код на C во Flutter дёргается из Dart напрямую, без обвязки под каждую платформу
Готовый код на C в приложении (кодек, крипта, обработка картинок) обычно заворачивают в platform channel, и обвязку пишут дважды: под Android и под iOS. Dart FFI этот слой убирает, Dart вызывает C-функцию сам.
Цена: сигнатуры руками. На каждую функцию объявляете два typedef, один в типах FFI (Int32 Function(Int32, Int32)), второй в дартовых (int Function(int, int)). А функция в библиотеке должна быть с C-совместимым ABI, иначе Dart не найдёт символ.
Загрузка зависит от платформы: на Android библиотека открывается по имени файла, DynamicLibrary.open('libnative_math.so'), в остальных случаях символ ищут в самом процессе приложения, DynamicLibrary.process().
Туториал на dev.to собирает минимальный проект и говорит, где FFI не нужен: под платформенные API Android и iOS ближе platform channels.
#flutter
Готовый код на C в приложении (кодек, крипта, обработка картинок) обычно заворачивают в platform channel, и обвязку пишут дважды: под Android и под iOS. Dart FFI этот слой убирает, Dart вызывает C-функцию сам.
Цена: сигнатуры руками. На каждую функцию объявляете два typedef, один в типах FFI (Int32 Function(Int32, Int32)), второй в дартовых (int Function(int, int)). А функция в библиотеке должна быть с C-совместимым ABI, иначе Dart не найдёт символ.
Загрузка зависит от платформы: на Android библиотека открывается по имени файла, DynamicLibrary.open('libnative_math.so'), в остальных случаях символ ищут в самом процессе приложения, DynamicLibrary.process().
Туториал на dev.to собирает минимальный проект и говорит, где FFI не нужен: под платформенные API Android и iOS ближе platform channels.
#flutter
❤1👍1