Как откатить приложение: Как удалить обновление приложения на Android, и зачем это нужно

Содержание

Как удалить обновление приложения на Android, и зачем это нужно

Среднестатистический пользователь Android устанавливает на свой смартфон несколько десятков приложений. Каждая программа регулярно обновляется через Google Play и нередко делает это в автоматическом режиме. Поэтому на вашем устройстве всегда стоит актуальная версия программы, и порой без апдейта она даже отказывается работать. В то же время иногда требуется не обновить, а откатить приложение. Сначала может показаться, что это совершенно ненужная и бесполезная затея. Но ведь не зря люди ищут, как удалить обновление приложения, и на то есть несколько причин.

Далеко не всегда на смартфоне нужно держать последние версии приложений

Во-первых, откат приложения порой требуется для решения самых разных проблем, возникших после обновления. Допустим, вы на днях установили апдейт, а затем программа начала глючить или вовсе перестала запускаться. Как исправить ошибку? Разумеется, путем удаления обновлений. Также эта процедура помогает продлить жизнь приложению, если вы пользуетесь старым смартфоном: со временем требования программного обеспечения растут, и разработчики перестают поддерживать ранние версии Android. Поэтому не лишним будет понять, можно ли откатить приложение, и как это сделать.

⚡ Подпишись на Androidinsider в Пульс Mail.ru, чтобы получать новости из мира Андроид первым

Содержание

  • 1 Можно ли удалить обновление приложения
  • 2 Как откатить версию приложения через Google Play
  • 3 Как переустановить приложение
  • 4 Как отключить автообновление

Можно ли удалить обновление приложения

Ответ на вопрос, поставленный в заголовке, будет утвердительным, но с определенными оговорками. Да, в действительности можно удалить обновления всех приложений на любом смартфоне, будь то Xiaomi, Samsung или HUAWEI. Однако в настройках устройства подобная опция предусмотрена только для стандартных программ Гугл (Gmail, Gboard или Google Play), которые по умолчанию нельзя деинсталлировать, а откат версии воспринимается в качестве способа освобождения места на внутреннем накопителе.

Удалить обновления программы, установленной через Google Play или APK-файл, тоже можно, но для этого придется воспользоваться обходным вариантом. О нем я расскажу позже, а сейчас сосредоточимся на том, как удалить обновление приложения на Андроиде через настройки:

  1. Откройте настройки устройства.
  2. Перейдите в раздел «Приложения».
  3. Выберите интересующую программу.
  4. Нажмите кнопку «Удалить обновления».

В настройках стороннего приложения пункта «Удалить обновления» нет

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

🔥 Загляни в телеграм-канал Сундук Али-Бабы, где мы собрали лучшие товары с АлиЭкспресс

Как откатить версию приложения через Google Play

Теперь расскажу о еще одном способе, как удалить последнее обновление приложения, который подойдет только для встроенных программ. Несмотря на то, что сам пользователь не принимает участия в установке стандартного софта, обычно он доступен в магазине Google Play. Если вы посещаете его чаще, чем раз в год, то наверняка видели кнопку «Удалить» на странице приложения. Ее нажатие приводит к полной деинсталляции программного обеспечения, если речь идет о сторонних утилитах или играх, а в случае с предустановленным ПО позволяет откатить программу:

  1. Запустите Google Play.
  2. Используя поисковую строку магазина или список установленных программ, найдите нужное приложение.
  3. Нажмите кнопку «Удалить» на его странице.

Стороннее приложение после нажатия этой кнопки будет полностью удалено

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

❗ Поделись своим мнением или задай вопрос в нашем телеграм-чате

Как переустановить приложение

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

Без предварительного удаления приложение нельзя переустановить

