
Компания Google опубликовала релиз открытой мобильной платформы Android 17 . Связанные с новым выпуском исходные тексты размещены в Git-репозитории проекта (ветка android-17.0.0_r1). Сборки прошивки подготовлены для устройств Pixel 6/6a/6 Pro, Pixel 7/7a/7 Pro, Pixel 8/8a/8 Pro, Pixel 9/9a/9 Pro/9 Pro XL/9 Pro Fold, Pixel 10/10 Pro/10 Pro XL/10 Pro Fold, Pixel Fold и Pixel Tablet. Предварительные сборки прошивок доступны для устройств HONOR, iQOO, Lenovo, OnePlus, OPPO, realme, Sharp, vivo и Xiaomi. В процессе формирования универсальные сборки GSI (Generic System Images), подходящие для разных устройств на базе архитектур ARM64 и x86_64. Среди изменений ( 1 , 2 , 3 ): Добавлен новый режим многооконной работы - "Bubbles", позволяющий запускать любые приложения в плавающих окнах, напоминающих отображаемые поверх другого контента уведомления для отправки сообщений (" пузыри "), но не привязанные к специализированному API. Открытие приложения в плавающем окне осуществляется через удержание нажатия на пиктограмму приложения. На больших экранах пиктограммы плавающих окон отображаются в отдельной области на панели задач. Подобные окна можно группировать, перемещать и закреплять на экране. Продолжено развитие платформы для устройств с большими экранами, такими как планшеты, ноутбуки, настольные системы и смартфоны со складными экранами. Убраны ранее действовавшие опции для отключения нового поведения на устройствах с экранами шириной более 600 условных пикселей (dp), связанного с игнорированием некоторых API для управления изменением размера и ориентацией экрана (screenOrientation, resizeableActivity, [min|max]AspectRatio), а также адаптивным размещением приложений в окнах, допускающих изменение размера и перемещение по экрану. Добавлен системный API EyeDropper API, при помощи которого приложение может получить информацию о цвете любого пикселя на экране без необходимости получения полномочий на захват экрана. Безопасность обеспечивается благодаря тому, что пользователь сам выбирает область для определения цвета через управляемый платформой интерфейс c "пипеткой, не подконтрольный приложению, т.е. приложение не может запросить информацию о конкретном пикселе и попиксельно воссоздать содержимое экрана. Добавлен системный интерфейс выбора контакта из адресной книги, доступ к которому предоставляется при получении полномочия ACTION_PICK_CONTACTS . Интерфейс позволяет обойтись без предоставления полномочия READ_CONTACTS, позволяющего прочитать все контактные данные. При вызове нового интерфейса пользователь принимает решение о том, какую именно информацию из адресной книги передать приложению с возможностью выбора только отдельных полей. Добавлен API PhotoPickerUiCustomizationParams для изменения интерфейса выбора фотографий, что позволяет приблизить его к стилю вызывающего приложения. Например, можно изменить соотношение сторон эскизов фотографий с 1:1 (квадрат) на 9:16 (портрет). Добавлено полномочие USE_LOCATION_BUTTON, позволяющее встроить в интерфейс приложения системную кнопку предоставления доступа к точным данным о местоположении. Кнопка отрисовывается системой и после нажатия пользователем открывает доступ к местоположению только на время действия текущего сеанса. Добавлена настройка, позволяющая убрать показ названий приложений под их пиктограммами. Изменено оформление панели инструментов для записи скринкастов. Добавлена поддержка экранных реакций (Screen Reactions), совмещающих запись видео с передней камеры с созданием скринкаста для наложения своих комментариев к действиям на экране. Добавлен режим для игр на устройствах со складными экранами, при котором одна половина раскладного экрана используется для отображения игрового процесса, а другая для виртуального геймпада. Добавлен API Handoff , позволяющий передать состояние приложения на находящееся поблизости другое Android-устройство (например, планшет) и продолжить там работу. Реализованы интерактивные закреплённые окна, которые в отличие от традиционных окон в режиме "картинка в картинке" (Picture-in-Picture) остаются интерактивными при закреплении поверх других приложений в десктоп-режиме. Добавлены два новых API: API UWB DL-TDOA - определение позиции устройства внутри здания при помощи Wi-Fi для навигации в помещениях; API Proximity Detection для обнаружения находящихся поблизости устройств через Wi-Fi. Добавлена поддержка формата видео VVC (Versatile Video Coding), известного также как стандарт сжатия видео H.266, разработанный совместно рабочими группами MPEG (ISO/IEC JTC 1) и VCEG (ITU-T), при участии таких компаний, как Apple, Ericsson, Intel, Huawei, Microsoft, Qualcomm и Sony. H.266 идёт на смену H.265 (HEVC) и обеспечивает высокую эффективность передачи и хранения всех экранных разрешений (от SD и HD до 4K и 8K), поддерживает видео с расширенным динамическим диапазоном (HDR, High Dynamic Range) и панорамное видео в режиме 360 градусов. Добавлена возможность записи видео с постоянным уровнем качества. Режим настраивается в объекте MediaRecorder , используя метод setVideoEncodingQuality(), позволяющий зафиксировать уровень качества без привязки к битрейту. Добавлена поддержка формата изображений RAW14, применяемого в профессиональных цифровых камерах и обеспечивающего хранение 15 бит на цветовой канал. Добавлено поддержка формата HDR-видео Eclipsa Video . Добавлен программный кодировщик звукового формата HE-AAC (High-Efficiency Advanced Audio Coding), поддерживающий как низкие, так и высокие битрейты. Добавлено новое полномочие ACCESS_LOCAL_NETWORK для ограничения доступа приложений к локальной сети. Наличие данного полномочия позволяет приложениям определять и подключаться к устройствам в локальной сети, например, к устройствам умного дома и мультимедийным системам. Полномочие добавлено чтобы блокировать сканирование вредоносными приложениями ресурсов в локальной сети, например, для скрытой идентификации окружения пользователя. Расширена защита от перехвата одноразовых паролей (OTP) и кодов подтверждения, отправляемых через SMS. Прямой доступ к подобным сообщениям теперь открывается большинству приложений лишь спустя три часа после поступления сообщения. В штатном приложении для чтения SMS подобные сообщения показываются сразу. Реализована защита от звонков мошенников, представляющихся сотрудниками банка. Платформа может взаимодействовать с установленными банковскими приложениями для подтверждения того, что звонок инициирован банком. Также банки могут определять номера телефонов на которых допускаются только входящие звонки. Добавлена возможность предоставления приложениям временного доступа к данным о точном местоположении, действующего только в течение текущего сеанса работы с программой. Механизм защиты динамической загрузки кода (DCL, Dynamic Code Loading) расширен для применения с нативными библиотеками, загружаемыми через метод System.load(), а не только файлами в форматах DEX и JAR. DCL позволяет избежать подстановки вредоносного кода в динамически загружаемые исполняемые файлы, благодаря выставлению для подобных файлов прав доступа, допускающих только чтение. Включён по умолчанию механизм Certificate Transparency , ведущий публичный лог всех выданных и отозванных сертификатов, Предоставлена возможность заверения APK-пакетов цифровой подписью на базе гибридного алгоритма, сочетающего классический алгоритм с алгоритмом ML-DSA, стойким от подбора на квантовом компьютере. Для приложений, работающих в фоновом режиме, ограничен доступ к API для воспроизведения звука, подключения к звуковым устройствам и изменения громкости. Подразумевается, что только активные приложения, с которыми в данный момент взаимодействует пользователь, могут начинать воспроизведение и менять громкость. Добавлена поддержка гибридного шифрования на основе механизма HPKE (Hybrid Public Key Encryption, RFC 9180), совмещающего простоту передачи ключа в шифровании с открытым ключом с высокой производительностью симметричного шифрования (данные шифруются быстрым симметричным ключом, а сам ключ шифруется медленным асимметричным). При вводе паролей и PIN-кодов при помощи физической клавиатуры по умолчанию отключено отображение последнего введённого символа по мере набора. Для упрощения реализации поддержки тачпадов в играх унифицирована обработка событий от мыши и тачпада - по умолчанию события тачпада, связанные с перемещением указателя и жестами прокрутки, теперь преобразуются в формат с относительными координатами, как для мыши. Доступ к абсолютным координатам предоставляется при явном указании режима POINTER_CAPTURE_MODE_ABSOLUTE. В объект ChooserSession добавлен метод getInitialRestingBounds() , позволяющий узнать финальную позицию и размер диалога выбора (Chooser) после прекращения анимации и загрузки данных. Добавлены методы getStreamingAppMaxDownlinkKbps и getStreamingAppMaxUplinkKbps для определения максимальной пропускной способности канала связи с целью выбора уровня качества при потоковом вещании. Производителям оборудования предоставлен API для создания расширений для камер, позволяющих использовать в приложениях специфичные возможности, такие как механизм улучшения детализации Super Resolution, режимы подавления шумов и AI-оптимизаторы качества. Добавлен API для получения информации о типе камеры (встроенная камера, подключаемая через USB web-камера или виртуальная камера). Добавлена поддержка слуховых аппаратов, подключаемых через интерфейс Bluetooth Low Energy (BLE). Подобные устройства отнесены к новой категории TYPE_BLE_HEARING_AID, что позволяет приложениям разделять слуховые аппараты и наушники, а также отдельно управлять воспроизведением системных звуков (например, можно воспроизводить звуки уведомлений, звонков и будильника на встроенном динамике телефона, а не на слуховом аппарате). Добавлены раздельные настройки для включения показа пароля, вводимого на физической клавиатуре и на сенсорном экране. По умолчанию символы пароля, вводимые при помощи физической клавиатуры, сразу скрываются. Улучшено отображение виджетов приложений на внешних экранах, за счёт учёта разницы в DPI при масштабировании. Добавлен запрос ACTION_VPN_APP_EXCLUSION_SETTINGS, при помощи которого можно вызвать системный экран с настройками, позволяющими открыть приложению сетевой доступ в обход VPN-туннеля. Добавлена поддержка доступных в OpenJDK 25 возможностей языка и Java-классов. Расширены возможности программных интерфейсов для работы с камерой. В объект CameraCaptureSession добавлен метод updateOutputConfigurations() для прикрепления или отключения на лету областей вывода без необходимости перенастройки всего сеанса захвата данных с камеры. На практике изменение позволяет реализовать плавное переключение между разными режимами работы камеры (например, записью видео и съёмкой фотографий). При работе с логическими камерами, охватывающими несколько физических сенсоров, добавлена возможность получения метаданных о каждом сенсоре, а не только о первичном. Объявлен устаревшим атрибут android:usesCleartextTraffic , разрешавший приложению передачу незашифрованного трафика, например, обращения по "http://". При необходимости использования незашифрованного трафика следует использовать отдельные файлы с настройками безопасности . Добавлены настройки для управления историей VoIP-вызовов, позволяющие управлять сохранением сведений в логах и показом в интерфейсе информации о совершённых вызовах. В API Wi-Fi RTT (Round-Trip-Time) расширены возможность непрерывного определения приблизительного расстояния до точек доступа и безопасного определения узлов для P2P-соединений (peer-to-peer). В CompanionDeviceManager добавлены новые профили для запроса полномочий и взаимодействия приложений с медицинскими устройствами и фитнес-трекерами. В Android Runtime (ART) реализован поколенческий сборщик мусора (Generational Concurrent Mark-Compact Garbage Collector), использующий раздельную обработку "старых" и "молодых" объектов, что повышает эффективность очистки недавно созданных объектов с небольшим временем жизни. Применение поколенческого сборщика мусора уменьшает риск приостановок во время выделения ресурсов и снижает нагрузку на CPU, что повышает эффективность потребления энергии. Реализовано ограничение на максимальный объём оперативной памяти, которое может занимать приложение. При превышении лимита, вычисляемого на основе имеющегося в устройстве ОЗУ, приложение принудительно завершается. Для сокращения размера потребляемой памяти предложен R8 Optimizer, упаковывающий имена классов, методов и полей, а также удаляющий неиспользуемый код и ресурсы. При сборке ядра Linux включена оптимизация AutoFDO (Auto-Feedback-Directed Optimization), использующая результаты профилирования c информацией о частоте выполнения различных участков кода для повышения производительности часто выполняемых операций. В проведённых тестах включение AutoFDO для ядра привело к сокращению времени загрузки на 2.1%, ускорению первого запуска программ на 4.3%, повышению эффективности системных вызовов на 9.3%, сокращению времени выполнения mmap-транзакций Binder на 12.3%, HwBinder на 20% и Binder RPC на 21.7%. Предложена новая реализация очереди сообщений android.os.MessageQueue , работающая без блокировок. Новая реализация позволяет повысить производительность и снизить потерю кадров. Приложениям, заявляющим о поддержке Android 17 и более новых выпусков, запрещено изменять значения полей, помеченных как "static final", что позволяет задействовать более агрессивные оптимизации производительности в runtime. Для снижения потребления памяти ограничен размер собственных раскладок оформления уведомлений ( notification view ). В профилировщик ProfilingManager добавлены дополнительные триггеры TRIGGER_TYPE_COLD_START, TRIGGER_TYPE_OOM и TRIGGER_TYPE_KILL_EXCESSIVE_CPU_USAGE для сбора данных, полезных при отладке проблем с производительностью.