bash.im ithappens.me zadolba.li
9191

Роботы не терпят измен

15 мая 2012, 11:45

В основе Google Android лежит Linux — это знают все. Это значит, что и мороки с ним бывает порой столько же. Вот и сейчас перелопатил кучу мануалов из-за своей невнимательности.

Переименовал папку с бэкапами системы, чтобы по ошибке потом вместо одного не восстановить другое. Потом думаю: а верну-ка я пока на свой Galaxy Ace эту альфа-версию CyanogenMod 9 (Android 4.0.4), поковыряюсь в новой «мороженке» от Гугла!

Не тут-то было: перезагрузив телефон, войдя в Recovery и сделав вайп данных на всякий пожарный, я обнаружил, что при попытке восстановить образ мне поступает жалоба на несоответствие хэшей MD5. У меня аж мороз по коже: неужели похерился? Ладно, вернём хотя бы старую инфу, а то после вайпа ставить все программы заново неохота. Выбираю бэкап CyanogenMod 7 (Android 2.3.7) — и у него та же ошибка. Тут мозг зашевелился и выдал мысль: если хэши не совпадают, значит, в файле, что лежит с архивами, зашифрованы пути. Ну и хорошо — по-быстрому гуглю онлайн-генератор хэшей, ввожу путь до бэкапа в обычном формате (/sdcard/…/data.ext4.tar), копирую в nandroid. Считаю md5 от полученных значений, сохраняю, пробую. С замиранием сердца смотрю, как телефон, проверяя хэш, долго сверяет его. «Съел! Сейчас пойдёт!» — уж было обрадовался я, но телефон огорчил меня, выплюнув ту же ошибку.

Ладно, если нельзя справиться с хэшем, значит, нужно искать другой путь восстановить информацию, ведь трафик тратить и заново настраивать телефон в два часа ночи очень неохота. Ведь можно создать зип-файл в виде обновления системы и залить его как это самое обновление. Только зип-то Андроиду не простой нужен, а подписанный, с сертификатами и manifest.mf — привет, Java!

Гуглю мануал по созданию такого архива. Пишу скрипт установки, создаю сертификат и ключ, запаковываю в архив и подписываю. Устанавливаю — и робот версии 2.3.7 шлёт меня лесом за то, что скрипт написан языком, который со времён версии 1.5 уже не использует. Ищу мануал, как переписать под 1.5+, нахожу, переписываю, перезапаковываю, переподписываю, снова пробую. «Еrror in update.zip (status 6)». Что теперь-то не так? Гуглю — либо что-то недописано в скрипте, либо кодировку такую Андроид не ест. Ага, ANSI-то не ест. Перепроверяю — вплоть до буквы всё верно, а не работает. Что, простите? Цитирую: «Note: you should add one extra line at the end of the file». Да, без лишней пустой строки скрипт не хочет запускаться.

Добавляю, провожу все операции снова — и опять, но на сей раз жалоба на update-binary. Ищу, как бороться с этим, и натыкаюсь на совет по перезагрузке Recovery. Пробую — и снова попадаю на ошибку «status 6». По запарке вместо пункта Install нажимаю Backup и наблюдаю, как радостно бегут буковки и прогресс-бар по маленькому экрану смартфона. Отменить процесс нельзя, поэтому, дождавшись завершения, решаю попробовать снова. Вновь подключение карты памяти к компьютеру и внезапное озарение экрана окном о том, что карту не помешало бы проверить на ошибки. Даю «окошкам» добро, жду окончания процесса и отключаю карту, пробую снова, возлагая на это одну из последних надежд, так как два часа плясок с бубном, скриптами и сертификатами на одном месте измотали очень сильно.

В конце концов я плюнул и просто прошил снова, устанавливая всё как обычно. Хоть и потерял многое, но запомнил снова забытое ранее правило: «Работает — не трогай!»