Android 7.0 для разработчиков

Android 7.0 Nougat представляет множество новых функций и возможностей для пользователей и разработчиков. В этом документе описываются новые возможности для разработчиков.

Обязательно ознакомьтесь с изменениями в поведении Android 7.0, чтобы узнать, в каких областях изменения платформы могут повлиять на ваши приложения.

Чтобы узнать больше о потребительских функциях Android 7.0, посетите сайт www.android.com .

Поддержка нескольких окон

В Android 7.0 мы представляем на платформе новую и столь востребованную функцию многозадачности — поддержку нескольких окон.

Теперь пользователи могут открывать на экране два приложения одновременно.

  • На телефонах и планшетах под управлением Android 7.0 пользователи могут запускать два приложения рядом или одно над другим в режиме разделенного экрана. Пользователи могут изменять размер приложений, перетаскивая разделитель между ними.
  • На устройствах Android TV приложения могут переводиться в режим «картинка в картинке» , что позволяет им продолжать показывать контент, пока пользователь просматривает другие приложения или взаимодействует с ними.
Мобильные приложения, работающие в режиме разделенного экрана

Рисунок 1. Приложения, работающие в режиме разделенного экрана.

Поддержка нескольких окон открывает новые способы привлечения пользователей, особенно на планшетах и ​​других устройствах с большим экраном. Вы даже можете включить функцию перетаскивания в своем приложении, чтобы пользователи могли удобно перетаскивать контент в ваше приложение или из него — отличный способ улучшить ваш пользовательский опыт.

Добавить поддержку многооконного режима в ваше приложение и настроить способ обработки многооконного отображения несложно. Например, вы можете указать минимально допустимые размеры вашего действия, не позволяя пользователям изменять размер действия ниже этого размера. Вы также можете отключить многооконный режим для своего приложения, что гарантирует, что система будет отображать ваше приложение только в полноэкранном режиме.

Дополнительную информацию см. в документации разработчика поддержки многооконного режима .

Улучшения уведомлений

В Android 7.0 мы изменили дизайн уведомлений, чтобы сделать их проще и быстрее в использовании. Некоторые из изменений включают в себя:

  • Обновления шаблонов . Мы обновляем шаблоны уведомлений, чтобы сделать новый акцент на изображении героя и аватаре. Разработчики смогут воспользоваться новыми шаблонами с минимальными изменениями в своем коде.
  • Настройка стиля сообщений . Вы можете настроить дополнительные метки пользовательского интерфейса, связанные с вашими уведомлениями, с помощью класса MessagingStyle . Вы можете настроить сообщение, заголовок разговора и вид содержимого.
  • Пакетные уведомления : система может группировать сообщения, например по теме сообщения, и отображать группу. Пользователь может выполнить над ними такие действия, как «Удалить» или «Архивировать». Если вы реализовали уведомления для Android Wear, вы уже знакомы с этой моделью.
  • Прямой ответ . Для приложений для общения в режиме реального времени система Android поддерживает встроенные ответы, поэтому пользователи могут быстро отвечать на SMS или текстовое сообщение непосредственно в интерфейсе уведомлений.
  • Пользовательские представления : два новых API позволяют использовать системные украшения, такие как заголовки уведомлений и действия, при использовании пользовательских представлений в уведомлениях.
Мобильное устройство с отображением связанных уведомлений о сообщениях
Мобильный телефон с уведомлением об одном сообщении
Мобильное устройство, отображающее встроенный ответ на сообщение в интерфейсе уведомлений

Рисунок 2. Пакетные уведомления и прямой ответ.

Чтобы узнать, как реализовать новые функции, см. руководство по Уведомлениям .

JIT/AOT-компиляция на основе профилей

В Android 7.0 мы добавили в ART компилятор Just in Time (JIT) с профилированием кода, который позволяет ему постоянно повышать производительность приложений Android во время их работы. JIT-компилятор дополняет текущий компилятор Ahead of Time (AOT) ART и помогает повысить производительность во время выполнения, сэкономить место для хранения и ускорить обновление приложений и системы.

Компиляция на основе профиля позволяет ART управлять AOT/JIT-компиляцией для каждого приложения в соответствии с его фактическим использованием, а также условиями на устройстве. Например, ART поддерживает профиль горячих методов каждого приложения и может предварительно скомпилировать и кэшировать эти методы для достижения максимальной производительности. Остальные части приложения остаются некомпилированными до тех пор, пока они не будут фактически использованы.

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

ART управляет компиляцией на основе профилей таким образом, чтобы свести к минимуму воздействие на батарею устройства. Он выполняет предварительную компиляцию только тогда, когда устройство находится в режиме ожидания и заряжается, экономя время и батарею, выполняя эту работу заранее.

Быстрый путь к установке приложения