В моем случае речь идет о видеопроигрывателе MX Player, который в версии 1.48 немного подтормаживает при воспроизведении определенных форматов видео. Решение проблемы — откат версии приложения. С этой целью я сначала удалил программу, а затем отправился на поиски нужной сборки. Точно так же можете поступить и вы:

  1. Используя браузер, найдите нужную вам версию приложения.
  2. Скачайте APK-файл.
  3. Откройте APK и подтвердите установку.

Для загрузки установочного файла выбирайте проверенные источники вроде APKMirror

Установка приложений через APK требует выдачи дополнительных разрешений. Как правило, уведомление об этом сразу выводится на экран после открытия файла, но на старых версиях Android нужно предварительно активировать пункт «Неизвестные источники» в разделе настроек «Безопасность». Но, даже если вы успешно установите нужную версию программы, не спешите радоваться, так как в любой момент она самостоятельно обновится, и тогда вы попадете в замкнутый круг.

⚡ Подпишись на Androidinsider в Дзене, где мы публикуем эксклюзивные материалы

Как отключить автообновление

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

  1. Запустите Google Play.
  2. Тапните по иконке своего профиля и перейдите в раздел «Настройки».
  3. Откройте вкладку «Настройки подключения», а затем — «Автообновление приложений».
  4. Установите значение «Отключить».

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

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

Обновилось приложение на iOS? — Не беда, откатим / Хабр

Пока интернет бурлит новостями на тему обхода блокировок телеграма и сопутствующих с этим проблем у хостинговых компаний у меня была проблема посерьёзней — компания Innologica обновила до версии 6 приложение Inoreader для iOS.

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


Можно сравнить как было и как стало в двух примерах:


Конечно, на вкус и цвет и владельцы iPhone X были явно рады оптимизации под amoled-экраны, но именно этот апдейт побудил искать решения как откатить приложение назад, чего по умолчанию AppStore не позволяет делать.

Раньше достать ipa—файл приложения было делом 2 минут, достаточно было зайти на apptrackr и скачать, но он перестал работать и других подобных ресурсов дающих честно скачать ipa файл обнаружено не было (но вдруг вы такие знаете?).

Остались следующие способы получения старой версии приложения:

  1. У вас в iTunes лежит старый бэкап приложений с телефона и тогда можно просто скопировать приложение обратно (но у меня такого не было).
  2. Воспользоваться способом, описанным на скорую руку кем-то в интернете с помощью софта под названием Charles. Данный способ описан на ресурсах вроде 4dpa и пере-копирован множествами лиц без понимания что там вообще написано, однако, без дополнительных >100 грамм разобраться с этой писаниной сложно.


Возможно, я это сделаю более полно, с картинками и в более простой понятной форме. В общем, чтобы скачать софт старой версии из AppStore потребуется минут 5 времени и в моём случае Mac OS X. Способ явно будет работать и на Windows, т.к. приложение Charles есть и для этой системы.

Все ваши мучения начнутся ещё до того, как вы скачаете Charles. Дело в том, что если вы обновляете iTunes на Mac, то у вас будет отсутствовать возможность устанавливать приложения, начиная с версии 12.7. Чтобы её вернуть, нужно установить обратно версию 12.6.4.

Что мы будем делать дальше?

Коротко: загрузить приложение через AppStore в iTunes, затем включить прокси, затем загрузить ещё раз, отредактировать запрос, отправить запрос, получить старую версию, установить.

Подробно: после запуска Charles нужно установить сертификаты приложения в Mac. Это делается через меню HelpSSL ProxyingInstall Charles Root Cetrificate. Сертификат затем нужно в Keychain Access перевести в статус Always Trust. Если не установить, то будут ошибки и метод не сработает.

В iTunes ищем приложение Inoreader (это для любого приложения подойдёт, но меня интересовало в тот момент только оно), запускаем Charles и нажимаем в окне установки приложения Download:


В окне Charles у вас появляется подобная строчка со слово «buy» в адресе, связанная с сервером apple:


Для информации можно обратить внимание на то, что размер скачиваемого файла равен 20,4 мб:


