Компания Google представила бета-версию открытой мобильной платформы Android Q. Релиз Android Q, который скорее всего будет поставляться под номером Android 10, ожидается в третьем квартале 2019 года. Для оценки новых возможностей платформы предложена программа бета-тестирования, в рамках которой экспериментальную ветку можно установить и поддерживать в актуальном виде через штатный интерфейс установки обновлений (OTA, over-the-air), без необходимости ручной замены прошивки. Обновления доступны для устройств Pixel, Pixel XL, Pixel 2, Pixel 2 XL, Pixel 3 и Pixel 3 XL.

Ключевые новшества Android Q:

  • Предоставлено больше инструментов для контроля за доступом приложений к информации о местоположении пользователя. Если раньше, в случае предоставления соответствующих полномочий, приложение могло получить доступ к местоположению в любое время, даже когда оно неактивно (работает в фоне), то в новом выпуске пользователь может разрешить получение информации о его местоположении только в случае активности сеанса с приложением;

  • Добавлены дополнительные ограничения доступа приложений к совместно используемым файлам, таким как коллекции фотографий, видео и музыка;
  • Для доступа к загруженным файлам, размещённым в каталоге Downloads, приложение теперь обязательно должно использовать системный диалог выбора файла, который предоставляет пользователю полный контроль над тем, к каким конкретно файлам может обратиться приложение;
  • Блокирована возможность перехода приложений из фонового выполнения в активное состояние с выходом на передний план и получением фокуса ввода, прерывая таким образом работу пользователя с другим приложением. При необходимости привлечения внимания пользователя фоновым приложением, например, при входящем звонке, теперь следует использовать высокоприоритетные уведомление с получением полномочий на полноэкранный вывод;
  • Ограничен доступ к неизменяемым идентификаторам устройства, таким как IMEI и серийный номер. Для получения подобных идентификаторов приложение должно иметь привилегии READ_PRIVILEGED_PHONE_STATE.
    Приложениям также ограничен доступ к псевдо-ФС «/proc/net» со статистикой сетевой активности, а доступ к данным в буфере обмена отныне предоставляется только когда приложение активно (получило фокус ввода);

  • При отдаче списка контактов приложению прекращено ранжирование вывода по частоте обращения к контактам для сокрытия от приложений информации о предпочтениях пользователя;
  • По умолчанию включена рандомизация MAC-адресов: при подключении к разным беспроводным сетям теперь генерируются разные MAC-адреса, что не позволяет отслеживать перемещение пользователя между WiFi-сетями;
  • Для доступа к API сканирования сетей Bluetooth, сотовых сетей и Wi-Fi теперь требуется получение полномочий на получение точных сведений о местоположении (ранее требовались полномочия на получение приблизительных сведений о местоположении). При этом, если соединение устанавливается в режиме P2P или сеть для подключения определяется системой, то отдельные полномочия на доступ к информации о местоположении не требуются;
  • Реализована поддержка технологии защиты беспроводных сетей WPA3, в которой предоставляется защита от атак по подбору пароля (не позволит подбирать пароль в offline-режиме) и задействован протокол аутентификации SAE. Для генерации ключей шифрования в открытых сетях добавлена поддержка процесса согласования соединения, реализуемого расширением OWE (Opportunistic Wireless Encryption);
  • Добавлена поддержка устройств со сгибающимися складными экранами, таких как Huawei Mate X. На каждой половинке складного экрана теперь может размещаться отдельное приложение. Для поддержки новых типов экранов добавлена поддержка раздельной обработки множественных событий пробуждения и смены фокуса (когда одна половина экрана активна, а другая остаётся закрытой или когда обе половинки активны), а также расширен API для обработки изменения размера экрана (для того чтобы приложение корректно воспринимало увеличение размера экрана при раскрытии второй половины). В эмулятор Android добавлена симуляция устройств со сгибающимися экранами;

  • Добавлена поддержка ярлыков для отправки данных и сообщений (Sharing Shortcuts), позволяющих быстро перейти в приложение, осуществляющее отправку;

  • Добавлена поддержка всплывающих панелей с настройками, которые позволяют обратиться к ключевым системным настройкам в контексте пользовательского приложения. Для отображения панелей настройки из приложения предоставляется API Settings Panel. Например, мультимедийный проигрыватель может показать панель с системными настройками звука, а браузер настройки сетевого подключения и перехода в режим полёта;

  • Проведён рефакторинг беспроводного стека для усиления приватности и увеличения производительности, а также для улучшения управления устройствами интернета вещей через локальный Wi-Fi (например, для вывода на печать через Wi-Fi) и выбора точек подключения. Функции сканирования доступных точек доступа теперь предоставлюется платформой с выводом найденных сетей в интерфейсе Wi-Fi Picker и автоматической настройкой соединения в случае его выбора пользователем. Приложениям через API WifiNetworkSuggestions предоставлена возможность влиять на алгоритм выбора предпочитаемых беспроводных сетей путём передачи приложением ранжированного списка сетей и паролей для подключения к ним. Кроме того, при выборе сети, к которой осуществляется подключение, теперь учитываются метрики о пропускной способности при прошлом подключении (выбирается наиболее быстрая сеть);
  • Добавлены два режима работы Wi-Fi — режим достижения максимальной пропускной способности и режим минимальных задержек (например, полезен для игр и голосовых коммуникаций);
  • Приложения для работы с камерой и изображениями теперь могут запросить у камеры передачу дополнительных XMP-метаданных в файле JPEG, включающих сведения, необходимые для обработки глубины на фотографиях (например, сохраняемая двойными камерами карта глубины). Указанные параметры можно применять для реализации различных режимов размытия фона и эффекта боке, а также для создания 3D-фотографий или в системах дополненной реальности;
  • Добавлена поддержка видеокодека AV1, который позиционируется как общедоступный и не требующий оплаты отчислений свободный формат кодирования видео, который заметно опережает H.264 и VP9 по уровню сжатия;
  • Добавлена поддержка свободного звукового кодека Opus, обеспечивающего высокое качество кодирования и минимальную задержку как при сжатии потокового звука с высоким битрейтом, так и при сжатии голоса в ограниченных по пропускной способности приложениях VoIP-телефонии;
  • Добавлена поддержка стандарта HDR10+, применяемого для кодирования видео с расширенным динамическим диапазоном;
  • В API MediaCodecInfo добавлен упрощённый метод для определения доступных на устройстве возможностей вывода видео (выводится список кодеков и поддерживаемых на устройстве разрешений и FPS);
  • Добавлен API Native MIDI, предоставляющий приложениям на C++ возможность напрямую взаимодействовать с MIDI-устройствами через NDK в неблокирующем режиме, позволяющем обрабатывать MIDI-сообщения с очень низкими задержками;
  • Добавлена поддержка графического API Vulkan 1.1. По сравнению с OpenGL ES использование Vulkan позволяет существенно снизить нагрузку на CPU (до 10 раз в тестах Google) и повысить производительность отрисовки. Конечной целью является повсеместная поддержка Vulkan на всех Android-устройствах, для чего Google работает с производителями оборудования в плане перевода Vulkan 1.1 в разряд обязательных требований для всех 64-разрядных устройств на базе Android Q;
  • Добавлена экспериментальная поддержка выполнения прослойки ANGLE (Almost Native Graphics Layer Engine) поверх графического API Vulkan. ANGLE позволяет выполнить отрисовку, абстрагируясь от специфичных для разных систем API, благодаря трансляции вызовов OpenGL ES в OpenGL, Direct3D 9/11, Desktop GL и Vulkan). Для разработчиков игр и графических приложений ANGLE позволяет использовать обычный драйвер OpenGL ES на всех устройствах, использующих Vulkan;
  • До версии 1.2 обновлён API Neural Networks, предоставляющий приложениям возможности по задействованию средств аппаратного ускорения для систем машинного обучения. API позиционируется как базовая прослойка для функционирования в Android фреймворков машинного обучения, таких как TensorFlow Lite и Caffe2. Для использования на мобильных устройствах предложен ряд готовых моделей нейронных сетей, в том числе MobileNets (распознавание объектов на фотографиях), Inception v3 (компьютерное зрение) и Smart
    Reply (подбор вариантов ответа на сообщения). В новом выпуске добавлено 60 новых операций, включая ARGMAX, ARGMIN и квантуемый LSTM, а также проведены значительные оптимизации производительности, что позволило использовать API для поддержки новых моделей машинного обучения, таких как определение объектов и сегментация изображений;

  • Проведены значительные оптимизации производительности runtime ART, позволившие сократить потребление памяти и ускорить запуск приложений. В Google Play обеспечено распространение профилей
    PGO (Profile Guided Optimization), включающих сведения о наиболее часто выполняемых частях кода. Предкомпиляция подобных частей позволяет существенно сократить время запуска. В самом ART проведена оптимизация для более раннего запуска процесса приложения и перемещения его в изолированный контейнер. В образе памяти приложения обеспечено сохранение дополнительных данных, таких как классы. Реализован многопоточный режим загрузки образов памяти приложений. Повышена эффективность работы сборщика мусора, за счёт раздельной обработки недавно созданных объектов;

  • В API BiometricPrompt, унифицирующем вывод диалога биометрической аутентификации, добавлена поддержка пассивных методов аутентификации, таких как аутентификация по лицу. Предложены раздельные методы обработки явной и не явной аутентификации. При явной аутентификации пользователь должен подтвердить операцию, а при неявной — аутентификация может производится незаметно в пассивном режиме;
  • Добавлена и включена по умолчанию для всех соединений поддержка TLS 1.3. В тестах Google применение TLS 1.3 позволяет до 40% ускорить установку защищённых соединений, по сравнению с TLS 1.2.