Одним из наиболее ощутимых преимуществ JIT-компилятора ART является скорость установки приложений и обновлений системы. Даже большие приложения, на оптимизацию и установку которых в Android 6.0 требовалось несколько минут, теперь можно установить всего за несколько секунд. Обновления системы также выполняются быстрее, поскольку больше не требуется никаких действий по оптимизации.

Дремать на ходу...

В Android 6.0 появился Doze, системный режим, который экономит заряд батареи, откладывая работу процессора и сети приложений, когда устройство находится в режиме ожидания, например, когда оно находится на столе или в ящике стола.

Теперь в Android 7.0 Doze делает еще один шаг вперед и экономит заряд батареи в пути. Каждый раз, когда экран на какое-то время отключается и устройство отключается от сети, Doze применяет к приложениям подмножество знакомых ограничений ЦП и сети. Это означает, что пользователи могут экономить заряд батареи, даже нося свои устройства в карманах.

Иллюстрация того, как Doze применяет первый уровень ограничения активности системы для увеличения срока службы батареи.

Рис. 3. Doze теперь применяет ограничения для увеличения срока службы батареи, даже если устройство не находится на месте.

Через некоторое время после выключения экрана, когда устройство работает от аккумулятора, Doze ограничивает доступ к сети и откладывает задания и синхронизацию. Во время коротких периодов обслуживания приложениям разрешается доступ к сети, и любые их отложенные задания/синхронизации выполняются. Включение экрана или подключение устройства выводит его из режима сна.

Когда устройство снова находится в неподвижном состоянии, с выключенным экраном и включенным аккумулятором в течение определенного периода времени, Doze применяет полные ограничения ЦП и сети к PowerManager.WakeLock , сигналам тревоги AlarmManager и сканированию GPS/Wi-Fi.

Рекомендации по адаптации вашего приложения к Doze одинаковы, независимо от того, движется устройство или нет, поэтому, если вы уже обновили свое приложение для корректной работы с Doze, все готово. Если нет, начните адаптировать свое приложение к Doze прямо сейчас.

Проект Svelte: фоновая оптимизация

Project Svelte — это постоянная работа по минимизации использования оперативной памяти системой и приложениями на различных устройствах Android в экосистеме. В Android 7.0 проект Svelte сосредоточен на оптимизации работы приложений в фоновом режиме.

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

Начиная с Android 5.0, JobScheduler является предпочтительным способом выполнения фоновой работы, удобным для пользователей. Приложения могут планировать задания, позволяя системе оптимизироваться в зависимости от памяти, мощности и условий подключения. JobScheduler предлагает контроль и простоту, и мы хотим, чтобы все приложения использовали его.

Еще один хороший вариант — GCMNetworkManager , часть сервисов Google Play, который предлагает аналогичное планирование заданий с совместимостью с устаревшими версиями Android.

Мы продолжаем расширять JobScheduler и GCMNetworkManager чтобы они соответствовали большему числу ваших вариантов использования — например, в Android 7.0 теперь вы можете планировать фоновую работу на основе изменений в поставщиках контента. В то же время мы начинаем отказываться от некоторых старых шаблонов, которые могут снизить производительность системы, особенно на устройствах с небольшим объемом памяти.

В Android 7.0 мы удаляем три часто используемых неявных широковещательных сообщения — CONNECTIVITY_ACTION , ACTION_NEW_PICTURE и ACTION_NEW_VIDEO — поскольку они могут разбудить фоновые процессы нескольких приложений одновременно и вызвать нагрузку на память и батарею. Если ваше приложение их получает, воспользуйтесь преимуществами Android 7.0 для перехода на JobScheduler и связанные API.

Подробности см. в документации по фоновой оптимизации .

Поверхностное представление

Android 7.0 привносит синхронное движение в класс SurfaceView , что в некоторых случаях обеспечивает более высокую производительность батареи, чем TextureView : при рендеринге видео или 3D-контента приложения с прокруткой и анимированным положением видео используют меньше энергии с SurfaceView , чем с TextureView .

Класс SurfaceView обеспечивает более экономичную композицию на экране, поскольку она компонуется на специальном оборудовании отдельно от содержимого окна приложения. В результате он делает меньше промежуточных копий, чем TextureView .

Положение содержимого объекта SurfaceView теперь обновляется синхронно с содержимым содержащего его приложения. Одним из результатов этого изменения является то, что простые перемещения или масштабирование видео, воспроизводимого в SurfaceView больше не создают черные полосы вдоль изображения при его перемещении.

Начиная с Android 7.0, мы настоятельно рекомендуем экономить электроэнергию, используя SurfaceView вместо TextureView .

Экономия данных

Экономия данных в настройках

Рисунок 4. Экономия данных в настройках.

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