После чего нужно включить SSL Proxying для осуществления перехвата и редактирования запросов:


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

Ещё раз проверяем, что SSL Proxying включен и переходим к повторной загрузке приложения из AppStore при этом нужно поставить загрузку на паузу, чтобы у вас было время на следующие действия. После нажатия на Download в окне Charles появится ещё одна строка в сервером apple, содержащая слово «buy». Развернув эту строку нужно найти buyProduct:


Справа в окне нажимаем на Contents и внизу выбираем XML Text. Листаем вниз пока не найдем softwareVersionExternalIdentifiers со списком не понятным цифр.


Эти цифры и выступают в роли версий приложений. Соответственно, чем меньше число, тем старее версия приложения. Как узнать какая версия приложения будет загружена? Например, я наугад брал с конца списка значение 823964615:


Теперь нам нужно проверить версию приложения. Для этого мы делаем встаем на «buyProduct» и в меню выбираем Compose и справа в окне представление Text.


В самом верху поля будет знакомый вам набор цифр после параметра <key>appExtVrsId</key>. Этот набор цифр — актуальная версия приложения.


Вместо этих цифр подставляем скопированные выше 823964615 и должно получиться вот так:


и делаем Execute. Программа выдаст вам окно и выбрав режим отображения XML Text мы сможем внизу найти параметр bundleShortVersionString и увидим, что выбранное нами значение соответствует версии 5.4.4, что в моём случае то что нужно, т.к. эти версия практически последней перед обновлением до 6.0


Остаётся один шаг. Нужно скачать всё это дело. Для этого нужно в нашем последнем отредактированном запросе buyProduct с полученной версией 5.4.4 в меню выбрать Breakpoints.


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

Как только вы в iTunes нажмете скачать, то выскочит окно Charles, где нужно будет нажать на Edit Request и в уже знакомом параметре appExtVrsId исправить версию на 823964615, нажать Execute, а затем ещё раз на Execute.


В итоге у вас начнётся загрузка приложения и можно будет увидеть, что размер приложения изменился в меньшую сторону:


В библиотеке приложений itunes появится значок программы с ярлыком Update. Это и будет означать, что вы сделали всё верно. Можно сделать Get Info приложения и будет написано:


Дальше у приложения смотрим где оно находится в файловой системе и сохраняем на будущее если вдруг решите обновить приложение 🙂

По завершение работы следует в Charles сделать Disable SSL Proxying кликом на сервере p30-buy.itunes.apple.com.

Надо сказать, что получилось проделать у меня данную процедуру с 2 раза.

Надеюсь, это будет кому-то так же полезно как оказалось мне.

Откат приложения

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

Как CloudBees CD/RO определяет развертывание отката

Когда шаг отката встречается из-за сбоя развертывания, вызывается одна из следующих опций на основе конфигурации шага отката:

  • Откат к предыдущему состоянию — CloudBees CD/RO ищет успешное развертывание с тем же именем процесса. Затем он запускает откат, используя тот же процесс и параметры, что и в этом развертывании, с версиями компонентов, определенными состоянием инвентаризации до неудачного развертывания. Если успешное развертывание не найдено, откат завершается ошибкой. Этот параметр требует успешного развертывания, даже если вы развертываете с помощью моментального снимка. Последнее успешное развертывание может быть частью моментального развертывания или обычного развертывания приложения.

  • Откат к моментальному снимку — CloudBees CD/RO использует указанный пользователем моментальный снимок для отката. Для отката используются последний успешный процесс развертывания и параметры, сохраненные как часть моментального снимка среды. Версии компонентов определяются как часть моментального снимка. Если этот снимок является снимком приложения, CloudBees CD/RO ищет успешное развертывание процесса с тем же именем, что и в первом варианте.

Для обоих вариантов комбинация определений компонентов и параметров среды выполнения развертывания определяет версию компонентов, которые будут развернуты.

Способы выполнения отката

