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

Система Android N еще находится в активной стадии разработки, но ее уже можно опробовать в виде предварительной версии N Developer Preview. В следующих разделах рассматриваются некоторые из ее новых возможностей для разработчиков.

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

Поддержка многооконного режима

В Android N представлена новая долгожданная функция многозадачности – многооконный режим.

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

  • На телефонах и планшетах под управлением Android N пользователи могут запустить два приложения рядом или друг над другом в режиме разделенного экрана. Размеры окон приложений можно изменить с помощью разделителя между ними.
  • На устройствах Android TV для приложений будет доступен режим "картинка в картинке", который позволит приложению отображать контент, пока пользователь просматривает другие приложения или взаимодействует с ними. Более подробная информация приведена ниже.

Рис. 1. Приложения в режиме разделенного экрана.

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

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

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

Новые возможности уведомлений

В Android N изменен дизайн уведомлений, которые стали проще и удобнее. Ниже приведены некоторые изменения.

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

Рис. 2. Группы уведомлений и непосредственный ответ.

Способы реализации новых возможностей описаны в руководстве Уведомления.

Профильная динамическая/предварительная компиляция

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

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

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

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

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

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

Сон на ходу: режим Doze

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

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

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

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

Если устройство снова остается неподвижным в течение определенного периода времени (с погашенным экраном и питанием от аккумулятора), Doze применяет полный набор процессорных и сетевых ограничений к PowerManager.WakeLock, AlarmManager оповещениям и сканированию GPS/Wi-Fi.

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

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

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

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

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

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

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

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

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

Экономия трафика

Рис. 4. Настройка экономии трафика.

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

В Android N появился режим экономии трафика – новая системная служба, которая помогает сократить использование сотового трафика приложениями в роуминге, в конце периода тарификации или для небольших предоплаченных пакетов трафика. Режим экономии трафика дает пользователям возможность контроля использования сотового трафика приложениями и позволяет разработчикам повысить эффективность работы служб.

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

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

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

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

Быстрые настройки являются простым и популярным способом доступа к основным настройкам и действиям непосредственно из панели уведомлений. В Android N возможности быстрых настроек были расширены – они стали еще более полезными и удобными.

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

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

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

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

Дополнительную информацию о создании плиток приложений можно найти в описании android.service.quicksettings.Tile в загружаемом Справочнике по API.

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

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

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

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

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

Дополнительную информацию можно найти в описании android.provider.BlockedNumberContract в загружаемом Справочнике по API.

Фильтрация вызовов

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

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

Дополнительную информацию можно найти в описании android.telecom.CallScreeningService в загружаемом Справочнике по API.

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

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

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

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

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

API-интерфейсы ICU4J в Android

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

Дополнительные сведения по Android ICU4J API содержатся в документе Поддержка ICU4J.

API OpenGL™ ES 3.2

В платформу Android N добавлены интерфейсы и поддержка OpenGL ES 3.2, включая следующие возможности.

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

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

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

Запись Android TV

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

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

Android for Work

В Android for Work добавлены много новых возможностей и API-интерфейсов для устройств под управлением Android N. Некоторые из них приведены ниже. Полный список обновлений Android for Work, касающихся Android N, содержится в списке изменений Android for Work.

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

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

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

Выключение рабочего режима

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

Постоянное подключение к VPN

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

Для этого в интерфейсе DevicePolicyManager используются новые методы setAlwaysOnVpnPackage() и getAlwaysOnVpnPackage().

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

Пользователи могут вручную установить клиентов постоянного подключения к VPN, реализующих методы VPNService, на экране настроек основного пользователя Settings>More>Vpn.

Расширение специальных возможностей

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

Благодаря более приметному расположению этих настроек пользователи чаще будут пробовать ваше приложение с включенными специальными возможностями. Обязательно протестируйте ваше приложение с этими настройками, включив их на экране Settings > Accessibility.

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

Дополнительную информацию можно найти в описании android.accessibilityservice.GestureDescription в загружаемом Справочнике по API.

Режим Direct Boot

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

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

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

Дополнительная информация приведена в документе Direct Boot.

Аттестация ключей

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

Чтобы упростить и повысить безопасность использования аппаратных хранилищ ключей в Android N введена возможность аттестации ключей. Приложения и внешние хранилища ключей могут использовать аттестацию, чтобы определить, является ли пара ключей RSA или EC аппаратной, какие свойства имеет эта пара ключей и какие ограничения применяются к ее использованию и сроку действия.

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

Чтобы убедиться в том, что устройство использует безопасный официальный заводской образ Android, для аттестации ключей требуется предоставление загрузчиком устройства следующей информации о доверенной среде выполнения (TEE):

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

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

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

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

Поддерживаемые возможности:

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

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

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

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

Схема получения подписи APK, версия 2

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

Для поддержки обратной совместимости пакет APK должен быть подписан с помощью первой версии схемы (схема подписи JAR) до того, как он будет подписан по схеме версии 2. Подпись по схеме версии 2 не пройдет подтверждение, если APK будет подписан дополнительным сертификатом после добавления подписи по схеме версии 2.

Поддержка подписи APK по схеме версии 2 будет доступна в последующих выпусках N Developer Preview.

Доступ к выделенным каталогам

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

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

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