В Android 7.0 представлен режим экономии данных — новая системная служба, которая помогает сократить использование сотовых данных приложениями, будь то в роуминге, ближе к концу платежного цикла или при использовании небольшого предоплаченного пакета данных. Функция «Экономия данных» дает пользователям контроль над тем, как приложения используют сотовые данные, и позволяет разработчикам обеспечивать более эффективное обслуживание при включенной функции «Экономия данных».

Когда пользователь включает функцию «Экономия данных» в настройках и устройство находится в сети с лимитным трафиком, система блокирует использование фоновых данных и сигнализирует приложениям, чтобы они использовали меньше данных на переднем плане, где это возможно — например, ограничивая скорость передачи данных для потоковой передачи, снижая качество изображения, откладывая передачу данных. оптимистическое предварительное кэширование и так далее. Пользователи могут разрешить определенным приложениям разрешать использование данных в фоновом режиме даже при включенной функции экономии трафика.

Android 7.0 расширяет ConnectivityManager , предоставляя приложениям возможность получать настройки экономии данных пользователя и отслеживать их изменения . Все приложения должны проверять, включил ли пользователь функцию «Экономия данных», и стараться ограничить использование данных на переднем и заднем плане.

Вулкан API

Android 7.0 интегрирует в платформу Vulkan™ , новый API 3D-рендеринга. Как и OpenGL™ ES , Vulkan — это открытый стандарт трехмерной графики и рендеринга, поддерживаемый Khronos Group.

Vulkan спроектирован с нуля, чтобы минимизировать нагрузку на ЦП в драйвере и позволить вашему приложению более напрямую управлять работой графического процессора. Vulkan также обеспечивает лучшее распараллеливание, позволяя нескольким потокам одновременно выполнять такие работы, как построение командного буфера.

Инструменты и библиотеки разработки Vulkan включены в Android 7.0 SDK. Они включают в себя:

  • Заголовки
  • Слои проверки (библиотеки отладки)
  • Компилятор шейдеров SPIR-V
  • Библиотека компиляции шейдеров времени выполнения SPIR-V

Vulkan доступен только для приложений на устройствах с оборудованием, поддерживающим Vulkan, таких как Nexus 5X, Nexus 6P и Nexus Player. Мы тесно сотрудничаем с нашими партнерами, чтобы как можно скорее вывести Vulkan на большее количество устройств.

Дополнительную информацию см. в документации API .

API плитки быстрых настроек

Плитки быстрых настроек в тени уведомлений

Рисунок 5. Плитки быстрых настроек в области уведомлений.

Быстрые настройки — это популярный и простой способ открыть ключевые настройки и действия прямо из панели уведомлений. В Android 7.0 мы расширили возможности быстрых настроек, чтобы сделать их еще более полезными и удобными.

Мы добавили больше места для дополнительных плиток быстрых настроек, доступ к которым пользователи могут получить в области отображения с разбивкой на страницы, проводя пальцем влево или вправо. Мы также предоставили пользователям контроль над тем, какие плитки быстрых настроек появляются и где они отображаются — пользователи могут добавлять или перемещать плитки, просто перетаскивая их.

Для разработчиков в Android 7.0 также добавлен новый API, который позволяет вам определять собственные плитки быстрых настроек, чтобы предоставить пользователям легкий доступ к ключевым элементам управления и действиям в вашем приложении.

Плитки быстрых настроек зарезервированы для элементов управления или действий, которые либо срочно необходимы, либо часто используются, и не должны использоваться в качестве ярлыков для запуска приложения.

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

Информацию о создании плитки приложения см. в справочной документации по Tile .

Блокировка номеров

Android 7.0 теперь поддерживает блокировку номеров на платформе и предоставляет API-интерфейс, позволяющий поставщикам услуг вести список заблокированных номеров. Приложение SMS по умолчанию, приложение телефона по умолчанию и приложения оператора связи могут читать и записывать в список заблокированных номеров. Список недоступен для других приложений.

Сделав блокировку номеров стандартной функцией платформы, Android предоставляет приложениям единый способ поддержки блокировки номеров на широком спектре устройств. Среди других преимуществ, которыми могут воспользоваться приложения:

  • Номера, заблокированные для звонков, также блокируются для текстовых сообщений
  • Заблокированные номера могут сохраняться при сбросе настроек и устройствах с помощью функции резервного копирования и восстановления.
  • Несколько приложений могут использовать один и тот же список заблокированных номеров.

Кроме того, интеграция приложений оператора связи через Android означает, что операторы связи могут читать список заблокированных номеров на устройстве и выполнять блокировку пользователя на стороне службы, чтобы предотвратить попадание нежелательных вызовов и текстовых сообщений к пользователю через любую среду, например конечную точку VOIP или переадресация телефонов.

Дополнительные сведения см. в справочной документации BlockedNumberContract .

Проверка вызовов