CloudBees CD/RO предоставляет следующие способы отката:

  • Автоматический откат — CloudBees CD/RO автоматически отменяет то, что было развернуто до точки сбоя в потоке процесса. Дополнительные сведения см. в разделе Автоматический откат.

  • Моментальные снимки

    — вы вручную создаете и сохраняете моментальные снимки успешных развертываний и запускаете моментальный снимок при следующем развертывании приложения. Дополнительные сведения см. в разделе Снимки.

  • Процесс компонента, определенный как процесс отмены развертывания. При определении процесса компонента выберите Отменить развертывание в качестве типа процесса.

Запуск отката даже в случае сбоя отмены развертывания

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

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

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

Включение отката только для отказавших компонентов

CloudBees CD/RO автоматически отслеживает компоненты, отказавшие во время развертывания приложения, и откатывает только эти компоненты. Этот параметр полезен, когда компоненты не зависят от версии. Вы можете использовать Откат на уровне компонентов с автоматическим откатом и снимками.

Использование автоматического отката

CloudBees CD/RO поддерживает этап отката в процессах приложения. Это позволяет выполнять автоматический откат к среде перед неудачным развертыванием или к любому предыдущему моментальному снимку среды. Это сокращает время на создание логики отката.

Во время развертывания приложения предопределенная операция отката вызывается при выполнении шага отката. CloudBees CD/RO отменяет то, что было выполнено в потоке процесса, до шага процесса приложения, на котором произошел сбой.

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

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

Когда вы определяете шаг процесса приложения как шаг отката, приложение может вернуться к предыдущему состоянию до момента сбоя развертывания (по умолчанию) или к определенному моментальному снимку. Также вы можете указать, как будет выполняться откат приложения:

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

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

Когда для отката выбран конкретный моментальный снимок, CloudBees CD/RO пытается определить последний успешно развернутый процесс, а затем пытается выполнить его из моментального снимка. Несмотря на то, что доступен собственный шаг отката, у вас есть полный контроль над созданием пользовательской операции обработки отката и ее использованием в рамках логики обработки ошибок.

Если последнее успешное развертывание было частичным развертыванием и задание отката отменяется, CloudBees CD/RO отменяет только компоненты, включенные в частичное развертывание.

Требования для использования отката

Необходимо:

  • Включить историю изменений.

  • Успешное повторное развертывание приложения перед использованием отката после полного импорта.

  • Сохранить исходное имя процесса приложения. Если вы переименуете его после успешного развертывания и если настроен откат к предыдущему состоянию, CloudBees CD/RO не сможет определить последнее успешное развертывание. В этом случае откат не удастся (но процесс отмены развертывания все равно произойдет).

Рекомендации по успешному откату

Необходимо:

  • Использовать моментальные снимки среды для отката (не моментальные снимки приложений).

  • Используйте интеллектуальное развертывание вместо частичного развертывания:

    • Если последним успешным развертыванием было частичное развертывание, задание отката возвращает только компоненты частичного развертывания.

    • Если вы используете частичное развертывание, вы должны сделать моментальный снимок вручную (с помощью EF-Utilities) и использовать его на шаге отката.

    • Используйте ссылку на свойство $[] для ссылки на моментальный снимок, чтобы его можно было установить динамически.

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

Как понизить версию приложения с помощью скрытой функции отката Android

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

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

Слева: удаление приложения, для которого флаг hasFragileUserData не установлен в значение true, приведет к очистке всех его частных каталогов данных во внутреннем и внешнем хранилище.

Справа: при удалении приложения, которое установило для флага hasFragileUserData значение true в настройках, в диалоговом окне подтверждения удаления будет показана возможность сохранить данные приложения. Если флажок установлен, каталоги личных данных приложения во внутренней и внешней памяти сохраняются при удалении приложения.

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

На этой неделе в выпуске Android Dessert Bites я расскажу о двух способах понижения версии приложения Android. Один из этих методов может быть известен опытным опытным пользователям, хотя они могут не знать, как он изменился за последние годы. Другой метод был представлен сравнительно недавно, но малоизвестен в сообществе Android.

