Компания Google опубликовала релиз открытой мобильной платформы Android 12. Связанные с новым выпуском исходные тексты размещены в Git-репозиторий проекта (ветка android-12.0.0_r1). Обновления прошивки подготовлены для устройств серии Pixel, а также для смартфонов производства Samsung Galaxy, OnePlus, Oppo, Realme, Tecno, Vivo и Xiaomi. Дополнительно сформированы универсальные сборки GSI (Generic System Images), подходящие для разных устройств на базе архитектур ARM64 и x86_64.
- Предложено одно из наиболее значительных обновлений оформления интерфейса в истории проекта. Новый дизайн реализует концепцию “Material You“, преподносимую как вариант Material Design следующего поколения. Новая концепция будет автоматически применена для всех платформ и элементов интерфейса, и не потребует от разработчиков приложений внесения каких-либо изменений. В июле разработчикам приложений планируется предоставить первый стабильный выпуск нового тулкита для разработки графических интерфейсов – Jetpack Compose.
В самой платформе выделяется новое оформление виджетов. Виджеты сделаны более заметными, усилено скругление углов, предоставлена возможность использования динамических цветов, соответствующих системной теме оформления. Добавлены интерактивные элементы управления, такие как флажки и переключатели (CheckBox, Switch и RadioButton), например, позволяющие в виджете TODO редактировать списки задач, не открывая приложение.
Реализован более гладкий визуальный переход к приложениям, запущенным из виджетов. Упрощена персонализация виджетов – добавлена кнопка (кружок с карандашом) для быстрой перенастройки размещения виджета на экране, появляющаяся при длительном касании к виджету.
Предоставлены дополнительные режимы ограничения размера виджета и возможность использования адаптивной раскладки элементов виджета (responsive layout) для создания типовых раскладок, меняющихся в зависимости от размера видимой области (например, можно сформировать раздельные раскладки для планшетов и смартфонов). В интерфейсе выбора виджетов (widget picker) реализован динамический предпросмотр и возможность отображения описания виджета.
- Добавлена возможность автоматической адаптации системной палитры к цвету выбранных обоев – система автоматически определяет преобладающие цвета, корректирует текущую палитру и применяет изменения ко всем элементам интерфейса, включая область уведомлений, экран блокировки, виджеты и регулятор громкости.
- Реализованы новые анимированные эффекты, такие как постепенное увеличение масштаба и плавный сдвиг областей при прокрутке, появлении и перемещении элементов на экране. Например, при отмене уведомления на экране блокировки, индикатор времени автоматически увеличивается и занимает пространство, которое ранее занимало уведомление.
- Переработано оформление выпадающей области с уведомлениями и быстрыми настройками. В число быстрых настроек добавлены опции для Google Pay и управления умным домом. При удержании кнопки включения питания обеспечен вызов Google Assistant, которому можно дать команду для совершения звонка, вызова приложения или прочтения вслух статьи. К общему виду приведены уведомления с содержимым, заданным приложением.
- Добавлен эффект растягивания границ прокрутки (Stretch overscroll), дающий понять, что пользователь вышел за предел обрасти прокрутки и достиг конца содержимого. Изображение содержимого при новом эффекте как бы растягивается и отпружинивает назад. Новый режим индикации конца прокрутки активирован по умолчанию, но в настройках предусмотрена опция для возврата старого поведения.
- Оптимизирован интерфейс для устройств со складными экранами.
- Реализованы более гладкие звуковые переходы – при переключении от одного приложения, выводящего звук, к другому, звучание первого теперь плавно приглушается, а второго плавно нарастает, без наложения одного звука на другой.
- Модернизирован интерфейс управления сетевыми соединениями в блоке быстрых настроек, панели и системном конфигураторе. Добавлена новая панель Internet, позволяющая быстро переключаться между разными провайдерами и проводить диагностику проблем.
- Добавлена возможность создания скриншотов, охватывающих не только видимую область, но и содержимое в области прокрутки. Возможность сохранения содержимого вне видимой области работает для всех приложений, использующих для вывода класс View. Для реализации поддержки прокручиваемых скриншотов в программах, использующих специфичные интерфейсы, предложен API ScrollCapture.
- Улучшена функция автоматического поворота содержимого экрана, которая теперь может использовать распознавание лица передней камерой для определения необходимости поворота экрана, например, когда человек использует телефон лёжа. Для обеспечения конфиденциальности информация обрабатывается на лету без промежуточного сохранения изображений. Возможность пока доступна только на смартфонах Pixel 4 и более новых моделях.
- Улучшен режим “картинка в картинке” (PIP, Picture in Picture) и повышена плавность переходных эффектов. В случае включения автоматического перехода в PIP при жесте up-to-home (сдвиг низа экрана вверх) приложение теперь сразу переводится в режим
PIP, не дожидаясь завершения анимации. Улучшено изменение размера PIP-окон с содержимым, отличным от видео. Добавлена возможность спрятать PIP-окно через его перетаскивание к левому или правому краю экрана. Изменено поведение при касании к PIP-окну – одно касание теперь приводит к отображению кнопок управления, а двойное меняет размер окна.
- Проведена значительная оптимизация производительности системы – нагрузка на CPU основных системных сервисов снизилась на 22%, что в свою очередь привело к увеличению времени автономной работы на 15%.
За счёт снижение конкуренции блокировок, сокращения задержек и оптимизации ввода/вывода повышена производительность перехода от одного приложений к другому и сокращено время запуска приложений.В PackageManager при работе со снапшотами в режиме только для чтения конкурирование блокировок снижено на 92%. В механизме межпроцессного взаимодействия Binder применено легковесное кэширование, позволившее сократить задержки в 47 раз для некоторых видов вызовов. Повышена производительность обработки файлов dex, odex и vdex, что привело к сокращению времени загрузки приложений, особенно на устройствах с небольшим объёмом памяти. Ускорен запуск приложений из уведомлений, например, запуск Google Photos из уведомления теперь выполняется на 34% быстрее.
Повышена производительность запросов к БД через применение inline-оптимизаций в операции CursorWindow. Для небольших объёмов данных CursorWindow стал быстрее на 36%, а для наборов, включающих более 1000 строк, ускорение может достигать 49 раз.
Предложены критерии для классификации устройств по производительности. В зависимости от возможностей устройства ему присваивается класс производительности, который затем может использоваться в приложениях для ограничения функциональности кодеков на маломощных устройствах или для работы с мультимедийным контентом более высокого качества на мощном оборудовании.
- Реализован режим гибернации приложений, позволяющий если пользователь давно явно не взаимодействовал с программой автоматически сбросить ранее выданные приложению полномочия, остановить выполнение, вернуть используемые приложением ресурсы, такие как память, и заблокировать запуск фоновых работ и отправку push-уведомлений. Режим может применяться для большинства приложений и позволяет защитить данные пользователя, к которым продолжают иметь доступ давно забытые программы. При желании режим гибернации можно выборочно отключить в настройках.
- Оптимизирована анимация при повороте экрана, что позволило снизить задержку перед поворотом примерно на 25%.
- В состав включён новый высокопроизводительный поисковый движок AppSearch, позволяющий индексировать информацию на устройстве и выполнять полнотекстовый поиск с ранжированием результатов. AppSearch предоставляет два типа индексов – для организации поиска в отдельных приложениях и для поиска во всей системе.
- Добавлен API Game Mode и соответствующие настройки, позволяющие управлять профилем производительности игры – например, можно пожертвовать производительностью для продления автономной работы или использовать все доступные ресурсы для достижения максимального FPS.
- Добавлена функция play-as-you-download для загрузки игровых ресурсов в фоне в процессе установки, что позволяет начать играть ещё до того как завершиться загрузка.
приложением. - Повышена отзывчивость и скорость реакции при работе с уведомлениями. Например, при касании пользователя к уведомлению теперь осуществляется мгновенный переход на связанное с ним приложение. В приложениях ограничено использование промежуточных обработчиков уведомлений (notification trampoline).
- Проведена оптимизация IPC-вызовов в Binder. Благодаря применению новой стратегии кэширования и устранению конфликтов при блокировках удалось значительно сократить задержки. В общем виде производительность вызовов Binder увеличилась примерно в два раза, но в не которых областях удалось добиться ещё более существенного ускорения. Например, вызов refContentProvider() стал быстрее в 47 раз, releaseWakeLock() в 15 раз, а JobScheduler.schedule() в 7.9 раза.
- С целью предотвращения возможных проблем с производительностью приложениям запрещено запускать приоритетные сервисы (foreground service) во время работы в фоновом режиме, за исключением нескольких специальных случаев. Для запуска работ при нахождении в фоне рекомендовано использовать WorkManager. Для упрощения перехода предложен новый тип работ в JobScheduler, который запускается сразу, имеет повышенный приоритет и доступ к сети.
- Реализован интерфейс Privacy Dashboard с общим обзором всех настроек полномочий, позволяющий понять к каким данным пользователя приложения имеют доступ. В интерфейсе также доступна шкала времени, визуализирующая историю доступа приложений к микрофону, камере и данным о местоположении. Для каждого приложения можно просмотреть детали и причины обращения к конфиденциальным данным.
- В панель добавлены индикаторы активности микрофона и камеры, появляющиеся, когда приложение обращается к камере или микрофону. При клике на индикаторы появляется диалог с настройками, позволяющий определить какое именно приложение работает с камерой или микрофоном, и при необходимости отозвать полномочия.
- Во всплывающий блок быстрых настроек добавлены переключатели, при помощи которых можно принудительного выключить микрофон и камеру. После выключения попытки обращения к камере и микрофону будут приводить к выводу уведомления и передаче приложению пустых данных.
- Добавлено новое уведомление, показываемое внизу экрана каждый раз, когда приложение пытается прочитать содержимое буфера обмена через вызов функции getPrimaryClip(). Если содержимое из буфера обмена копируется в том же приложении, в котором оно было добавлено, уведомление не выводится.
- Добавлено отдельное полномочие BLUETOOTH_SCAN для сканирования близлежащих устройств по Bluetooth. Ранее данная возможность предоставлялась при наличии доступа к информации о местоположении устройства, что приводило к необходимости предоставления дополнительных полномочий приложениям, которым требуется сопряжение c другим устройством по Bluetooth.
- Модернизирован диалог предоставления доступа к информации о местоположении устройства. Пользователю теперь даётся возможность передать приложению сведения о точном местоположении или предоставить только приблизительные данные, а также ограничить действие полномочий только активным сеансом работы с программой (запретить доступ при нахождении в фоне). Уровень точности данных, выдаваемых при выборе приблизительного местоположения, можно изменить в настройках, в том числе в привязке к отдельным приложениям.
- Разработчикам приложений предоставлена возможность отключить всплывающие окна с предупреждениями, перекрывающими содержимое. Ранее возможность вывода перекрывающих окон регулировалась запросом полномочий, подтверждаемых во время установки приложений, выводящих перекрывающие окна. Инструментов, позволяющих влиять на перекрытие контента из приложений, окна которых перекрываются, не было. При использовании вызова Window#setHideOverlayWindows() все перекрывающие содержимое окна теперь будут автоматически скрываться. Например, скрытие может включаться при выводе особо важной информации, такой как подтверждение транзакции.
- Приложениям предоставлены дополнительные настройки для ограничений операций с уведомлениями во время блокировки экрана. Ранее лишь предоставлялась возможность управления видимостью уведомлений во время блокировки экрана, а теперь можно включить обязательную аутентификацию для совершения любых действий с уведомлениями во время блокировки экрана. Например, приложение для обмена сообщениями может потребовать выполнить аутентификацию перед удалением сообщения или пометкой прочитанным.
- Добавлен API PackageManager.requestChecksums() для запроса и проверки контрольной суммы установленного приложения. Поддерживаются такие алгоритмы, как SHA256, SHA512 и Merkle Root.
- В web-движке WebView реализована возможность использования атрибута SameSite для управления обработкой Cookie.
Значение “SameSite=Lax” ограничивает отправку Cookie для межсайтовых субзапросов, таких как запрос изображения или загрузка контента через iframe с другого сайта. В режиме “SameSite=Strict” Cookie не отправляются для любых видов межсайтовых запросов, включая все входящие ссылки с внешних сайтов. - Продолжена работа над рандомизацией MAC-адресов для исключения возможности отслеживания устройства при подключении к беспроводной сети. Для непривилегированных приложений ограничен доступ к MAC-адресу устройства и при вызове функции getHardwareAddress() теперь возвращается пустое значение.
- Добавлена возможность адаптации элементов интерфейса к устройствам со скруглёнными экранами. Разработчики теперь могут получить информацию о скруглениях экрана и откорректировать элементы интерфейса, попадающие на невидимые угловые области. Через новый API RoundedCorner можно узнать такие параметры, как радиус и центр закругления, а через Display.getRoundedCorner() и WindowInsets.getRoundedCorner() определить координаты каждого скруглённого угла экрана.
- Добавлен новый API CompanionDeviceService, при помощи которого можно активировать приложения, управляющие сопутствующими устройствами, такими как умные часы и фитнес-трекеры.
API решает проблему с запуском и соединением необходимых приложений при появлении поблизости сопутствующего устройства. Система активирует сервис при нахождении устройства поблизости и отправляет уведомление при отключении устройства или при входе или выходе устройства из области видимости. Приложения также могут использовать новый профиль сопутствующих устройств для упрощения настройки полномочий для присоединения к устройству. - Улучшена система прогнозирования пропускной способности. Приложения теперь могут запросить сведения о прогнозируемой общей пропускной способности в привязке к оператору, конкретной беспроводной сети (Wi-Fi SSID), типу сети и уровню сигнала.
- Упрощено применение типовых визуальных эффектов, таких как размывание и искажение цветов, которые теперь можно применять при помощи API RenderEffect к любому объекту RenderNode или всей видимой области, в том числе в цепочке с другими эффектами. Указанная возможность, например, позволяет размыть картинку, выведенную через ImageView, без явного копирования, обработки и замены битмапа, вынося эти действия на сторону платформы.
Дополнительно предложен API Window.setBackgroundBlurRadius(), при помощи которого можно размыть фон окна c эффектом матового стекла и выделить глубину через размытие пространства, окружающего окно. - Интегрированы средства для перекодирования мультимедийных потоков, которые могут использоваться в окружениях с приложением для работы с камерой, сохраняющем видео в формате HEVC, для обеспечения совместимости с приложениями, не поддерживающих данный формат. Для подобных приложений добавлена функция автоматического перекодирования в более распространённый формат AVC.
- Добавлена поддержка формата изображений AVIF (AV1 Image Format), в котором задействованы технологии внутрикадрового сжатия из формата кодирования видео AV1. Контейнер для распространения сжатых данных в AVIF полностью аналогичен HEIF. AVIF поддерживает как изображения в HDR (High Dynamic Range) и цветовом пространстве Wide-gamut, так и в стандартном динамическом диапазоне (SDR).
- Предложен унифицированный API OnReceiveContentListener для вставки и перемещения между приложениями расширенных видов контента (отформатированного текста, изображений, видео, звуковых файлов и т.п.), используя различные источники поступления данных, включая буфер обмена, клавиатуру и интерфейс drag&drop.
- Добавлен реализуемый при помощи встроенного в телефоны вибромотора эффект тактильной обратной связи, частота и интенсивность вибрации в котором зависят от параметров выводимого в текущий момент звука. Новый эффект позволяет физически ощущать звук и может применяться для придания дополнительной реалистичности играм и звуковым программам.
- В режиме погружения (Immersive mode), в котором программа показывается на весь экран со скрытием служебных панелей, упрощена навигация при помощи управляющих жестов. Например, в программах чтения книг, просмотра видео и работы с фотографиями теперь можно перемещаться при помощи одного жеста смахивания.
- В рамках проекта Mainline, позволяющего обновлять отдельные системные компоненты без обновления платформы целиком, подготовлены новые обновляемые системные модули в дополнение к 22 модулям, доступным в Android 11. Обновления затрагивают не привязанные к оборудованию компоненты, которые загружаются через Google Play отдельно от OTA-обновлений прошивки от производителя. Среди новых модулей, которые смогут обновляться через Google Play без обновления прошивки – ART (Android Runtime) и модуль для перкодирования видео.
- В класс WindowInsets добавлен API для определения позиции отображения индикаторов использования камеры и микрофона (индикаторы могут перекрывать элементы управления в развёрнутых на весь экран программах и через указанный API приложение может скорректировать свой интерфейс).
- Для централизованно управляемых устройств добавлена возможность, позволяющая запретить использование переключателей для выключения микрофона и камеры.
- Для выполняемых в фоне CDM-приложений (Companion Device Manager), управляющих сопутствующими устройствами, такими как умные часы и фитнес-трекеры, предоставлена возможность запускать активные (foreground) сервисы.
- Вместо редакции для носимых устройств Android Wear совместно с компанией Samsung решено развивать новую унифицированную платформу, комбинирующую возможности Android и Tizen.
- Расширены возможности редакций Android для автомобильных информационно-развлекательных систем и умных телевизоров.