Выпуск мобильной платформы Android 14

Компания Google опубликовала релиз открытой мобильной платформы Android 14. Связанные с новым выпуском исходные тексты размещены в Git-репозиторий проекта (ветка android-14.0.0_r1). Обновления прошивки подготовлены для устройств серии Pixel. Позднее планируется подготовить обновления прошивок для смартфонов производства Samsung Galaxy, iQOO, Nothing, OnePlus, Oppo, Realme, Sharp, Sony, Tecno, vivo и Xiaomi. Дополнительно сформированы универсальные сборки GSI (Generic System Images), подходящие для разных устройств на базе архитектур ARM64 и x86_64.

Основные новшества:

  • В основной состав платформы включено хранилище Health Connect, ранее поставляемое в форме отдельного пакета через Google Play. Health Connect обеспечивает централизованное хранение данных с фитнес-браслетов и прочих устройств, имеющих отношение к здоровью пользователя, и организует совместный доступ разных приложений к данным о здоровье. Доступ к настройкам Health Connect теперь будет предоставляться через штатный конфигуратор платформы, например, через настройки конфиденциальности можно управлять к каким именно данным о здоровье могут получить доступ определённые приложения. Кроме того, в Health Connect добавлена поддержка сохранения сведений о пройденном в процессе тренировки маршруте (пользователь определяет промежуток времени для которого будет сохранён список путевых точек). Маршрут может быть визуализирован на карте и при желании передан для обработки другим приложениям, после явного подтверждения операции пользователем.

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

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

  • При работе с приложениями реализована более заметная подсказка с обратной стрелкой, выводимая для упрощения понимания возможности применения экранного жеста для возврата назад.

  • В механизме Sharesheet, применяемом для отправки данных (например, изображения или ссылки) за пределы приложения или другому пользователю, реализована возможность добавления собственных действий. Например, можно определить собственный список обработчиков ChooserAction, показывающих приложения и пользователей, которым возможна отправка. Дополнительно расширен спектр сигналов, применяемых для ранжирования целей для прямой отправки данных.

  • Предоставлена возможность частичного предоставления полномочий для доступа только к выбранным пользователем фотографиям и видео (READ_MEDIA_VISUAL_USER_SELECTED, файлы, к которым предоставляется доступ, выбираются пользователем через интерфейс Photo picker во время появления диалога запроса полномочий). После перевода приложения в фоновый режим или завершения работы программы предоставленное пользователем полномочие автоматически отзывается. В диалоге подтверждения полномочий доступа приложений к мультимедийным файлам появилась возможность предоставления доступа только к выделенным фотографиям или видеороликам.

  • В конфигуратор добавлена секция переопределения настроек региональных предпочтений, таких как единицы измерения температуры, первый день недели и система счисления. Например, живущий в США европеец может настроить использование для отображения температуры градуса Цельсия вместо градуса Фаренгейта и считать понедельник началом недели вместо
    воскресенья.

  • Расширены возможности масштабирования шрифтов, максимальный уровень масштабирования шрифта увеличен со 130% до 200%, а для того, чтобы текст при большом увеличении не выглядел слишком большим автоматически теперь применяется нелинейное изменение уровня масштабирования (уже большой текст увеличивается не так сильно, как мелкий), что позволит добиться оптимальной читаемости текста людьми с ослабленным зрением без опасности появления искажений в компоновке интерфейса.

  • Появившаяся в прошлой ветке поддержка записи видео с высоким динамическим диапазоном яркости (HDR) расширена возможностями по получению с камеры дополнительной информации, дающей возможность сохранения изображений в формате «Ultra HDR«, в котором для кодирования цветности используется 10 бит на канал. Формат Ultra HDR полностью совместим с JPEG, что позволяет приложениям без внесения изменений работать с HDR-изображениями и если необходимо отображать их с использованием обычного диапазона яркости. Вывод в режиме
    HDR обеспечивается автоматически силами платформы в случае активации поддержки HDR в манифесте приложения или при вызове Window.setColorMode. Для отдельной отрисовки Ultra HDR при помощи OpenGL или Vulkan может применяться класс Gainmap.

  • Ограничены типы приложений, которым разрешён вывод полноэкранных уведомлений при блокировке экрана. Подобные уведомления рассчитаны на привлечение внимания к информации, требующей немедленной реакции, такой как поступление входящего звонка или срабатывание будильника, поэтому полномочия для вывода таких уведомлений теперь будут ограничены приложениями для осуществления звонков и вывода предупреждающих сигналов.
  • Улучшено управление анимацией, сигнализирующей о переходе между разными экранами (листами) в приложении при скользящем жесте, сдвигающем содержимое. Добавлены новые компоненты для анимации переключения нижних и боковых экранов, а также вызова поиска. Добавлен API для создания собственных переходных эффектов в приложении.
  • Обновлён набор расширений для камеры (Camera Extensions), в котором предоставлена возможность использования более длительно выполняемых алгоритмов, требующих интенсивных вычислений для обработки изображений, например, для повышения качества снимков, сделанных при низкой освещённости. Добавлены функции для прогнозирования задержек на обработку снимка, получения сведений о прогрессе обработки и быстрого получения чернового варианта снимка до завершения подготовки финального изображения. Реализован более оптимизированный и энергоэффективный режим предпросмотра SurfaceView. Во время использования расширений обеспечена поддержка касания для наведения фокуса и масштабирования.
  • Предоставлена поддержка использования встроенных в камеру возможностей по масштабированию и кадрированию передаваемых RAW-изображений.
  • Для проводных наушников, подключаемых через USB, добавлена возможность применения звуковых форматов без потери качества (lossless). В API добавлен класс AudioMixerAttributes, позволяющий напрямую отправлять звук на устройство, без микширования, корректировки громкости и обработки эффектов.
  • В графическом API реализован класс Mesh, позволяющий создавать свои варианты полигональной сетки с вершинными и фрагментными шейдерами, написанными на языке AGSL.
  • Добавлена возможность аппаратного ускорения отрисовки в буфер, реализованная через класс HardwareBufferRenderer.
  • В класс Path, позволяющий создавать векторную графику на основе составных геометрических контуров, добавлена поддержка интерполяции между контурами c похожей структурой для создания эффекта морфинга и использования итератора PathIterator для последовательного перебора всех сегментов контура.
  • Расширены возможности по привязке отдельных настроек языка к разным приложениям. Предоставлена возможность определения списка языков, которые будут отображаться в конфигураторе Android при выборе языка для конкретного приложения.
  • Расширены области в которых система показывает связанную с конфиденциальностью информацию, определённую разработчиком в Play Console Form, такую как политика в отношении предоставления данных третьим лицам. Например, подобные сведения теперь показываются в диалоге запроса полномочий.
  • В приложениях, использующих обработчики, работающие в фоновом режиме, теперь обязательно указание типа фонового сервиса. Во время работы система проверяет соответствие указанного типа сервиса, запрошенных полномочий и используемого API. Например, если приложение указало тип фонового сервиса FOREGROUND_SERVICE_TYPE_LOCATION, подразумевается, что им могут быть запрошены полномочия ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION.
  • Внесены изменения для повышения безопасности: Запрещена отправка приложениями intent-запросов к некоторым внутренним компонентам платформы. Динамически загружаемый код теперь должен помечаться атрибутом доступа в режиме только для чтения. В функциях
    ZipFile(String) и ZipInputStream.getNextEntry() запрещена обработка zip-архивов, пути в которых начинаются с символа «/» или содержат последовательность «..». Ограничен запуск работ из фоновых обработчиков и обновлены ограничения в области вызова программных интерфейсов, не предоставляемых в SDK.

  • При подключения устройства по USB к стационарному компьютеру помимо ранее доступных режимов взаимодействия, таких как передача файлов, зарядка, раздача интерната и т.п., появилась возможность использования смартфона в роли web-камеры (режим UVC, USB Video Class). По умолчанию данная возможность отключена, но может быть активирована при наличии root-доступа.
  • Продолжено улучшение работы платформы на планшетах и устройствах со складными экранами. Предоставлены библиотеки обеспечивающие предсказание событий, связанных с перемещением указателя, и обеспечивающие низкие задержки при работе со стилусами. Предоставлены шаблоны интерфейса для больших экранов, учитывающие такие применения, как социальные сети, коммуникации, мультимедийный контент, чтение и совершение покупок.
  • Добавлено отдельное полномочие для предоставления приложениям возможности запуска действий при нахождении приложения в фоновом режиме. Активация во время нахождения в фоне ограничена чтобы не отвлекать пользователя во время работы с текущим приложением. Активным приложениям предоставлено больше возможностей для контроля над активацией действий другими приложениями, с которыми они взаимодействуют.
  • Проведена оптимизация системы управления памятью для более рационального выделения ресурсов приложениям, выполняемым в фоновом режиме. Через несколько секунд после перевода приложения в прокэшированное состояние фоновая работа ограничивается работой с API, управляющими жизненным циклом приложения, такими как API Foreground Services, JobScheduler и WorkManager.
  • Уведомления, снабжённые флагом FLAG_ONGOING_EVENT, теперь могут быть отклонены при выводе на устройстве с разблокированным экраном. Если устройство находится в режиме блокировки экрана, подобные уведомления останутся неотклоняемыми. Неотклоняемыми также останутся уведомления, важные для функционирования системы.
  • В API PackageInstaller добавлены новые методы: requestUserPreapproval(), позволяющий каталогу приложений отложить загрузку APK-пакетов до получения от пользователя подтверждения установки; setRequestUpdateOwnership(), позволяющий закрепить за установщиком будущие операции обновления приложения;
    setDontKillApp(), позволяющий установить дополнительные возможности для приложения во время работы с программой. В API InstallConstraints установщикам предоставлена возможность активации установки обновления приложения в моменты, когда приложение не используется.

  • Продолжена работа по улучшению работы платформы на планшетах и устройствах со складными экранами. Обновлены рекомендации по разработке приложений для устройств с большими экранами и добавлены типовые шаблоны интерфейса для больших экранов, учитывающие такие применения, как социальные сети, коммуникации, мультимедийный контент, чтение и совершение покупок. Предложен предварительный выпуск Cross device SDK с инструментами для разработки приложений, корректно работающих с разными типами устройств (смартфоны, планшеты, умные телевизоры и т.п.) и разными форм-факторами.
  • Проведена оптимизация координации выполнения ресурсоёмких фоновых работ, таких как загрузка больших файлов при наличии Wi-Fi-соединения.
    Внесены изменения в API запуска приоритетных сервисов (Foreground Service) и планирования задач (JobScheduler), в которые добавлена новая функциональность для запускаемых пользователем работ, связанных с передачей данных. Введены требования по указанию типа запускаемых приоритетных сервисов (работа с камерой, синхронизация данных, воспроизведение мультимедийных данных, отслеживание местоположения, доступ к микрофону и т.п.). Упрощено определение условий активации загрузки данных, например, для загрузки только при доступе через Wi-Fi.

  • Внутренняя система доставки широковещательных сообщений приложениям (broadcast system) оптимизирована для снижения энергопотребления и повышения отзывчивости. Улучшен приём приложениями зарегистрированных потоков сообщений — сообщения могут помещаться в очередь, объединяться (например, серия сообщений BATTERY_CHANGED будет агрегирована в одно) и доставляться только после выхода приложения из кэшированного состояния.
  • Повышен лимит на максимальное число прокэшированных приложений, что позволило снизить число приложений запускаемых в «холодном» режиме (т.е. не прокэшированных в памяти и запускаемых более медленно). Для устройств с 8 ГБ ОЗУ после изменения ограничений число «холодных» запусков приложений снизилось на 20%, а с 12GB — на 30%.
  • Использование в приложениях функции выполнения операций в точное время (exact alarms) теперь требует получения отдельного полномочия SCHEDULE_EXACT_ALARM, так как применение данной функциональности может негативно влиять на время автономной работы и приводить к повышенному потреблению ресурсов (для заданий, выполняемых по расписанию, рекомендуется использовать активацию в приблизительное время). Приложениям с реализацией календаря и часов, использующим активацию в точное время, при установке должно быть предоставлено полномочие USE_EXACT_ALARM. Публикации в каталоге Google Play приложений с разрешением USE_EXACT_ALARM допускается только для программ с реализацией будильника, таймера и календаря с уведомлениями о событиях.
  • Предоставлена возможность указания настроек языка, привязанных к отдельным приложениям. Разработчик приложения теперь может изменять параметры localeConfig через вызов LocaleManager.setOverrideLocaleConfig для определения списка языков, показываемых для приложения в интерфейсе настройки Android.
  • Добавлен API Grammatical Inflection для упрощения добавления переводов элементов интерфейса, учитывающих языки с системой родов.
  • Для предотвращения перехвата вредоносными приложениями intent-запросов в новой версии запрещена отправка intent-ов без явного указания пакета или внутреннего компонента.
  • Повышена безопасность динамической загрузки кода (DCL, Dynamic Code Loading) — для избежания подстановки вредоносного кода в динамически загружаемые исполняемые файлы, данные файлы теперь должны иметь права доступа, допускающие только чтение.
  • Запрещена установка приложений, для которых заявлена версия SDK ниже 23, что позволит блокировать обход ограничений полномочий через привязку к старым API (версия API 22 запрещена, так как в верcии 23 (Android 6.0) появилась новая модель управления доступом, позволяющая на лету запросить доступ к системным ресурсам). Установленные ранее приложения, использующие старые API, после обновления Android продолжат свою работу.
  • Предложен API Credential Manager, позволяющий организовать в приложениях вход с использованием учётных данных внешних провайдеров аутентификации. Реализована поддержка технологии Passkeys, позволяющей пользователю проходить аутентификацию без паролей с использованием биометрических идентификаторов, таких как отпечаток пальца или распознавание лица.
    Улучшен интерфейс для выбора учётной записи.

  • В Android Runtime (ART) реализована поддержка OpenJDK 17. Базовые Java-библиотеки платформы и средства разработки приложений обновлены до OpenJDK 17. Добавлена поддержка доступных в OpenJDK 17 языковых возможностей и Java-классов, например, классов типа record, многострочных строк и сопоставления c образцом в операторе «instanceof».
  • В Android Runtime задействованы более прогрессивные методы сжатия, позволившие уменьшить размер файлов в среднем на 9.3% без ущерба для производительности.
  • Изменён способ обновления сертификатов удостоверяющих центров (CA). Системные сертификаты больше не будут привязаны к прошивке, а станут доставляться отдельным пакетом, обновляемым через Google Play. Подобный подход упростит поддержание актуальных сертификатов и удаление сертификатов скомпрометированных удостоверяющих центров, а также не позволит производителям устройств манипулировать списком корневых сертификатов и сделает процесс их обновления независимым от обновления прошивки. С другой стороны, новый способ доставки не позволит пользователю вносить изменения в системные сертификаты, даже если он имеет root-доступ в системе и полностью контролирует прошивку.

Источник: http://www.opennet.ru/opennews/art.shtml?num=59873