Далеко не всегда устройства с операционной системой Android используются как персональный гаджет. Иногда они служат одной конкретной бизнес-цели, и необходимость в предустановленных свойствах девайса отпадает.
В этой статье рассказываем, как мы в Axmor используем несколько простых манипуляций с Android Management API, чтобы заблокировать ненужные функции без root-прав.
SingleApp-устройства можно встретить в ресторанах, аэропортах, гостиницах, а также в корпоративной сфере
Каждый из нас хоть раз в жизни имел дело с корпоративными девайсами:
в случае клиентских приложений они используются для покупки билетов, заказа еды в ресторанах, регистрации гостей и т.д;
При такой эксплуатации часто требуется ограничить устройство одним приложением. Иногда для этих целей используются специализированные компьютеры, но по сути любой планшет или смартфон можно превратить в то, что в документации по Android-разработке называют Dedicated device.
В нашей компании разрабатывается много enterprise-приложений, из-за чего мы часто сталкиваемся с необходимостью блокировки функций на dedicated devices. Например, в нашей практике было приложение для инженеров по безопасности на промышленных предприятиях. Эти специалисты ходят по заводу, следят за исправностью трубопроводов и должны куда-то заносить собранные данные:
Android Device Policy #shorts
Компания-заказчик закупила для этой цели несколько десятков смартфонов на Android и заказала нам приложение со следующими требованиями:
Часть этого функционала можно реализовать довольно просто, однако на текущий момент устройство без root-прав не позволяет как-либо блокировать взаимодействие со статус-баром и пуш-уведомлениями. Также не удастся ничего сделать с кнопкой “Последние приложения”.
Тут на помощь приходит Android Management API и device policy controller (DPC), которые позволят выполнять настройку корпоративных устройств в кратчайшие сроки и по своему усмотрению блокировать любые функции.
Инструменты для управления устройством: Device policy controller и Android Management API
DPC — это приложение, которое может контролировать разрешения других приложений, а также блокировать различные функции устройства. Соответственно, используя кастомный DPC, мы можем в том числе скрывать статус-бар и блокировать системные кнопки на устройстве.
Написание собственного DPC довольно трудозатратно, т.к. включает в себя написание целого приложения, единственная функция которого — ограничивать возможности пользователя при работе с устройством. Кроме того, любые изменения в политике устройства придётся внедрять в коде, что повлечет за собой выпуск новой версии этого приложения.
Чтобы упростить жизнь разработчикам таких решений, Google в 2017 году выпустил свой DPC, который называется Android Device Policy и управляется с помощью Android Management API. Чтобы использовать Android Management API, нужно выполнить несколько шагов:
Использование Android Management API для создания SingleApp-устройства
Google Apps Device Policy
Вернёмся теперь к списку требований для Dedicated device и рассмотрим, как их можно реализовать с помощью policy. Чтобы выбранное приложение всегда присутствовало на экране и запускалось автоматически после перезагрузки, оно должно заменить стандартное Home app. Для этого нужно добавить следующий блок в политику:
Чтобы запустить lockTaskMode, просто вызовите в коде основного Activity своего приложения соответствующий метод:
Чтобы скрыть статус бар, нужно добавить в policy
Ну а для того, чтобы экран всегда оставался включенным, нужно просто добавить флаг android_keepScreenOn=»true» в корневую ViewGroup Activity. Итоговый JSON политики будет выглядеть примерно так:
], «persistentPreferredActivities»: [ ], «playStoreMode»: «WHITELIST», «safeBootDisabled»: true, «screenCaptureDisabled»: true, «statusBarDisabled»: true, «systemUpdate»: >
Различные примеры политик можно посмотреть тут. А все возможные параметры для политики — тут.
Есть ещё одна проблема, с которой мы столкнулись при разработке нашего решения. В одном из проектов Axmor заказчику требовался функционал выхода из заблокированного режима, чтобы можно было снова полноценно пользоваться устройством без сброса к заводским настройкам. Это можно сделать через создание двух разных политик — policy_locked и policy_unlocked, и инициируя их смену через backend с устройства. Но дело в том, что с устройства нельзя напрямую получить его внутренний id в Android Management API, а значит — нельзя выполнить никакие операции с ним. До Android 10 можно найти устройство в общем списке по его серийному номеру, который хранится в Device.hardwareInfo.serialNumber, сравнив его с серийным номером, полученным через Build.getSerial() или Build.SERIAL, однако начиная с Android 10, получение серийного номера запрещено для несистемных приложений.
Как опубликовать enterprise-приложение в Google Play
Решение — использовать Managed Google Play и выложить наше приложение как private app. Для этого нужно сначала загрузить приложение в Google Play, затем зайти в Store Presence -> Pricing User programs -> Managed Google Play, отметить Turn on advanced managed Google Play features -> Privately target this app to a list of organizations. Здесь нужно выбрать id enterprise, для которой мы регистрируем устройства. Теперь, если в policy для нашего приложения будет прописано поле installType как FORCE_INSTALLED, оно будет установлено автоматически при регистрации устройства.
Несмотря на некоторые недостатки, Android Management API в настоящий момент — самый простой и удобный способ для создания Dedicated device или устройства одного приложения в ОС Android. Большие возможности для кастомизации позволяют делегировать непосредственное выполнение кода для создания ограничений на устройстве готовому DPC, что способно существенно сократить время разработки. Нам на мобильных проектах в Axmor это API позволяет сократить время на выполнение “рутинной” работы по реализации ограничений и уделить больше внимания самому Single App.
Предназначение и удаление Device Policy на Android
Пользователи Android нередко замечают на своих смартфонах различные приложения, о предназначении и происхождении которых ничего не знают. Это может быть как предустановленный софт, так и появившийся после обновления, или же момент появления неизвестен вовсе. В любом случае, если программа не устанавливалась собственноручно, пользователя всегда интересует, откуда она взялась, зачем нужна и можно ли её удалить с устройства. К таким приложениям относится и Device Policy. И хотя софт не является вредоносным, его необходимость на устройстве рядового юзера сильно под сомнением.
Описание приложения Google Apps Device Policy
Для начала разберёмся, откуда берётся Device Policy на девайсах под управлением Android, что это за софт и для чего используется. Сразу отметим, с программой сталкивались пользователи независимо от бренда Android-устройства, вариации и версии прошивки на базе данной ОС (например, MIUI от Xiaomi и прочие).
Device Policy являет собой бесплатное приложение от компании Google для Android 2.2 и выше, задача которого заключается в усилении защиты смартфона за счёт возможности удалённого управления настройками безопасности и политиками. При потере или краже девайса он может быть заблокирован, а находящиеся на нём данные дистанционно удалены администратором, что не позволит информации попасть в чужие руки. Узнать, где находится аппарат, отследить его активность можно на странице My Devices, по аналогии с функцией Find My iPhone, сервиса от компании Apple.
Так, программой обеспечивается соблюдение политик безопасности организации на устройствах сотрудников. После настройки приложения и авторизации в корпоративной учётной записи на смартфоне с помощью Device Policy IT-администратор с целью защиты корпоративных данных управляет параметрами безопасности и политиками, при этом пользователь может скорректировать полномочия и не давать дополнительных разрешений, продолжая в то же время использовать софт.
Вы сможете просматривать правила безопасности и настройки сети, установленные администратором, а также увидеть сведения о телефоне, доступные администратору.
Функционал программы предлагает следующие возможности по защите персональных данных:
- просмотр перемещения смартфона по GPS;
- смена PIN-кода;
- включение звука для поиска потерянного устройства;
- блокировка экрана.
Так что Device Policy – программа полезная. Другое дело, что не каждому она нужна, а потому многие пользователи рассматривают возможность удаления софта.
Программой запрашиваются следующие разрешения:
- доступ к камере для сканирования QR-кода;
- идентификаторы устройств и аккаунтов;
- доступ к контактам (потребуется при добавлении аккаунта);
- местоположение для запроса доступных Wi-Fi-сетей и подключения новой сети, если используемая не работает.
Стоит отметить, что в настоящее время для управления устройствами на базе Android доступно новое приложение Android Device Policy, тогда как Google Apps Device Policy не будет поддерживаться с 2022 года.
Как скачать приложение
Что за программа Device Policy мы разобрались. Теперь рассмотрим, как её загрузить на Android. Как и в случае с любым другим софтом, инсталляция на устройства в ручном режиме возможна с использованием официального магазина Google Play или путём скачивания файла APK.
Для скачивания программы выполняем следующие действия:
- идём в официальный магазин приложений Google Play;
- ищем в поиске софт по названию;
- выбираем из списка нужный вариант и переходим на страницу приложения;
- нажатием кнопки «Установить» запускаем процесс скачивания и последующей установки, следуем инструкция на экране.
Мобильная ОС Android отличается гибкостью, а потому скачивать программы можно также со сторонних ресурсов в виде файлов в формате APK. Главное — не забывать, что качать следует только из надёжных, проверенных источников.
ВАЖНО. Чтобы иметь возможность скачивать софт на Android со сторонних ресурсов, потребуется разрешить установку из неизвестных источников в пункте «Администрирование устройства» в разделе, отвечающем за безопасность («Безопасность» или «Блокировка экрана и безопасность» и т. д., в зависимости от версии ОС).
На сайтах с софтом, доступным для скачивания, обычно под названием или описание программы размещается соответствующая кнопка, которая запускает скачивание элемента.
Как установить приложение
Процесс установки программных продуктов автоматизирован в Google Play. Так, установка Device Policy выполняется автоматически с помощью встроенного мастера установки из магазина. Всё, что нужно для того, чтобы софт установился, — это:
- перейти на страницу приложения и нажать кнопку «Установить», после чего начнётся загрузка и автоматическая установка;
- пользователю при этом потребуется дать необходимые для работы приложения разрешения.
Если используется файл APK, скачанный из источника в сети:
- открываем скачанный файл;
- находим файл на смартфоне, используя стандартный диспетчер файлов (или стороннюю программу с аналогичным функционалом). В файловом менеджере находим папку Downloads, куда по умолчанию добавляется скачанный софт;
- жмём «Установить» и дожидаемся установки, о чём сообщит соответствующее уведомление, а приложение появится среди установленных программ на смартфоне.
Как удалить приложение на Android
Как мы выяснили, рядовому пользователю данный софт без надобности, а потому его часто резонно удалить. На работу устройства удаление или остановка программы не повлияет, поэтому можно избавиться от ненужного ПО.
В зависимости от устройства (устанавливался софт вручную или появился с обновлением) Device Policy можно удалить или отключить.
Деактивация Device Policy
Для этого потребуется выполнить следующие шаги:
- идём в настройки девайса;
- переходим в раздел «Безопасность»;
- открываем «Администраторы устройства»;
- снимаем отметку возле Google Device Policy, жмём «Деактивировать» и «Ок».
Удаление администратора
Чтобы удалить администратора, выполняем следующее:
- идём в «Настройки» – «Местоположение и безопасность» – «Администратор устройства»;
- здесь отменяем выбор администратора.
После этих действий можно переходить к удалению или принудительной остановке перед удалением софта.
Удаление Device Policy
Для удаления стандартным способом:
- переходим в настройки смартфона;
- листаем вниз, заходим в раздел «Приложения» – «Управление приложениями»;
- находим в списке софта Device Policy;
- на странице ПО удаляем или отключаем его работу, жмём «Ок».
Удаление через Play Store
Альтернативный вариант удаления ПО подразумевает использование магазина:
- открываем Google Play Market;
- из меню выбираем «Мои приложения и игры» и в подразделе с установленными программами находим нужный софт;
- выбираем и деинсталлируем Device Policy.
Если у вас не получилось удалить программу, то вариант с её остановкой будет оптимальным решением. В том случае, если смартфон принадлежит компании и настроен на работу с программой, придётся идти на крайние меры и выполнить сброс настроек к заводским параметрам.
Источник: www.sevdalina7.com
Использование политик администрирования в Android
Рекомендуем почитать:
Xakep #288. Неправильные эльфы
- Содержание выпуска
- Подписка на «Хакер» -60%
Михаил Варакин
преподаватель Центра компьютерного обучения «Специалист»
при МГТУ им. Н.Э. Баумана
По мере увеличения занимаемой доли рынка мобильных устройств платформа Android становится все более привлекательной для разработчиков корпоративных приложений. При этом для корпоративной среды характерна потребность в соблюдении политик, обеспечивающих необходимый уровень безопасности информационных систем. В Android API 8 (Android 2.2) впервые появилась поддержка корпоративных приложений с помощью Device Administration API, обеспечивающего возможность администрирования устройств на платформе Android на системном уровне. Данный API дает возможность разработчикам создавать приложения, необходимые в корпоративной среде, где администраторам ИС предприятия требуется контроль над мобильными устройствами персонала. Одно из таких приложений уже имеется на всех современных устройствах: встроенный почтовый клиент использует Device Administration API при синхронизации с Microsoft Exchange и посредством этого приложения администраторы Exchange могут обеспечивать соблюдение требований политик работы с паролями, а также удаленно стирать данные (делать сброс к заводским установкам) в случае потери или кражи устройства.
Организационные аспекты использования
Приложение, использующее Device Administration API, может быть установлено на устройство любым способом, как через Google Play, так и из других источников. Факт наличия установленного приложения еще не обеспечивает соблюдения политик, для которого оно было создано – от пользователя требуется согласие на применение политик администрирования. В случае отказа приложение останется в системе и будет находиться в неактивном состоянии. Как правило, согласие пользователя на использование политик предоставляет ему полезные возможности, например, доступ к конфиденциальной информации, недоступной в случае отказа. При несоблюдении пользователем действующих политик (например, при использовании недостаточно стойкого пароля), реакция приложения определяется тем, что посчитал нужным реализовать разработчик; обычно пользователь теряет возможность использования корпоративных сервисов. При использовании механизма администрирования в корпоративных средах следует иметь в виду следующие особенности:
- при попытке соединения с сервисом, требующим соблюдения определенного набора политик, не все из которых поддерживаются мобильным устройством (например, из-за устаревшей версии Android), соединение не будет устанавливаться;
- если на устройстве активированы несколько приложений, использующих Device Administration API, применяются наиболее строгие ограничения, накладываемые политиками администрирования, использующимися в данных приложениях;
- кроме разнообразных ограничений, касающихся паролей (сложность, период устаревания, количество попыток ввода), максимального времени неактивности перед блокировкой экрана, требований к шифрованию носителей и запрета использования камеры, в настоящий момент Device Administration API предоставляет дополнительные возможности: требование смены пароля, немедленная блокировка экрана и сброс к заводским установкам (с возможностью очистки внешнего накопителя – SD-карты);
- опасения пользователей относительно возможностей доступа администраторов компании к личным данным и переписке, паролям владельцев устройств в социальных сетях и т. п. совершенно безосновательны: Device Administration API таких возможностей не предоставляет.
Как это работает
В настоящий момент Device Administration API содержит три класса, являющихся основой для полнофункциональных приложений администрирования устройств:
- DeviceAdminReceiver: базовый класс для классов, реализующих политики администрирования; callback-методы этого класса предоставляют удобные средства для описания реакций на те или иные события, связанные с политиками – индивидуальные «приемники сообщений» для разных событий;
- DevicePolicyManager: класс для управления политиками, применяющимися на устройстве;
- DeviceAdminInfo: класс, использующийся для описания метаданных.
Основная логика приложения реализуется в классе, расширяющем класс DeviceAdminReceiver, являющемся наследником класса BroadcastReceiver. Здесь важно помнить, что callback-методы нашего класса исполняются в главном потоке приложения (UI thread), так что выполнение длительных операций в них недопустимо из-за опасности блокировки интерфейса пользователя. Все необходимые «долгоиграющие» действия должны выполняться в другом потоке (или даже в отдельном сервисе). Как и обычный BroadcastReceiver, наш класс должен быть описан в манифесте приложения:
Как видно на примере, наш приемник будет принимать сообщения с action, равным ACTION_DEVICE_ADMIN_ENABLED. Для того, чтобы такие сообщения нам могла посылать только система, требуем наличия полномочий BIND_DEVICE_ADMIN (эти полномочия не предоставляются приложениям). Элемент meta-data содержит указание на ресурс, содержащий поддерживаемые приложением политики. В нашем случае путь к XML-файлу такой: res/xml/device_admin_data. Примерное содержимое файла показано ниже:
Дочерние элементы в uses-policies описывают типы политик, использующихся в приложении. Полный список возможных политик можно найти в константах класса DeviceAdminInfo, в том числе на сайте developer.android.com: http://developer.android.com/reference/android/app/admin/DeviceAdminInfo.html.
Рассмотрим примерную реализацию компонента администрирования:
public class MyDeviceAdminReceiver extends DeviceAdminReceiver
Для управления политиками в приложении требуется получить ссылку на менеджер управления политиками (обратите внимание, что context передается показанным выше методам в качестве параметра):
DevicePolicyManager dpm = (DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
В дальнейшем этот менеджер будет использоваться для установки политик. Метод onEnabled(), устанавливающий требуемое качество пароля мог бы выглядеть примерно так:
dpm.setPasswordQuality (cn, DevicePolicyManager.
PASSWORD_QUALITY_NUMERIC);
Установки других параметров пароля делаются с помощью соответствующих методов DevicePolicyManager:
dpm.setPasswordMinimumLength(cn, 32);
dpm.setPasswordHistoryLength(cn, 10);
dpm.setPasswordExpirationTimeout(cn, 864000000L);
Помимо установки политик, DevicePolicyManager позволяет совершать и другие операции (разумеется, не в методе onEnabled() ):
- моментальная блокировка экрана:
dpm.lockNow(); - сброс к заводским установкам с очисткой SD-карты:
dpm.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE); - блокировка камеры:
dpm.setCameraDisabled(cn, true);
Дополнительная информация
Развернутый работающий пример приложения можно найти в комплекте поставки Android SDK (/samples/android-
Научиться разработке мобильных приложений под Android Вы сможете в Центре компьютерного обучения «Специалист» при МГТУ им. Н.Э. Баумана.
Источник: xakep.ru