Android 7.0 позволяет телефонному приложению по умолчанию проверять входящие вызовы. Телефонное приложение делает это путем реализации нового CallScreeningService , который позволяет телефонному приложению выполнять ряд действий на основе Call.Details входящего вызова, например:

  • Отклонить входящий звонок
  • Запретить вызов в журнал вызовов
  • Не показывать пользователю уведомление о звонке

Дополнительные сведения см. в справочной документации по CallScreeningService .

Поддержка нескольких языков, больше языков

Android 7.0 теперь позволяет пользователям выбирать несколько языков в настройках, чтобы лучше поддерживать двуязычные варианты использования. Приложения могут использовать новый API для получения выбранных пользователем языковых стандартов, а затем предлагать более сложные пользовательские возможности для пользователей с несколькими языковыми стандартами — например, показывать результаты поиска на нескольких языках и не предлагать перевод веб-страниц на язык, который пользователь уже знает.

Помимо поддержки нескольких языков, Android 7.0 также расширяет диапазон языков, доступных пользователям. Он предлагает более 25 вариантов для часто используемых языков, таких как английский, испанский, французский и арабский. Также добавлена ​​частичная поддержка более чем 100 новых языков.

Приложения могут получить список локалей, установленных пользователем, вызвав LocaleList.GetDefault() . Для поддержки расширенного количества локалей в Android 7.0 меняется способ разрешения ресурсов. Обязательно протестируйте и убедитесь, что ваши приложения работают должным образом с новой логикой разрешения ресурсов.

Чтобы узнать о новом поведении разрешения ресурсов и рекомендациях, которым вам следует следовать, см. Многоязычную поддержку .

Новые смайлы

В Android 7.0 представлены дополнительные смайлы и связанные с ними функции, включая смайлики цвета кожи и поддержку переключателей вариантов. Если ваше приложение поддерживает смайлы, следуйте приведенным ниже инструкциям, чтобы воспользоваться преимуществами этих функций, связанных с смайлами.

  • Прежде чем вставлять смайлик, убедитесь, что устройство содержит смайлик. Чтобы проверить, какие смайлы присутствуют в системном шрифте, используйте метод hasGlyph(String) .
  • Убедитесь, что смайлик поддерживает селектор вариантов. Селекторы вариантов позволяют отображать определенные смайлы в цвете или в черно-белом режиме. На мобильных устройствах приложения должны отображать смайлы в цвете, а не в черно-белом виде. Однако если ваше приложение отображает смайлы вместе с текстом, ему следует использовать черно-белый вариант. Чтобы определить, есть ли у смайлика вариацию, воспользуйтесь селектором вариаций. Полный список символов с вариациями см. в разделе «Последовательности вариаций эмодзи» документации Unicode по вариациям .
  • Убедитесь, что смайлик поддерживает оттенок кожи. Android 7.0 позволяет пользователям изменять оттенок кожи смайлов по своему усмотрению. Приложения для клавиатуры должны обеспечивать визуальную индикацию смайлов, имеющих несколько оттенков кожи, и позволять пользователям выбирать тот оттенок кожи, который они предпочитают. Чтобы определить, какие системные смайлы имеют модификаторы тона кожи, используйте метод hasGlyph(String) . Определить, какие смайлы используют оттенки кожи, можно, прочитав документацию Unicode .

API ICU4J в Android

Android 7.0 теперь предлагает подмножество API-интерфейсов ICU4J в рамках Android в пакете android.icu . Миграция проста и в основном предполагает простое изменение пространства имен com.java.icu на android.icu . Если вы уже используете пакет ICU4J в своих приложениях, переход на API-интерфейсы android.icu , предусмотренные в платформе Android, может привести к существенной экономии размера APK.

Дополнительные сведения об API-интерфейсах Android ICU4J см. в разделе Поддержка ICU4J .

Веб-представление

Chrome + WebView вместе

Начиная с Chrome версии 51 на Android 7.0 и более поздних версиях, APK-файл Chrome на вашем устройстве используется для предоставления и отображения системных веб-представлений Android. Этот подход улучшает использование памяти на самом устройстве, а также снижает пропускную способность, необходимую для поддержания актуальности WebView (поскольку автономный APK-файл WebView больше не будет обновляться, пока Chrome остается включенным).

Вы можете выбрать поставщика WebView, включив параметры разработчика и выбрав реализацию WebView . Вы можете использовать любую совместимую версию Chrome (для разработчиков, бета-версию или стабильную версию), установленную на вашем устройстве, или отдельный APK-файл Webview в качестве реализации WebView.

Многопроцессный

Начиная с Chrome версии 51 в Android 7.0, WebView будет запускать веб-контент в отдельном изолированном процессе, если включена опция разработчика «Multiprocess WebView».

Мы ждем отзывов о совместимости и производительности среды выполнения в N, прежде чем включать многопроцессный WebView в будущей версии Android. В этой версии ожидается снижение времени запуска, общего использования памяти и производительности программного рендеринга.

