Доброго времени суток! На этот раз статья совершенно не по теме программирования, но всё же в сфере IT. Речь пойдёт о моём опыте перепрошивки практически нового устройства (чуть ниже поясню, почему почти новый, несмотря на возраст около 3 лет) и восстановления данных после такой манипуляции.
Почему считаю устройство новым
В мои руки аппарат попал сравнительно недавно (примерно в декабре 2021 года) в состоянии б/у, а покупался в ноябре 2019 года на замену Samsung Galaxy J7 (2017).
До попадания устройства в моё владение он использовался в своих основных задачах (позвонить да в сеть выйти). Иными словами, если бы не время, то он был бы ещё на гарантии от производителя. Я же по своей прихоти решил разблокировать загрузчик и модифицировать стандартную прошивку (установить Magisk и несколько плагинов для своих нужд), но первая попытка не обвенчалась успехом и я получил бутлуп (вечную загрузку), кроме чего счётчик Knox перешёл в состояние, отличное от нуля, что означало наличие вмешательств в системное ПО. Итогом этой попытки стала блокировка загрузчика и решение больше не пытаться использовать неофициальные прошивки на данном устройстве. Я на какое-то время сдался, но недавно желание получить больше возможностей (и более актуальную прошивку в виде OneUI 4) сделали своё дело.
Подготовка
Резервное копирование
Перед такими манипуляциями необходимо сделать несколько резервных копий различного характера. Первым делом я написал на листочке список приложений, которые необходимо восстановить. Среди них были РНКБ, Mir Pay, несколько приложений от Яндекса, Microsoft и Google, а также приложения, которые я использовал в качестве инструментов.
Сделать полноценную резервную копию (Nandroid Backup) не представлялось возможным, так как для этого было необходимо сторонняя утилита восстановления (recovery), которую я далее буду называть просто "рекавери".
По итогу у меня резервные копии хранились в трёх расположениях: Листочек со списком приложений для восстановления, облако Samsung и облако Google. В связи с местоположением (Крым) я не мог рассчитывать на второй и тем более третий вариант, но деваться некуда, других способов сделать РК я не нашёл.
Загрузка прошивок
Следующим пунктом является загрузка двух прошивок (желаемой и текущей на случай необходимости вернуть работоспособность аппарату в случае неудачной прошивки).
С текущей прошивкой всё понятно: скачал архив с пятью файлами, соответствующим моей текущей прошивке. Пятифайловые прошивки устанавливаются через Odin или Heimdall, я же решил использовать первый вариант, который мне пригодится и для начального этапа установки кастомной прошивки.
С кастомной прошивкой немного сложнее: она предоставлена в виде классического ZIP-архива для прошивки через TWRP (TeamWin Recovery Project) или его аналог (в моём случае выбор пал на SHRP — SkyHawk Recovery Project). Оба рекавери шли в двух версиях: для прошивки через Odin и для прошивки через Fastboot. Мне было проще использовать первый вариант, поэтому я скачал соответствующий TAR-архив и сохранил в отдельную папку, так как впереди ещё много чего надо скачивать.
Дабы рекавери не слетело после первого запуска, необходимо применить два патча для отключения шифрования, которые так же я заранее нашёл в соответствующей инструкции, скачал и сохранил в ту же папку, где хранится рекавери.
И, наконец, остался самый большой пункт — скачать саму прошивку. Мой выбор пал на FreshROM 4 на базе OneUI 4.1. У этой прошивки были три нюанса: не работают маски в камере в AR-режиме, нет обновлений по воздуху и прошивка не проходит проверку SafetyNet из коробки. Первые два пункта меня не волнуют, так как обновления можно устанавливать через рекавери, а масками в камере я не пользуюсь. Третий же пункт оставался под вопросом, но опыт работы с предыдущими аппаратами показывал, что эту проблему можно исправить (и для моего телефона нашлась соответсвующая инструкция).
Начинаем
Обычно я подбираю для прошивки такой момент, чтобы у меня оставалось время на восстановление в случае неудачи. На этот раз я поступил так же.
Первым делом необходимо разрешить отладку по USB и разрешить разблокировку загрузчика. Оба этих пункта делаются в параметрах для разработчиков, доступ к которым на OneUI закрыт паролем блокировки экрана. Захожу в "Настройки -> Об устройстве -> Сведения о ПО" и несколько раз нажимаю на номер сборки, после чего появляется запрос на ввод PIN-кода блокировки экрана (также это может быть графический ключ или пароль, но в моём случае именно PIN-код). Ввожу правильный код и появляется сообщение об открытии параметров разработчика. Вспоминаю про мем о том, как стать разработчиком в несколько кликов и продолжаю свой путь джедая. Следующей целью являются параметры для разработчиков, в которых я активирую разблокировку загрузчика (с повторным вводом моего PIN-кода) и отладку по USB с полным доступом (на различных устройствах могут быть дополнительные параметры, которые также стоит включить, на всякий случай).
После этого сразу же выключаю телефон (не перезагружаю, а именно выключаю), дожидаюсь вибрации, зажимаю обе кнопки громкости и подключаю телефон к ноутбуку по кабелю. Итогом таких действий стало появление страшного изображения бирюзового цвета на экране, а там и инструкции по дальнейшим действиям. Мне нужно разблокировать загрузчик, а потому я удерживаю кнопку увеличения громкости. После этого выполняется процесс очистки данных и перезагрузка в обычном режиме.
Пора бы и отдохнуть
Для меня каждая перепрошивка является довольно стрессовой ситуаций, поэтому я заварил себе кружку чаю, пока телефон загружался. Попивая свой чай, я быстренько прошёл первичную настройку устройства без восстановления данных, так как сама по себе перепрошивка даже не была начата.
Продолжаем
После первичной настройки снова идём в параметры разработчика (предварительно заново их открыв) и вновь включаем отладку по USB. Теперь можно снова выключать телефон и запускать в режиме прошивки. Открываю на компе Odin и закидываю рекавери в первую графу (AB называется, если память не изменяет). В левом нижнем окошке перехожу во вторую вкладку и отключаю автоматическую перезагрузку, так как перезагружаться надо будет сразу в рекавери, а эта опция перезагрузит в систему, которая автоматически восстановит стоковое рекавери или просто сломает его. Готово, нажимает на кнопку старта в Odin'е и дожидаемся успешного завершения. Но не судьба... В моём случае телефон запретил прошивку из-за того, что не прошло определённого времени с момента разблокировки загрузчика. Проблема решается очень просто и быстро: по найденной инструкции я перезагрузил телефон в систему и откатил дату на месяц назад в настройках (автоматическое определение даты и времени, разумеется, выключил). Потом перезагрузил телефон (всё так же, в систему) и вновь включил автоопределение даты и времени. Дата вернулась на своё место, после чего загрузчик думает, что с момента разблокировки прошло достаточно времени. Со второй попытки прошивка удалась, и я перезагружаю телефон в рекавери (сначала кнопку питания и кнопку уменьшения громкости, а потом палец на качельке громкости быстро перемещаю на другую сторону, когда экран погас). Загружается рекавери (в моём случае SHRP) и первым делом спрашивает, разрешить ли запись в раздел с системой. А для чего же мы ставили стороннее рекавери? Конечно, мы будем использовать этот раздел для записи. Потом по MTP (или же просто "по кабелю") скидываю два патча на телефон и прошиваю их. Эти патчи необходимы для сохранения рекавери и его корректной работы.
Сама кастомная прошивка
Итак, рекавери закрепили, теперь оно не слетит. Перезагружаем в систему, потом в рекавери, и убеждаемся в истинности данного факта. Перезагружаться в систему не обязательно, но после применения патчей, для рекавери она очень нужна.
Теперь же осталось прошить FreshROM 4. Я закидываю файл с прошивкой на телефон и пока не прошиваю его. Сначала по инструкции надо очистить некоторые разделы (данные, кэш, систему и ещё что-то снести). И только после этого я прошиваю этот файл без дополнительных патчей. После прошивки сразу же перезагружаю телефон в систему и наблюдаю за первой загрузкой OneUI 4.1. Интерфейс стал более единым, теперь даже в гугловских приложениях при загрузке спиннер OneUI отображается.
Восстановление
Последний этап безболезненной перепрошивки — это восстановление приложений и данных. Я, как обычно и делаю, выбрал оба варианта восстановления из облаков (Google и Samsung), после чего решил довести это до ума вручную. Приложений восстановилось слишком много, поэтому часть из них я просто удалил, а остальное настроил заново, так как данные приложений не поддаются резервному копированию в облака. После полной настройки аппарата я сделал Nandroid Backup всего, что в нём есть и скинул его на внешний жёсткий диск, чтобы можно было восстановить рабочую систему в несколько движений.
Один нюанс
В описании к прошивке был указан баг, связанный с проверкой SafetyNet. А для работы приложения Mir Pay она необходима, поэтому проблему надо решать. Сначала я спросил об этом на форуме и получил ссылку на инструкцию по прохождению этой проверки. Согласно инструкции, нужно поставить два модуля для Magisk'а (Shamiko и MagiskHide Props Config), что я и сделал. После чего, используя терминал, я быстренько настроил параметры скрытия магиска и настроил его скрытие для всех приложений, кроме тех, которым нужен ROOT-доступ. Это было долго и нудно, поэтому описывать в подробностях я не стану. На всё-про-всё я потратил около получаса, после чего проверка была пройдена, и я смог добавить карту в Mir Pay и пользоваться оплатой по NFC.
Итоги
Я очень доволен новой прошивкой. Она работает куда шустрее, чем прежняя. Кроме того, появилось множество новых настроек и возможностей, нетипичных для среднебюджетных устройств. Я перечислю лишь некоторые из них:
- Поддержка Samsung DeX. На станции не проверял, но в паре с Windows 11 работает отлично.
P.S.: После недавнего обновления появилась возможность запускать DeX прямо на экране телефона, но при этом сломалось взаимодействие с Windows. - Изменение разрешения экрана. Раньше я этого добивался через ADB, теперь можно прямо в настройках
- Режимы производительности: обычный, многозадачность, игровой. Я выбрал многозадачность, благодаря чему переключение между приложениями работает крайне шустро в сравнении с прежней прошивкой.
- Android 12 в конце-то концов. Я не гонюсь за новыми версиями Android, но ненавижу версии ниже 11, так как, начиная с этой версии, в системе появился тоггл для включения отладки по Wi-Fi, что позволяет устанавливать APK с компьютера без проводов. Для первого подключения всё ещё нужен провод.
- Кроме того в системе предустановлен Magisk, который позволяет значительно расширить возможности аппарата за счёт ROOT-доступа и расширений для самого Magisk'а.