2014-09-29

О прошивке Андроида

Попробую собрать воедино тайные знания о том, как перепрошивать Андроид устройства. Тут много малопонятных терминов и загадочных процедур. Постараюсь обобщить.
Android Gears
ВНИМАНИЕ! Все прошивки, рекавери и прочее собираются энтузиастами. В лучшем случае (например, CyanogenMod) — сообществом энтузиастов. Но весьма часто и анонимными индивидуумами. Так что нет никаких гарантий, что после перепрошивки все будет работать как надо. В том числе и я не даю никаких гарантий, что, прочтя этот пост, вы сможете безболезненно перепрошить любое устройство. Действуйте на свой страх и риск. И помните, что любое изменение прошивки вашего устройства как правило лишает вас гарантии.
Начнем с терминологии.
Рекавери (recovery). Это некий аналог bios setup. Программа, которая хранится в отдельной специальной памяти устройства. И которая может быть запущена при загрузке (перезагрузке) устройства. И которая позволяет делать всякие страшные действия, пока основная ОС не запущена.
В устройстве всегда уже есть штатное рекавери. Оно запускается при обновлении прошивки «по воздуху». Тот самый зеленый робот с шестеренками в животе — это картинка, отображаемая штатным рекавери. А вот чтобы поставить какую-то другую прошивку — нужно прошить кастомное рекавери.
Рекавери доступны в виде образов (.img файлов).
Recovery screenshot
Что можно сделать в рекавери? Перезагрузить устройство (уже в обычном режиме). Установить zip архив (об этом ниже). Вайпнуть разделы (тоже ниже). Забэкапить и отресторить само рекавери и, иногда, разделы и приложения.
ClockworkMod (CWM, CWMR) — один из самых популярных рекавери. Существует в двух версиях. В «обычной» версии навигация по меню осуществляется клавишами (теми немногими, что остались) устройства: громкость тише/кромче — это вверх/вниз и т.п. В «touch» версии можно все тыкать пальцами, что конечно, удобнее. На современных устройствах нет противопоказаний против touch версии, ставьте её.
Вайп (wipe). Это форматирование ( удаление всех данных! ) раздела. Дискового раздела, ну точнее раздела встроенной флэш-памяти. Дело в том, что в Андроид имеется несколько разделов.
boot — это раздел в Линукс ядром. Как правило явно вайпать его не нужно. (А если вайпните по ошибке — все пропало :)
В system хранятся системные (предустановленные) приложения и данные. Вайпать этот раздел нужно только если вы собираетесь ставить абсолютно новую прошивку.
В data устанавливаются пользовательские приложения и хранятся пользовательские данные. Ну кроме тех данных, что помещаются на SD карту, реальную или виртуальную. Стандартная штука «Сбросить на заводские настройки» как раз и вайпает этот раздел. Соответственно, делайте это, если хотите удалить все приложения (и данные), кроме предустановленных.
cache — это кэш. Кэш Далвика (Dalvik, ява-машины в Андроид) и не только. Сюда помещаются всякие оптимизационные данные, чтобы приложения запускались и работали быстрее. Именно в этот раздел что-то записывается, когда, после обновления прошивки, Андроид радостно сообщает об «оптимизации 50 из 100500 приложений». Может, видели. Иногда бывает, что некоторые глюки приложений лечатся вайпом этого раздела. Жизненно необходимо его вайпать при обновлении прошивки.
Android Partitions
Прошивка (ROM, custom ROM). Это «образ» системы. Которым вы заменяете штатную систему (ну или ту, которая установлена на данный момент).
Если в десктопном мире под образом системы понимают образ жесткого диска или CD, то «образ» прошивки Андроида — это обычный zip архив. Этот архив содержит обычные файлы, которые распаковываются в обычные каталоги в файловой системе устройства. Соответственно, то, что распаковывается в /system замещает системные файлы (потому нужно делать вайп этого раздела, чтобы не остались ошметки старой прошивки).
Впрочем, этот zip архив может содержать и готовые образы (.img, в «десктопном» смысле), например, для /boot раздела. Также файлы в архиве подписаны (примерно так, как делается в явовых .jar архивах). И имеются скрипты, которые выполняются при установке архива.
Найти прошивки можно в основном на 4PDA или XDA. Это форумы (кто сказал, что форумы вымерли?), и поиск там оставляет желать лучшего. Но они успешно индексируются Гуглом.
CyanogenMod (Цианоген, Циан) — самая популярная кастомная прошивка. Если не знаете, чем прошиваться, попробуйте Цианоген. Чаще всего Цианоген — не самая быстрая прошивка (если у вас старое устройство и вы хотите выжать все, что можно). Потому что он стал грешить кучей предустановленного софта. Но почти всегда Цианоген — самая стабильная прошивка (из кастомных, естественно).
Гуглоприложения (GoogleApps, gapps). Кастомные прошивки не содержат «стандартных» гугловых приложений вроде Google Play, Gmail и т.п. Потому что эти приложения — проприетарные, и их нельзя так просто распространять. Но их все же можно скачать и установить.
Это обычные zip архивы. Такие же, как прошивка. Просто содержат меньше файлов. И прошиваются точно так же.
Радио (radio, radio module). Кроме рекавери есть еще одна область памяти. Программа радио-модуля. Того самого, который GSM, GPS, Bluetooth, Wi-Fi и т.д. У него тоже есть какая-то программа и её можно обновить. Это всегда какой-то .img файл неясного происхождения. Говорят, если прошить на более новую версию, радиофункции могут начать работать лучше, могут исправиться какие-нибудь глюки. Помните только, что этот образ сильно завязан на конкретное железо. А железо может быть разным даже для одной и той же модели телефона. Будьте внимательны.
Бутлоадер (bootloader). Это еще одна программа и еще одна область памяти, которую можно прошить. Это системный загрузчик, который грузит либо рекавери, либо систему. Это он показывает красивую анимацию при загрузке устройства. Это еще один режим загрузки (кроме запуска основной ОС и рекавери), в который иногда нужно попасть, чтобы заменить рекавери. Иногда этот режим называют fastboot (об этом ниже).
Android Boot Modes
Лок (lock, unlock). Часто бывает, что рекавери или другие области памяти закрыты на запись. Залочены. Перед перепрошивкой эту блокировку надо снять. У хороших производителей это делается одной командой, напримерfastboot oem unlock. У плохих производителей нужна либо специальная утилита (причем работает она, небось, только под Windows), либо специальные хаки. Особо плохие производители могут ограничить количество разблокировок устройства, чтобы вам не захотелось слишком часто его перепрошивать.
Рут (root). Root — это суперпользователь в Unix. Такой пользователь может делать с системой все, что ему будет угодно. Обычные программы в Андроид никогда не имеют подобных прав. Но если «рутануть» устройство, то некоторые программы (вроде бэкапера или менеджера тех же прошивок) смогут получить эти самые права рута. В результате открываются некоторые интересные, но потенциально опасные возможности.
Технически рутование — это установка в систему юниксовой программы sudo (или su?) и некоей андроидной мордочки для контроля и раздачи прав. Другие программы, которые хотят рута, уже знают, что запустить и кого спросить.
Рута иногда нужно получить, чтобы появилась возможность перепрошить рекавери. А иногда нужно обновить рекавери, чтобы появилась возможность рутануть устройство. В особо запущенных случаях временное получение прав рута делается через известные уязвимости системы. Тут все индивидуально для разных моделей устройств.
fastboot. Утилита для работы с разделами и прошивками устройства, подключенного по USB. С недавних пор является частью Android SDK и доступна не только под Windows. Нужна для снятия локов, прошивки радио и рекавери, перезагрузки в разные режимы. Чтобы fastboot работал, устройство нужно перезагрузить в соответствующем режиме (bootloader, он же fastboot).
adb (Android Debug Bridge). Стандартная утилита для отладки андроидных программ (на устройстве, подключенном по USB). Тоже часть SDK. В данном случае нужна для перезагрузки в разные режимы, доступа к командной строке устройства (да, в Андроиде тоже есть шелл), копирования файлов на SD карту (или внутреннюю память устройства). adb работает, когда устройство загружено в нормальном режиме (загружен Андроид) и влючена отладка по USB в инструментах разработчика (об этом ниже).
Кирпич (окирпичить, brick, to brick). Так называют устройство, прошивка которого не удалась и устройство перестало загружаться. Получается дорогой кирпичик из пластика, металла, стекла и кремния. Существуют способы вывести устройство из такого состояния. Но тут все зависит от тяжести случая и конкретной модели устройства.
Androids
Последовательность прошивки индивидуальна у каждого устройства. Поэтому ищите инструкцию именно для своего девайса и следуйте ей. Но тем не менее, общие принципы соблюдаются. Их я и опишу. Хорошие инструкции, которые можно адаптировать под любые прошивки, имеются в вики CyanogenMod.
Вся процедура прошивки делается с «большого» компьютера под управлением Windows, Linux или MacOS (хотя сильно ощущается доминирование Windows среди прошивкоделателей). Андроид устройство должно быть подключено по USB.
  • Подготовка
    • Определите точную модель устройства, с точностью до версии аппаратного обеспечения (одна и та же модель, выпущенная в разное время и для разных регионов, может иметь разное железо).
    • Определитесь с прошивкой, которую собираетесь ставить.
    • Найдите подробные инструкции о том, как прошивать данную прошивку на данном устройстве.
    • Скачайте zip файл прошивки. Поместите файл в корень SD карты (или внутренней памяти) устройства.
    • Определитесь с версией рекавери. Скачайте img файл рекавери.
    • Определитесь с набором дополнительного ПО, которое хотите поставить вместе с прошивкой: gapps, рута и т.п. Скачайте zip архивы и скопируйте их на устройство.
    • Скачайте дополнительные утилиты (например, для снятия блокировки), если необходимо.
    • Скачайте и установите Android SDK. Под Windows вам понадобится еще установить USB драйвер.
    • Включите инструменты разработчика на устройстве. В Настройках зайдите в раздел «О телефоне» и быстро потыкайте по пункту «Версия ядра».
    • Включите «Отладку по USB» в настройках «Для разработчиков».
    • Полностью зарядите устройство (во время прошивки оно заряжаться не будет, и совсем плохо, если сядет батарея).
  • Прошивка
    • Подключите устройство к компьютеру USB кабелем.
    • Загрузитесь в режим fastboot. Для этого нужно сначала выключить устройство, а потом нажать хитрую комбинацию кнопок. Что-нибудь вроде Power + Volume Up + Volume Down. Или же может сработать командаadb reboot bootloader. Возможно, чтобы загрузиться в fastboot, вам понадобится рут. Сверяйтесь с инструкцией.
    • Разлочьте устройство. Тут все индивидуально. В простейшем случае может оказаться достаточным выполнить команду fastboot oem unlock.
    • Прошейте новое рекавери. В простейшем случае хватит команды fastboot flash recovery clockwork.img
    • Прошейте радио, если хотите. В простейшем случае хватит команды fastboot flash radio radio.img
    • Перезагрузитесь в режим рекавери. Иногда в рекавери можно перейти прямо из fastboot. Можно выключить устройство и нажать другую секретную комбинацию кнопок. Но чаще проще перезагрузить устройство в нормальный режим, а затем выполнить adb reboot recovery.
    • Забэкапьте вашу текущую прошивку. Это очень поможет, если вы захотите все вернуть назад.
    • Вайпните cache (всегда), system (если ставите абсолютно новую прошивку, а не обновление имеющейся), data (если хотите удалить понаставленные программы). Заметьте, что вы можете обновить прошивку и оставить все скачанные программы, если не вайпать data. Но тут возможны глюки.
    • Прошейте прошивку. Выберите «Install zip» и укажите zip файл прошивки, который вы заранее скопировали в память устройства.
    • Прошейте gapps, рута и прочее, что хотите. Точно так же выберите «Install zip» и укажите zip файлы в памяти устройства.
    • Перезагрузите устройство. Прямо из рекавери. Первая загрузка будет долгой. Очень долгой. Ведь cache наполняется.
    • Наслаждайтесь новой прошивкой.
    • ...
    • ПРОФИТ
CyanogenMod