Если вы обнаружите непредвиденные проблемы в многопроцессном режиме, мы хотели бы услышать о них. Пожалуйста, свяжитесь с командой WebView по системе отслеживания ошибок Chromium .

Javascript запускается до загрузки страницы

Начиная с приложений, ориентированных на Android 7.0, контекст Javascript будет сбрасываться при загрузке новой страницы. В настоящее время контекст переносится для первой страницы, загруженной в новый экземпляр WebView.

Разработчики, желающие внедрить Javascript в WebView, должны выполнить сценарий после начала загрузки страницы.

Геолокация в небезопасных источниках

Начиная с приложений, ориентированных на Android 7.0, API геолокации будет разрешен только в безопасных источниках (через HTTPS). Эта политика предназначена для защиты личной информации пользователей, когда они используют небезопасное соединение.

Тестирование с помощью бета-версии WebView

WebView регулярно обновляется, поэтому мы рекомендуем вам часто проверять совместимость с вашим приложением, используя бета-канал WebView. Чтобы начать тестирование предварительных версий WebView на Android 7.0, загрузите и установите Chrome Dev или Chrome Beta и выберите его в качестве реализации WebView в параметрах разработчика, как описано выше. Сообщайте о проблемах через систему отслеживания ошибок Chromium , чтобы мы могли исправить их до выпуска новой версии WebView.

API OpenGL™ ES 3.2

В Android 7.0 добавлены интерфейсы платформы и поддержка платформы OpenGL ES 3.2, в том числе:

  • Все расширения из пакета расширений Android (AEP), за исключением EXT_texture_sRGB_decode .
  • Буферы кадров с плавающей запятой для HDR и отложенного затенения.
  • Вызовы отрисовки BaseVertex для улучшения пакетной и потоковой передачи.
  • Надежный контроль доступа к буферу для снижения накладных расходов WebGL.

API платформы для OpenGL ES 3.2 на Android 7.0 предоставляется с классом GLES32 . При использовании OpenGL ES 3.2 обязательно объявите это требование в файле манифеста, используя тег <uses-feature> и атрибут android:glEsVersion .

Информацию об использовании OpenGL ES, в том числе о том, как проверить поддерживаемую устройством версию OpenGL ES во время выполнения, см. в руководстве OpenGL ES API .

Запись Android-телевидения

В Android 7.0 добавлена ​​возможность записи и воспроизведения контента из служб ввода Android TV через новые API записи. Основываясь на существующих API-интерфейсах со сдвигом во времени, службы телевизионного ввода могут контролировать, какие данные канала могут быть записаны, как сохраняются записанные сеансы, а также управлять взаимодействием пользователя с записанным контентом.

Дополнительную информацию см. в разделе API-интерфейсы записи Android TV .

Android для работы

Android for Work добавляет множество новых функций и API для устройств под управлением Android 7.0. Некоторые основные моменты приведены ниже. Полный список функций см. в списке функций Android Enterprise .

Проблема безопасности рабочего профиля

Владельцы профилей, ориентированные на N SDK, могут указать отдельную задачу безопасности для приложений, работающих в рабочем профиле. Рабочая задача отображается, когда пользователь пытается открыть любое рабочее приложение. Успешное выполнение проверки безопасности разблокирует рабочий профиль и при необходимости расшифровает его. Для владельцев профилей ACTION_SET_NEW_PASSWORD предлагает пользователю установить рабочую задачу, а ACTION_SET_NEW_PARENT_PROFILE_PASSWORD предлагает пользователю установить блокировку устройства.

Владельцы профилей могут установить отдельные политики паролей для рабочих задач (например, какой длины должен быть PIN-код или можно ли использовать отпечаток пальца для разблокировки профиля), используя setPasswordQuality() , setPasswordMinimumLength() и связанные методы. Владелец профиля также может установить блокировку устройства с помощью экземпляра DevicePolicyManager , возвращаемого новым методом getParentProfileInstance() . Кроме того, владельцы профилей могут настроить экран учетных данных для рабочего задания, используя новые методы setOrganizationColor() и setOrganizationName() .

Выключить работу

На устройстве с рабочим профилем пользователи могут переключать рабочий режим. Когда рабочий режим выключен, управляемый пользователь временно отключается, что отключает приложения рабочего профиля, фоновую синхронизацию и уведомления. Сюда входит приложение владельца профиля. Когда рабочий режим выключен, система отображает постоянный значок состояния, напоминающий пользователю, что он не может запускать рабочие приложения. Панель запуска указывает, что рабочие приложения и виджеты недоступны.

Всегда подключен к VPN

Владельцы устройств и владельцы профилей могут гарантировать, что рабочие приложения всегда подключаются через указанную VPN. Система автоматически запускает этот VPN после загрузки устройства.

Новые методы DevicePolicyManagersetAlwaysOnVpnPackage() и getAlwaysOnVpnPackage() .

