У меня есть планшетное приложение Android без Playstore в режиме киоска (которое мы устанавливали на устройства с помощью установки оболочки adb).Режим киоска достигается за счет комбинации нескольких методов DevicePolicyManager, установки пользовательских ограничений и, наконец, установки его в качестве владельца устройства с помощью следующей команды оболочки:
shell dpm set-device-owner com.dps.myapp/.DeviceAdminReceiver
Это прекрасно работает и хорошо отвечает потребностям моего клиента.за то, что пользователи не могут делать на планшете ничего, кроме использования нашего приложения для выполнения своей работы.Когда я создал эту версию киоска, используя владельца устройства, я «предполагал», что смогу загружать будущие обновления приложения, как это было в прошлом (таким образом, избегая необходимости сбрасывать настройки устройства перед каждым последующим обновлением), используя следующиеКоманды оболочки, чтобы остановить приложение, удалить его, а затем установить новую версию:
shell am force-stop com.dps.myapp
shell pm uninstall com.dps.myapp
install -r C:\\dpsworkspace\\application\\
К сожалению, теперь я узнал, что вы не можете просто удалить приложение владельца устройства или установить новую версию поверхсуществующего без нескольких элементов, присутствующих в вашем приложении для начала.Поэтому, после долгих размышлений, мне удалось написать решение, которое будет реализовано в моей новой версии, чтобы, надеюсь, успешно реализовать этот сценарий в будущем, хотя для его развертывания на устройстве требуется сброс к заводским настройкам.Мне любопытно, упустил ли я более простой способ добиться этого, так как необходимость принудительного сброса настроек перед установкой этой «новой и улучшенной» версии плохо согласуется с пользовательской базой.
Мое решение включает в себя следующее:
1 - добавление android: testOnly = "true" в манифест, так что владелец устройства может быть отключен перед установкой обновления
2 - добавление нового действия (DeactivateDeviceOwnerActivity) в приложение, которое можно запустить с помощью команды оболочки adb, которая отменяет некоторые настройки DevicePolicyManager, а также выполняет
DevicePolicyManager.clearDeviceOwnerApp(getApplicationContext().getPackageName());
3 - изменяя мою остановку/ uninstall / переустановите команды оболочки для следующего:
shell am force-stop com.dps.myapp
shell am start -n com.dps.myapp/.DeactivateDeviceOwnerActivity
shell pm uninstall com.dps.myapp
install -t C:\\dpsworkspace\\application\\
Все это прекрасно работает, и я без проблем проверил дальнейшие обновления этой версии приложения.У меня вопрос, все ли это перебор?Есть ли более простой способ сделать это?Больше всего меня беспокоит то, что я мог упустить из виду то, что могло бы помочь мне избежать принудительного сброса настроек.
Все решения, которые я нашел здесь, в основном утверждают, что текущая версия приложения не может быть переведена в статус не владельца устройства из-за отсутствующего атрибута android: testOnly = "true" и отсутствия ужевстроенная активность для выполнения работы, которую будет выполнять новая функция DeactivateDeviceOwnerActivity.
Я видел упоминавшуюся команду dpm "remove-active-admin", но эта команда, по-видимому, отсутствует ни в одной установке Android, которую я имею ... кроме того, для нее требуется атрибут manifestприсутствует для того, чтобы работать в любом случае.Была ли эта команда удалена из набора команд adb?Посты, в которых упоминается это, довольно старые.
Спасибо за любые идеи, которые вы можете предоставить.Подтверждение моей «Я в значительной степени облажался здесь и сейчас», оценка моей ситуации также помогла бы.Я ненавижу это ноющее чувство, что я скучал по лесу за деревьями.