» Прошивки

Портирование ROM’ов GB/CM7/Stock на своё устройство

Данная статья, которая посвящена портированию прошивок на официально неподдерживаемые Android-девайсы будет полезна тем, кто желает обновить программное обеспечение своего «робота», но кому недостаточно «стандартного» набор официальных и кастомных прошивок. Сразу отметим, что в процессе создания таких портов могут возникать те или иные ошибки или мелкие баги, однако руководство коснется только общих вопросов, не углубляясь в исправление глюков.

Для портирования понадобятся такие программы, как Notepad++ (или любой другой качественный текстовый редактор), WinRar (или другая программа-архиватор), персональный компьютер (с операционной системой Windows или другой), а также хотя бы базовый уровень познаний в структуре операционной системы Android и здравый смысл (например, нет смысла портировать HDPI-ROM напрямую на MDPI и так далее).

Также потребуются два ROM`а – портируемый и CM7/GB/Stock в качестве базы для создаваемого порта. Вы также должны быть обознаны в том, на основе какой ревизии платформы ARM создан ваш девайс (ARMv5, ARMv6 или ARMv7), так как ROM-основа и ROM-порт обязательно должны быть под один и тот же тип процессора.

По факту, работа проводится с тремя основными папками – портируемым ROM’ом, из которого извлекаем всё необходимое; базовым ROM’ом – то есть, куда производит портирование, и где собираем уже новую версию ROM`а; резервными копиями, создаваемыми по ходу дела.

Для начала, создадим резервную копию из папки базового ROM, а именно файлов, которые находятся в директории /system/app:

stk.apk
vpnservices.apk
camera.apk
bluetooth.apk

Backup можно поместить куда душе угодно, даже на рабочий стол.

Удаляем нижеуказанные папки из базового ROM и заменяем их портируемым:

/data
/system/app
/system/framework
/system/fonts
/system/media

Не забываем скопировать из портируемого ROM в базовый библиотеку libandroid_runtime.so в папку /system/lib, поскольку без неё новый ROM с высокой долей вероятности не запустится вовсе. Впрочем, если при условии замены устройство уходит в циклический ребут, то есть безостановочно и безрезультатно перезагружается – стоит попробовать использовать libandroid_runtime.so из базового ROM’а.

Копируем файлы, резервные копии который создали, в базовый ROM. Далее, копируем все библиотеки и папки, находящиеся в system/lib базового ROM, в соответствующую директорию портируемого. Заменяем все файлы в случае совпадения имен. В базе удаляем директорию lib полностью, перемещаем такую же папку из портируемого в базовый ROM.

Переходим в папку /system/etc базового ROM`а, открываем папку init.d. Копируем всё её содержимое в такую же (/system/etc/init.d) директорию портируемого ROM`а. После чего удаляем папку в «базе». Копируем init.d в «базу» из «порта», в /system/etc.

Снова открываем директорию /system/etc базового ROM`а, где открываем папку permissions. Копируем всё её содержимое в такую же папку (/system/etc/permissions) портируемого ROM`а. Опять-таки, удаляем папку permissions в «базе», после чего из портируемого ROM`а копруем permissions в /system/etc базового ROM. Такие незамысловатые действия способны исправить проблемы с permission и gapps до их реального появления.

Открываем при помощи текстового редактора (рекомендуем использовать Notepad++) файл build.prop портируемого ROM и «базы». Размещаем два окна Notepad++ друг возле друга, и правим build.prop портируемого ROM в соответствии с базовым, так, чтобы они совпадали. Очень важно, чтобы параметры:

ro.build.description=
ro.build.fingerprint=

В build.prop портируемого ROM`а были такими же, как в базового, иначе созданная прошивка не будет работать вовсе. Сохраняем build.prop и закрываем Notepad++, после чего копируем Build.prop из портируемого ROM в базовый.

Теперь необходимо подредактировать updater-script. Переходим в папку META-INFcomgoogleandroid базового ROM`а и открываем данный файл при помощи Notepad++. Так же открываем и updater-script и портируемого ROM`а. Располагаем два окошка Notepad++ рядом, и меняем updater-script «базы» для схожести с updater-script «порта». Настоятельно не рекомендуется менять symlinks. Просто нужно исправить или добавить всякие permissions, asserts, ui_prints, run_programs и устанавливаемое ядро прошивки. В updater-script «базы» тщательно сверяемся, чтобы Format values были установлены для нужной модели мобильного девайса. Перепроверяем, или выбрали нужное ядро. Если устройство не от того же производителя, от которого взято ядро, то обязательно нужно его распаковать, после чего поправить BOOTCLASSPATH в init.rc. BOOTCLASSPATH из «порта» копируем в базовый ROM, после чего снова упаковываем ядро.

Вот, в принципе, и всё. Финальная прошивка получилась в папке базового ROM. Также в неё можно добавить по вкусу разные приложения, патчи, скрипты и так далее.