Благодарим за подписку на информационный бюллетень Android Edge . Каждую неделю в моей колонке Android Dessert Bites будут публиковаться последние новости о платформе Android, которые важны для системных инженеров, разработчиков приложений и опытных пользователей.

Как понизить версию приложения для Android (и сохранить существующие данные)

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

При попытке установить приложение Sync for Reddit версии 19.0.21 поверх существующей установки версии 19.0.22 установщик системного пакета возвращает код ошибки INSTALL_FAILED_VERSION_DOWNGRADE . Эта ошибка возникает, когда код версии устанавливаемого пакета (в данном случае 1352) старше, чем код версии уже установленного пакета (1355).

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

Во всяком случае, метод в основном таков:

  1. Загрузите файл APK для версии, которую вы хотите понизить до
  2. .

  3. Переместите файл APK на свое устройство
  4. Войдите в оболочку вашего устройства (через ADB с ПК или на устройстве)
  5. Отправьте команду «pm install» с флагом «-d» и путем к файлу APK

Например:

Этот процесс можно сделать еще проще, если вы все делаете с ПК, так как вы можете пропустить шаги 2-3, просто выполнив «adb install -d app.apk», так как ADB вытолкнет APK-файл во временное место на устройстве автоматически, а затем передайте команду установки в PackageManager.

В качестве альтернативы, если вам нужно установить несколько разделенных APK, вам нужно использовать другую команду:

Раньше я не беспокоился об этом методе, потому что думал, что он работает не со всеми приложениями. Я был не единственным, кто так думал, о чем свидетельствуют многочисленные жалобы в разделе комментариев этой статьи XDA-Developers . Согласно собственной документации Google, этот метод не должен работать со всеми приложениями. В тексте справки для команды «pm» говорится, что флаг «-d» разрешает понижение версии кода только для «только отлаживаемых пакетов», но у меня он работал даже с пакетами, которые не были помечены как отлаживаемые. Так что дает?

Чтобы выяснить это, я копался в AOSP. Я начал с того, что PackageManager считывает флаг «-d». Если флаг «-d» является частью команды, флаг INSTALL_REQUEST_DOWNGRADE добавляется к флагам сеанса установщика пакетов. В документации для этого флага отмечается, что он не гарантирует, что переход на более раннюю версию будет разрешен, так как это решение зависит от того, является ли приложение отлаживаемым, сборка отлаживаемой или установлен INSTALL_ALLOW_DOWNGRADE. Хотя первые две проверки не пройдут для большинства приложений в большинстве сборок, флаг INSTALL_ALLOW_DOWNGRADE устанавливается службой установки пакетов, если сеанс установки был создан одним из пользователей system_server, пользователем root или пользователем оболочки.

Раньше Android не применял флаг INSTALL_ALLOW_DOWNGRADE, когда сеанс установки создавался пользователем оболочки. Это изменение было введено в начале 2019 года, поэтому оно стало доступно в Android 10 и более поздних версиях. Вот почему команда «pm install -d» в прошлом была непоследовательной для многих пользователей и почему она стала более согласованной с Android 10 (хотя я не думаю, что кто-то заметил это изменение). Тем не менее, есть еще лучший способ понизить версию приложений в Android 10+, который делает снимок приложения и свои файлы данных, так что понижение фактически восстанавливает приложение до его предыдущего состояния.

Как откатить обновление приложения Android (и восстановить старые данные)

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

Функция отката Android предназначена для автоматического запуска системой при наличии 5 ошибок «Приложение не отвечает» (ANR) или сбоев процесса в течение 1 минуты после обновления или при неоднократном сбое какой-либо собственной службы после обновления. Он также автоматически запускает откат сетевого стека, если после обновления не обнаружено сетевое подключение. Эти триггеры отката предназначены для защиты от неудачных обновлений модуля Mainline. Поскольку модули Mainline распространяются как в формате APEX, так и в формате APK, функция отката необходима для обработки обоих форматов. И поскольку эта функция требовала тщательного тестирования, Google добавил ручной способ запуска отката: через (как вы уже догадались) команду оболочки.