Поскольку службы VPN могут быть связаны с системой напрямую без взаимодействия с приложением, VPN-клиентам необходимо обрабатывать новые точки входа для Always on VPN. Как и прежде, службы указываются системе с помощью действия, соответствующего фильтру намерений android.net.VpnService .

Пользователи также могут вручную настроить клиенты Always on VPN, реализующие методы VPNService , с помощью «Настройки»> «Дополнительно»> «Vpn» . Возможность включить Always on VPN в настройках доступна только в том случае, если VPN-клиент ориентирован на уровень API 24.

Индивидуальная подготовка

Приложение может настроить процессы подготовки владельца профиля и владельца устройства с помощью корпоративных цветов и логотипов. DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR настраивает цвет потока. DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI настраивает поток с помощью корпоративного логотипа.

Улучшения специальных возможностей

Android 7.0 теперь предлагает настройки Vision прямо на экране приветствия для настройки нового устройства. Это значительно упрощает пользователям поиск и настройку специальных возможностей на своих устройствах, включая жест увеличения, размер шрифта, размер дисплея и TalkBack.

Поскольку эти специальные возможности занимают более видное место, ваши пользователи с большей вероятностью попробуют ваше приложение с их включенными функциями. Обязательно тестируйте свои приложения заранее с включенными этими настройками. Вы можете включить их в меню «Настройки» > «Доступность».

Также в Android 7.0 службы специальных возможностей теперь могут помочь пользователям с нарушениями моторики прикасаться к экрану. Новый API позволяет создавать сервисы с такими функциями, как отслеживание лиц, глаз, точечное сканирование и т. д., чтобы удовлетворить потребности этих пользователей.

Дополнительные сведения см. в справочной документации GestureDescription .

Прямая загрузка

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

Прямая загрузка использует файловое шифрование в Android 7.0, чтобы обеспечить детальную политику шифрования как для данных системы, так и для данных приложений. Система использует хранилище, зашифрованное устройством, для избранных системных данных и явно зарегистрированных данных приложений. По умолчанию хранилище с зашифрованными учетными данными используется для всех остальных системных данных, пользовательских данных, приложений и данных приложений.

При загрузке система запускается в ограниченном режиме с доступом только к данным, зашифрованным устройством, без общего доступа к приложениям или данным. Если у вас есть компоненты, которые вы хотите запустить в этом режиме, вы можете зарегистрировать их, установив флаг в манифесте. После перезапуска система активирует зарегистрированные компоненты, передавая намерение LOCKED_BOOT_COMPLETED . Система гарантирует, что данные приложения, зашифрованные на зарегистрированном устройстве, будут доступны до разблокировки. Все остальные данные недоступны до тех пор, пока Пользователь не подтвердит свои учетные данные на экране блокировки для их расшифровки.

Дополнительную информацию см. в разделе Прямая загрузка .

Ключевая аттестация

В Android 7.0 представлена ​​аттестация ключей — новый инструмент безопасности, который помогает вам убедиться, что пары ключей, хранящиеся в аппаратном хранилище ключей устройства, должным образом защищают конфиденциальную информацию, которую использует ваше приложение. Используя этот инструмент, вы получаете дополнительную уверенность в том, что ваше приложение взаимодействует с ключами, которые находятся на защищенном оборудовании, даже если устройство, на котором работает ваше приложение, имеет root-доступ. Если вы используете ключи из аппаратного хранилища ключей в своих приложениях, вам следует использовать этот инструмент, особенно если вы используете ключи для проверки конфиденциальной информации в вашем приложении.

Аттестация ключей позволяет убедиться, что пара ключей RSA или EC была создана и сохранена в аппаратном хранилище ключей устройства в доверенной среде выполнения устройства (TEE). Этот инструмент также позволяет вам использовать службу вне устройства, например внутренний сервер вашего приложения, для определения и строгой проверки использования и действительности пары ключей. Эти функции обеспечивают дополнительный уровень безопасности, который защищает пару ключей, даже если кто-то рутирует устройство или ставит под угрозу безопасность платформы Android, работающей на устройстве.

Примечание. Лишь небольшое количество устройств под управлением Android 7.0 поддерживают аттестацию ключей на аппаратном уровне; все остальные устройства под управлением Android 7.0 вместо этого используют аттестацию ключей на программном уровне. Прежде чем проверять свойства аппаратных ключей устройства в среде производственного уровня, необходимо убедиться, что устройство поддерживает аттестацию ключей на аппаратном уровне. Для этого вам следует убедиться, что цепочка сертификатов аттестации содержит корневой сертификат, подписанный корневым ключом аттестации Google, и что для элемента attestationSecurityLevel в структуре данных описания ключа установлен уровень безопасности TrustedEnvironment.

Дополнительные сведения см. в документации разработчика Key Attestation .

Конфигурация сетевой безопасности

В Android 7.0 приложения могут безопасно настраивать поведение своих безопасных (HTTPS, TLS) соединений без какой-либо модификации кода, используя декларативную конфигурацию сетевой безопасности вместо использования традиционных программных API, подверженных ошибкам (например, X509TrustManager).

Поддерживаемые функции:

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

Дополнительные сведения см. в разделе Настройка сетевой безопасности .

Доверенный центр сертификации по умолчанию

По умолчанию приложения, предназначенные для Android 7.0, доверяют только сертификатам, предоставленным системой, и больше не доверяют добавленным пользователем центрам сертификации (CA). Приложения, ориентированные на Android 7.0 (уровень API 24), которые хотят доверять добавленным пользователем центрам сертификации, должны использовать конфигурацию сетевой безопасности , чтобы указать, как следует доверять пользовательским центрам сертификации.

Схема подписи APK v2

В Android 7.0 представлена ​​схема подписи APK v2, новая схема подписи приложений, которая обеспечивает более быструю установку приложений и большую защиту от несанкционированных изменений в APK-файлах. По умолчанию Android Studio 2.2 и подключаемый модуль Android для Gradle 2.2 подписывают ваше приложение, используя как схему подписи APK v2, так и традиционную схему подписи, в которой используется подпись JAR.

Хотя мы рекомендуем применять схему подписи APK v2 к вашему приложению, эта новая схема не является обязательной. Если ваше приложение не собирается должным образом при использовании схемы подписи APK v2, вы можете отключить новую схему. Процесс отключения приводит к тому, что Android Studio 2.2 и подключаемый модуль Android для Gradle 2.2 подписывают ваше приложение, используя только традиционную схему подписи. Чтобы подписать только традиционную схему, откройте файл build.gradle уровня модуля, затем добавьте строку v2SigningEnabled false в конфигурацию подписи выпуска:

  android {
    ...
    defaultConfig { ... }
    signingConfigs {
      release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
        v2SigningEnabled false
      }
    }
  }

Внимание: если вы подписываете свое приложение с помощью схемы подписи APK v2 и вносите в приложение дальнейшие изменения, подпись приложения становится недействительной. По этой причине используйте такие инструменты, как zipalign , до подписания приложения с помощью схемы подписи APK v2, а не после.

Для получения дополнительной информации прочтите документы Android Studio, в которых описывается, как подписать приложение в Android Studio и как настроить файл сборки для подписи приложений с помощью подключаемого модуля Android для Gradle.

Доступ к каталогу с ограниченной областью действия

В Android 7.0 приложения могут использовать новые API для запроса доступа к определенным каталогам внешнего хранилища , включая каталоги на съемных носителях, таких как SD-карты. Новые API значительно упрощают доступ вашего приложения к стандартным каталогам внешнего хранилища, таким как каталог Pictures . Такие приложения, как фото-приложения, могут использовать эти API вместо READ_EXTERNAL_STORAGE , который предоставляет доступ ко всем каталогам хранилища, или Storage Access Framework, который заставляет пользователя переходить к каталогу.

Кроме того, новые API упрощают действия, которые пользователь выполняет для предоставления доступа к внешнему хранилищу вашего приложения. Когда вы используете новые API, система использует простой пользовательский интерфейс разрешений, в котором четко указано, к какому каталогу приложение запрашивает доступ.

Дополнительные сведения см. в документации разработчика Scoped Directory Access .

Помощник по сочетаниям клавиш

В Android 7.0 пользователь может нажать Meta + /, чтобы вызвать экран сочетаний клавиш , на котором отображаются все сочетания клавиш, доступные как в системе, так и в приложении в фокусе. Система автоматически извлекает эти ярлыки из меню приложения, если они существуют. Вы также можете предоставить свои собственные списки ярлыков для экрана. Вы можете сделать это, переопределив метод onProvideKeyboardShortcuts() .

ПРИМЕЧАНИЕ. Мета -клавиша отсутствует на всех клавиатурах: на клавиатуре Macintosh это командная клавиша, на клавиатуре Windows, это клавиша Windows , а на Pixel C и клавиатуре Chromeos это клавиша поиска .

Чтобы запустить вспомогательные сочетания клавиш из любой точки вашего приложения, вызовите requestShowKeyboardShortcuts() из соответствующей деятельности.

Пользовательский API

Android 7.0 представляет API пользовательского указателя, который позволяет настроить внешний вид, видимость и поведение указателя. Эта возможность особенно полезна, когда пользователь использует мышь или сенсорную панель для взаимодействия с объектами пользовательского интерфейса. Указатель по умолчанию использует стандартный значок. Этот API также включает в себя расширенную функциональность, такую ​​как изменение внешнего вида значка указателя на основе конкретных движений мыши или сенсорной панели.

Чтобы установить значок указателя, переопределите метод onResolvePointerIcon() класса View . В этом методе используется объект PointerIcon , чтобы нарисовать значок, который соответствует конкретному событию движения.

Устойчивая производительность API

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

Для решения этих ограничений Android 7.0 включает в себя поддержку режима устойчивой производительности , что позволяет OEM-производителям предоставлять подсказки о возможностях производительности устройств для длительных приложений. Разработчики приложений могут использовать эти подсказки для настройки приложений для предсказуемого, постоянного уровня производительности устройства в течение длительных периодов времени.

Разработчики приложений могут попробовать этот новый API в Android 7.0 только на устройствах Nexus 6p. Чтобы использовать эту функцию, установите флаг устойчивого окна производительности для окна, которое вы хотите запустить в режиме постоянной производительности. Установите этот флаг, используя метод Window.setSustainedPerformanceMode() . Система автоматически отключает этот режим, когда окно больше не находится в фокусе.

VR поддержка

Android 7.0 добавляет поддержку и оптимизацию платформы для нового режима VR, чтобы разработчики создали высококачественные мобильные виртуальные машины для пользователей. Существует ряд улучшений производительности, в том числе доступ к эксклюзивному ядру ЦП для приложений VR. В ваших приложениях вы можете воспользоваться интеллектуальным отслеживанием головы и стерео уведомлениями, которые работают для виртуальной реальности. Самое главное, что Android 7.0 обеспечивает очень низкую задержку графики. Для получения полной информации о создании приложений VR для Android 7.0 см. Google VR SDK для Android .

В Android 7.0 разработчики сервисов печати теперь могут выявить дополнительную информацию о отдельных принтерах и заданиях по печати.

При перечислении отдельных принтеров служба печати теперь может устанавливать значки для Per Printer двумя способами:

  • Вы можете установить значок с идентификатора ресурса, позвонив setIconResourceId() .
  • Вы можете отобразить значок из сети, позвонив setHasCustomPrinterIcon() и установив обратный вызов, когда значок запрошен с помощью onRequestCustomPrinterIcon() .

Кроме того, вы можете предоставить деятельность за Per Print для отображения дополнительной информации, вызывая setInfoIntent() .

Вы можете указать прогресс и статус заданий печати в уведомлении о заданиях печати, вызывая setProgress() и setStatus() соответственно.

Метрики кадров API

API рамы API позволяет приложению контролировать производительность рендеринга пользовательского интерфейса. API предоставляет эту возможность, обнажая потоковой паб/Sub API для передачи информации о времени рамки для текущего окна приложения. Возвращенные данные эквивалентны то, что отображается adb shell dumpsys gfxinfo framestats , но не ограничивается последними 120 кадрами.

Вы можете использовать API Metrics Frame для измерения эффективности пользовательского интерфейса на уровне взаимодействия в производстве без USB-соединения. Этот API позволяет собирать данные с гораздо более высокой гранулярностью, чем adb shell dumpsys gfxinfo . Эта более высокая гранулярность возможна, потому что система может собирать данные для конкретных взаимодействий в приложении; Система не должна захватывать глобальную резюме эффективности всего приложения или очищать какое -либо глобальное состояние. Вы можете использовать эту возможность для сбора данных о производительности и регрессий подъема в производительности пользовательского интерфейса для реальных вариантов использования в приложении.

Чтобы отслеживать окно, реализуйте метод обратного вызова OnFrameMetricsAvailableListener.onFrameMetricsAvailable() и зарегистрируйте его в этом окне.

API предоставляет объект FrameMetrics , который содержит данные о времени, которые подсистема рендеринга сообщает для различных этапов в жизненном цикле кадра. Поддерживаемые метрики: UNKNOWN_DELAY_DURATION , INPUT_HANDLING_DURATION , ANIMATION_DURATION , LAYOUT_MEASURE_DURATION , DRAW_DURATION , SYNC_DURATION , COMMAND_ISSUE_DURATION , SWAP_BUFFERS_DURATION , TOTAL_DURATION и FIRST_DRAW_FRAME .

Виртуальные файлы

В предыдущих версиях Android ваше приложение может использовать структуру доступа к хранилищам, чтобы позволить пользователям выбирать файлы из своих учетных записей облачных хранилищ, таких как Google Drive. Тем не менее, не было никакого способа представлять файлы, которые не имели прямого представления по байт -коду; Каждый файл должен был предоставить поток ввода.

Android 7.0 добавляет концепцию виртуальных файлов в структуру доступа к хранилищу. Функция виртуальных файлов позволяет вашим DocumentsProvider возвращать URI документа, которые можно использовать с намерением ACTION_VIEW даже если у них нет прямого представления ByteCode. Android 7.0 также позволяет предоставлять альтернативные форматы для пользовательских файлов, виртуальных или иных.

Для получения дополнительной информации об открытии виртуальных файлов см. Открытые виртуальные файлы в Руководстве по фреймворкам для хранения .