На этой странице представлен обзор новых API, функций и изменений поведения, представленных в Android 8.0 (уровень API 26), которые влияют на Android на предприятии.
Новые API и функции
Мы сделали режимы управления владельцем профиля и владельцем устройства более мощными, продуктивными и простыми в настройке, чем когда-либо прежде. Мы также включили совершенно новый сценарий развертывания — рабочие профили на полностью управляемых устройствах. Эти и другие функции описаны в следующих разделах.
Рабочие профили на полностью управляемых устройствах
В Android 8.0 полностью управляемые устройства также могут иметь рабочие профили. Это дает предприятиям возможность разделять приложения и политики, сохраняя при этом контроль и видимость в обоих профилях. Существующий владелец устройства или другой контроллер политики устройств (DPC) может создать управляемый профиль.
Используя рабочие профили на полностью управляемых устройствах, владельцы устройств могут:
- Создайте управляемый профиль без взаимодействия с пользователем, вызвав
EXTRA_PROVISIONING_SKIP_USER_CONSENT
. - Получайте уведомления при создании или удалении дополнительных пользователей или управляемых профилей. Обратные вызовы — это
onUserAdded()
иonUserRemoved()
. - Запретите другим центрам обработки данных создавать управляемые профили с помощью
DISALLOW_ADD_MANAGED_PROFILE
. Этот параметр используется по умолчанию в Android 8.0 для владельцев устройств на новых устройствах или устройствах, обновленных до Android 8.0. - Владельцы устройств также могут запретить пользователям удалять существующие управляемые профили с помощью
DISALLOW_REMOVE_MANAGED_PROFILE
.
Владельцы устройств и владельцы профилей могут общаться друг с другом, если они используют один и тот же APK и владельцы являются аффилированными лицами (см. Принадлежность пользователей ниже).
Более подробную информацию о поддержке этого нового сценария развертывания см. на специальной странице рабочих профилей на полностью управляемых устройствах .
Принадлежность пользователя
Если владелец устройства и владелец профиля представляют одну и ту же организацию:
Владельцы устройства и профиля могут общаться друг с другом в рамках одного APK — они могут захотеть поделиться политиками или статусом (см. Рабочие профили на полностью управляемых устройствах выше).
Функции на уровне устройства, такие как ведение журнала или режим блокировки задач в белом списке, могут применяться к аффилированным пользователям.
Идентификаторы принадлежности, прикрепленные к профилю или пользователю, идентифицируют организации. Когда идентификаторы принадлежности совпадают, пользователи становятся аффилированными. Владельцы устройств и владельцы профилей используют setAffiliationIds() для установки своих идентификаторов принадлежности. Представляйте организации, использующие длинные, трудно угадываемые строковые идентификаторы.
Новый доступ для аффилированных пользователей
Если все дополнительные пользователи и профили на устройстве связаны с владельцем устройства, то доступны следующие функции:
- Ведение журнала безопасности с помощью
setSecurityLoggingEnabled()
. - Ведение журнала сетевой активности с помощью
setNetworkLoggingEnabled()
. - Сообщения об ошибках с помощью
requestBugreport()
.
Журналирование безопасности и отчеты об ошибках ранее были доступны только для однопользовательских устройств или устройств только с одним профилем и одним пользователем.
Режим задачи блокировки доступен дополнительным пользователям и управляемым профилям, если они связаны с владельцем устройства через setLockTaskPackages()
. Более подробную информацию о принадлежности пользователей см. в разделе Аффилированные пользователи .
Индивидуальные заявления об отказе от ответственности
ЦОД теперь могут показывать пользователям свои собственные заявления об отказе от ответственности во время подготовки. Используйте EXTRA_PROVISIONING_DISCLAIMERS
, EXTRA_PROVISIONING_DISCLAIMER_HEADER
и EXTRA_PROVISIONING_DISCLAIMER_CONTENT
для предоставления стилизованных текстовых заявлений об отказе от ответственности. Пользовательские заявления об отказе от ответственности ЦОД отображаются в сворачиваемом списке «Условия».
Безопасность
Владельцы профилей и устройств могут использовать setRequiredStrongAuthTimeout()
, чтобы настроить период ожидания для разблокировки устройства или профиля с помощью вторичного метода аутентификации, например отпечатков пальцев или доверенных агентов. По истечении периода ожидания пользователь должен разблокировать устройство или профиль, используя надежный метод аутентификации, например пароль, PIN-код или графический ключ.
Владельцы устройств и владельцы профилей могут безопасно сбросить пароли устройства и рабочего профиля с помощью resetPasswordWithToken()
. Для устройств, поддерживающих шифрование на основе файлов , этот API доступен до того, как пользователь разблокирует свое устройство или профиль, при условии, что ЦОД поддерживает шифрование.
При блокировке рабочего профиля на устройстве, поддерживающем файловое шифрование, lockNow(int)
может дополнительно удалить основные ключи шифрования рабочего профиля с помощью FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY
. Ключи шифрования также удаляются, если пользователь отключает свой рабочий профиль.
Кроме того, владельцы устройств могут использовать setNetworkLoggingEnabled()
для включения сетевого журнала DNS-запросов и TCP-соединений, инициированных с корпоративных устройств. Дополнительную информацию см. в разделе «Журнал сетевой активности» .
Владельцы профилей могут ограничить, какие из пакетов основного пользователя могут просматривать уведомления рабочего профиля. Вызовите setPermittedCrossProfileNotificationListeners()
чтобы установить пакеты из белого списка, которые получают события через NotificationListenerService
. Установка для разрешенных прослушивателей значения null
(по умолчанию) отключает список разрешенных, и все пакеты могут прослушивать уведомления. Чтобы ограничить события системными пакетами, передайте пустой Set. Чтобы просмотреть приложения, у которых нет доступа к уведомлениям рабочего профиля, пользователи могут нажать «Настройки» > «Приложения и уведомления» > «Доступ к специальным приложениям» > «Доступ к уведомлениям» .
Наконец, владельцы профилей и владельцы устройств могут получить информацию об ожидающих обновлениях системы, доступных на устройстве, с помощью getPendingSystemUpdate()
.
Делегирование API управления приложениями
Делегирование API позволяет владельцам устройств и владельцам профилей полностью переложить управление приложениями на другие приложения. Класс DevicePolicyManager
предоставляет методы для управления областями делегирования, которые владельцы устройств и профилей могут предоставить пакету:
- Метод
setDelegatedScopes()
позволяет владельцам устройств и владельцам профилей предоставлять доступ к привилегированным API другим приложениям. - Метод
getDelegatedScopes()
возвращает области действия, предоставленные пакету. -
getDelegatePackages()
возвращает пакеты, имеющие область действия.
В следующей таблице показано, как различные методы в DevicePolicyManager
организованы в различные области:
Длительно работающие фоновые службы
Владельцы устройств и профилей могут создавать подклассы DeviceAdminService
для создания фоновых служб. Система Android пытается поддерживать работу службы во время работы пользователя. Если вы хотите запускать периодические задачи, рассмотрите возможность использования JobScheduler
перед созданием фоновой службы.
Управление службой резервного копирования
Владельцы устройств могут переключать службу резервного копирования Android, используя новые методы в DevicePolicyManager
. Включите и отключите службу резервного копирования с помощью setBackupServiceEnabled()
. Проверьте статус службы резервного копирования с помощью isBackupServiceEnabled()
.
Настройка прокси-сервера Wi-Fi
Владельцы устройств и владельцы профилей могут настраивать прокси-серверы HTTP для сетей Wi-Fi. Используйте PAC-файл или ручные настройки, чтобы настроить прокси-сервер для каждой сети Wi-Fi. Чтобы установить или удалить прокси-сервер для WifiConfiguration
, вызовите его метод setHttpProxy()
. Чтобы получить настройки прокси, вызовите getHttpProxy()
.
Диалоги с пояснениями для функций, отключенных администратором
Ваше приложение должно показывать полезное объяснение пользователям, пытающимся использовать функцию, отключенную администратором. Все приложения теперь могут использовать createAdminSupportIntent()
для создания намерения, которое отображает диалоговое окно с объяснением при передаче в startActivity(Intent)
. В намерения входят персонализированные локализованные объяснения отключенных камер, отключенных снимков экрана и всех ограничений UserManager
.
Ограничение Bluetooth
Владельцы устройств могут отключить Bluetooth, что повлияет на всех пользователей и профили на устройстве. Чтобы отключить Bluetooth, добавьте пользовательское ограничение DISALLOW_BLUETOOTH
.
Владельцы устройств и владельцы профилей могут запретить пользователям отправлять файлы через Bluetooth с помощью DISALLOW_BLUETOOTH_SHARING
. На получение файлов это не влияет. DISALLOW_BLUETOOTH_SHARING
, установленный владельцем устройства, применяется ко всем пользователям устройства. Этот параметр используется по умолчанию в Android 8.0 для новых и существующих профилей на устройствах, обновленных до Android 8.0.
Изменения в поведении
Если вы создаете приложения для бизнеса, в том числе для ЦОД, вам следует просмотреть следующие изменения поведения в Android 8.0 и соответствующим образом изменить свое приложение.
Удаление пользователей
Владельцы устройств могут удалять дополнительных пользователей и управляемые профили с помощью removeUser()
, даже если включен DISALLOW_REMOVE_USER
.
Безопасность
Аутентификация
В классе DevicePolicyManager
вступили в силу следующие изменения:
- Метод
lockNow()
блокирует рабочий профиль только в том случае, если активно отдельное рабочее задание. - Метод
resetPassword()
больше недоступен для ЦОД, которые действуют как владельцы устройств или владельцев профилей и ориентированы на Android 8.0. При вызове выдается исключение безопасности. Вместо этого ЦОДы должны использоватьresetPasswordWithToken()
.Примечание. Это изменение не затрагивает центры обработки данных, ориентированные на Android 7.1.1 (уровень API 25) или ниже, а также центры обработки данных с правами только администратора устройства.
- Для устройств, поддерживающих шифрование на основе файлов,
isActivePasswordSufficient()
недоступен до тех пор, пока пользователь не разблокирует устройство в первый раз после перезагрузки. Если вызывается до того, как пользователь разблокирует устройство, генерируется исключение.
Данные из заблокированных рабочих профилей
Android 8.0 включает изменения пользовательского интерфейса, позволяющие отделить данные от заблокированного рабочего профиля.
- Уведомления для приложений в рабочем профиле теперь могут скрывать их содержимое. Раньше в панели уведомлений отображалось содержимое рабочих приложений из заблокированного рабочего профиля.
- На экране «Недавние» теперь отображается простая панель для запуска приложений из заблокированного рабочего профиля. Простая панель с цветными клавишами содержит значок и название приложения. Раньше действия или задачи из заблокированного рабочего профиля отображались в предварительном просмотре на экране «Последние».
Целостность устройства
- Флаг
ENSURE_VERIFY_APPS
теперь является глобальным ограничением пользователя. Если у какого-либо пользователя на устройстве есть это ограничение, проверка приложения применяется ко всем пользователям на устройстве. Например, если владелец профиля устанавливает ограничение для рабочего профиля, проверка приложения применяется к личному профилю пользователя. - Метод
onSystemUpdatePending()
теперь вызывается не только для владельцев устройств, но и для владельцев профилей. - При использовании класса
SystemUpdatePolicy
политика отсрочки больше не применяется к исправлениям безопасности, поэтому исправления безопасности больше нельзя отложить. Однако это не повлияет на поведение других типов политик, таких как автоматические и оконные. - Владельцы устройств могут выполнить сброс настроек с помощью
wipeData()
, даже еслиDISALLOW_FACTORY_RESET
включен.
Всегда включенный VPN
В Android 8.0 внесены изменения пользовательского интерфейса, которые помогут пользователям понять статус постоянных VPN-подключений:
- Когда постоянно включенные VPN-соединения отключаются или не могут подключиться, пользователи видят уведомление, которое невозможно закрыть. При нажатии на уведомление отображаются настройки конфигурации VPN. Уведомление исчезает, когда VPN повторно подключается или пользователь отключает опцию «постоянно включенный VPN».
- Always-on VPN позволяет пользователю устройства блокировать любые сетевые подключения, которые не используют VPN. При включении этой опции приложение «Настройки» предупреждает пользователя, что у него не будет подключения к Интернету, пока не подключится VPN. Настройки предлагают пользователю продолжить или отменить действие.
VpnService
VPN-приложений теперь должна вызывать метод startForeground()
после запуска. Поскольку система Android запускает службу VPN-приложения напрямую, ответственность за переход на передний план лежит на приложении. Android 8.0 отключает приложения VPN, которые не переводят службу VPN на передний план.
Обратные вызовы пароля
Обратные вызовы изменения пароля DeviceAdminReceiver
теперь включают user
параметр для идентификации пользователя или профиля, которому принадлежит пароль. Сигнатуры новых методов:
-
onPasswordChanged(Context, Intent, UserHandle)
-
onPasswordExpiring(Context, Intent, UserHandle)
-
onPasswordFailed(Context, Intent, UserHandle)
-
onPasswordSucceeded(Context, Intent, UserHandle)
Реализация каждого нового метода по умолчанию вызывает предыдущую версию, удаляя аргумент пользователя. В Android 8.0 предыдущие методы признаны устаревшими.
Делегирование API управления приложениями
Следующие методы класса DevicePolicyManager
объявлены устаревшими:
-
setCertInstallerPackage()
-
getCertInstallerPackage()
-
setApplicationRestrictionsManagingPackage()
-
getApplicationRestrictionsManagingPackage()
Кроме того, теперь можно делегировать одну область нескольким пакетам. Другими словами, владельцы устройств и владельцы профилей могут одновременно предоставить двум разным пакетам доступ к одному и тому же набору API.