Есть одно предостережение при ручном запуске отката: сначала вам нужно включить откат для приложения при его обновлении. Существует флаг, который можно добавить в сеанс установки пакета, чтобы включить откат для данного обновления, но API, который устанавливает его программно, зарезервирован для системных приложений. Магазин Google Play, очевидно, не поддерживает эту функцию, поскольку он не позволяет откатывать обновления приложений, а это означает, что вам нужно вручную обновлять свои приложения с помощью командной строки, если вы хотите включить откат.

Включить вручную, а затем запустить откат, по крайней мере, довольно просто. Чтобы включить откат, все, что вам нужно сделать, это добавить параметр –enable-rollback к команде «pm install» при обновлении приложения. Затем, чтобы вызвать откат, отправьте команду «pm rollback-app {package}».

Например:

 adb push app.apk /data/local/tmp/
adb оболочка
pm install --enable-rollback /data/local/tmp/app. apk
pm rollback-app {пакет}
 

Шаг за шагом:
1) Первой командой я отправляю дампы информации о пакете ‘com.laurencedawson.reddit_sync’ (Sync for Reddit) и фильтры для строк, в которых упоминается «версия». Начну с того, что у меня версия 19Установлена ​​версия .0.21 Sync for Reddit.
2) Затем я отправляю команду «pm install» с параметром «–enable-rollback», чтобы обновить Sync for Reddit до версии 19.0.22 и включить откат к предыдущей версии.
3) Я снова делаю дамп информации о пакете, чтобы убедиться, что новая версия установлена.
4) Я запускаю откат с помощью команды «pm rollback-app», за которой следует имя пакета для синхронизации для Reddit: com.laurencedawson.reddit_sync.

5) Я проверяю, установлена ​​ли старая версия приложения.

Когда запрашивается откат приложения, файлы APK, необходимые для переустановки предыдущей версии, копируются в /data/rollback/{sessionID}, в то время как файлы данных приложения в его частном внутреннем каталоге хранилища для конкретного приложения скопировано в /data/misc_[ce|de]/{user}/rollback/{sessionID]. Данные приложения в его частном внешнем каталоге хранения (например, в /data/media/{user}/Android/{package}) не копируются для экономии места и поскольку предполагается, что эти файлы не являются критическими для функциональность приложения. Кроме того, ключи в KeyStore не резервируются, как указал разработчик Серджио Кастелл.

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

Слева: Синхронизация для базового APK-файла Reddit копируется при выполнении обновления с параметром –enable-rollback

Справа: Синхронизация файлов данных Reddit из его частного приложения- определенный каталог хранилища также резервируется, когда включен откат

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

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

 adb shell cmd device_config put rollback_boot rollback_lifetime_in_millis 2592000000 

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

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

Для взаимодействия со всеми API отката приложение должно иметь разрешения MANAGE_ROLLBACKS и TEST_MANAGE_ROLLBACKS. Первый имеет уровень защиты «подпись | привилегированный», а второй просто «подпись», поэтому только системные приложения могут включать и запускать откаты. Приложение оболочки имеет разрешение TEST_MANAGE_ROLLBACKS, поэтому оно может включать и запускать откат для установленных пользователем APK. Google опубликовал образец системного приложения в AOSP для отображения и запуска отката, но для использования этого приложения потребуется системная интеграция.

Google может предоставлять пользователям функцию отката приложений через Google Play или ОС, но они не хотят этого делать, поскольку эта функция предназначена только для тестирования и не предназначена для использования в рабочей среде. Это позор, но, вероятно, есть много веских причин, почему.

Читайте также: