Тихо выполнять обновление ОС и APK программно [закрыто]

Я пытаюсь создать систему для выполнения беспроводных обновлений APK и ОС на моих устройствах Android. Мой вопрос касается части фактического выполнения обновления после загрузки пакетов для ОС и APK. Обратите внимание на следующее:

  1. Я не могу использовать play-store/play-services, так как на моем устройстве не установлены play-services.
  2. Мне нужно, чтобы процесс обновления как для APK, так и для ОС выполнялся без вмешательства пользователя.
  3. У меня есть привилегии root/admin на устройствах.
  4. Я буду использовать версии Android: Kitkat, Lollipop и Marshmallow.
  5. У меня на устройстве запущен APK, который проверяет наличие обновлений с моего сервера и загружает их. Затем я хочу, чтобы он инициировал обновление как для APK, так и для ОС из кода.

Что касается обновления APK:

На самом деле я попытался и успешно выполнил обновление APK, выполнив команду оболочки pm install -r $PATH_TO_DOWNLOADED_APKпосле получения оболочки из Runtime.getRuntime().exec("su")кода моего приложения.

Мои вопросы:

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

По поводу обновления ОС:

Я ссылался на следующую ссылку: https://source.android.com/devices/tech/ota/ Однако я не понял ее полностью.

Мои вопросы:

  1. Есть ли конкретная папка, в которой мне нужно хранить загруженный пакет ОС? Если да, то в какой папке? Если нет, то как мне указать путь к нему?
  2. Для чего нужна эквивалентная команда pm install -r $PATH_TO_APKв случае обновлений ОС?
  3. Как загрузить устройство в «режиме восстановления», как указано в пункте № 3 по ссылке?
  4. Где находятся разделы загрузки и восстановления в устройстве? Отличается ли он от устройства к устройству? На одном из устройств, которые у меня есть, я не вижу папки /boot или /recovery? Имеется ли в виду загрузочная папка / (корневая)?
  5. В случае сбоя обновления ОС по какой-либо причине (устройство выключается во время обновления, возникла проблема в пакете обновления и т. д.) — обеспечивает ли Android правильный откат, а также то, что устройство находится в согласованном состоянии и никакие данные не потеряны? Если нет, то как код, который его инициирует, должен обрабатывать это?
Привет! Здесь есть несколько вещей, с которыми мы можем помочь, но мы не принимаем вопросы, ориентированные на программирование/разработку. Дополнительную информацию см. в справочном центре .

Ответы (1)

Есть ли конкретная папка, в которой мне нужно хранить загруженный пакет ОС? Если да, то в какой папке? Если нет, то как мне указать путь к нему?

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

Для чего нужна эквивалентная команда pm install -r $PATH_TO_APKв случае обновлений ОС?

Обновление ОС происходит в режиме восстановления (основная ОС), и восстановление может иметь возможность автоматического выполнения команд. Стандартное восстановление Android (<3e>) считывает /cache/recovery/command и выполняет их автоматически. Если это TWRP v2.1 или выше, файл /cache/recovery/openrecoveryscript . Проверьте их ссылки, чтобы узнать больше.

Как загрузить устройство в «режиме восстановления», как указано в пункте № 3 по ссылке?

Мой ответ здесь охватывает это.

Где находятся разделы загрузки и восстановления в устройстве? Отличается ли он от устройства к устройству? На одном из устройств, которые у меня есть, я не вижу папки /boot или /recovery? Имеется ли в виду загрузочная папка / (корневая)?

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

Нет, загрузка не означает / папку. На самом деле это даже не каталог, а корень самого большого дерева (файловой иерархии), создаваемого и заполняемого при каждой загрузке Android.

В случае сбоя обновления ОС по какой-либо причине (устройство выключается во время обновления, возникла проблема в пакете обновления и т. д.) — обеспечивает ли Android правильный откат, а также то, что устройство находится в согласованном состоянии и никакие данные не потеряны?

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

Наконец, обновление/апгрейд ОС вообще нельзя назвать тихим, ведь на экране так много всего происходит.

Со времен Android Nougat все могло измениться.