Как создать прошивку на андроид самому?

Модификация стоковых прошивок для Android. Часть 1

Здравствуй Хабр!
Несколько лет назад, когда я впервые познакомился с Android, я услышал от своего коллеги по работе, что Android предусматривает возможность установки модифицированных или самодельных прошивок. Признаться, тогда я был далек от этого. И даже пол года назад меня едва интересовали подобные вещи. Глубоко в душе, я был уверен: то, что делает производитель, уже предназначено для нормального использования.
Каково же было мое разочарование, когда я приобрел телефон из поднебесной, где заводскими настройками было запрещено использование Google, Skype, Facebook и других приложений. В принципе, на некоторые вещи можно было закрыть глаза, но когда мой телефон не подразумевал использование учетной записи Google — я взял с себя обещания обязательно разобраться во что бы мне это не стало.
Прошло пол года и мои кастомные прошивки с успехом используются по всему миру.
В данной серии статей пойдет речь о том, как делать reverse программирование для Android, реализовывать патчи, твики и моды.

Преамбула

И так! Давайте сперва определимся с понятиями, которые будут использоваться в данной статье. Ваше привычное понимание, при этом, может сильно отличаться.
Патч — изменение или замена существующего программного кода с целью модификации алгоритма программы.
Мод — как правило, добавление дополнительного функционала в существующий программный код без изменения алгоритма.
Твик — усовершенствование функционала программы с целью облегчения доступа к параметрам системы.
Также хочу заметить, что все примеры будет взяты для телефона HTC, но это не значит, что данная информация не может быть использована на других телефонах.
Обращаю ваше внимание, что я, как автор, не несу ответственности за возможную потерю данных на вашем телефоне в результате использования информации ниже.

Подготовка среды

Обойдусь без подробных инструкций как пользоваться тем или иным программным обеспечением. Если вам интересна данная статья и вы дочитали до этих строк, то я надеюсь, что вы уже опытный пользователь и имеете опыт использования, ну или хотя бы экспериментирования в данной области. Инструкций, статей и результатов тестирования полно в открытом доступе, впрочем, как и на Хабре. Также обойдусь без описания некоторых терминов, иначе статья получится очень большой и нудной. Будем писать только по делу. Уверен, что среда у вас уже давно стоит. Если нет, то предлагаю скачать и установить.
1. Android SDK. Это среда разработки приложений для Андроид. Для того чтобы делать модификации, нам обязательно придется проверять наш программный код. Среда разработки самое лучшее, что мы можем использовать.
2. Android Kitchen. Данная утилита позволит вам работать с образами системных партиций официальной ну или неофициальной прошивки.
3. JD-GUI. Декомпилятор программного кода языка Java. Сразу отмечу, что это самый лучший декомпилятор в плане удобства использования.
4. DJ Java Decompiler. Еще один декомпилятор, или дизассемблер, как некоторые любят называть, программного кода языка Java. Не удобен в плане использования, но разбирает код, который иногда не понимает JD-GUI.

5. smali. Еще один дизассемблер, но уже dalvik кода. smali нужен для дизассемблирования, а backsmali ассемблирования кода.
6. dex2jar. Утилита для конвертации исполняемых файлов Dalvik кода.

Преобразование прошивки

Разумеется, прошивка, которая стоит у вас на телефон от производителя оптимизирована с целью сокращения энергопотребления. Для того чтобы прошивку можно было изменять, ее необходимо преобразовать в формат, позволяющий изменять код. Для этого используется Android Kitchen. Можно конечно и руками, как я и делал раньше, пока не нашел эту самую «кухню». Как вытаскивать системную область из телефона, устанавливать среду, делать DEODEX прошивки, вы можете прочитать в интернете. Если вам уже ничего не понятно, я думаю стоит повременить со статьей, пока вы не наберете достаточно опыта.
После того, как прошивка из оптимизированного вида (ODEX — оптимизированный dalvik исполняемый код, если мне не изменяет память) стала DEODEX (то бишь НЕ оптимизированной), все исполняемые файлы готовы к модификации.

Непосредственно модификации

Создание патчей

Как я уже и рассказывал, мой телефон изначально имел запрет на использование Google. Ну хоть ты тресни, на Playstore не зайти, учетную запись не настроить, телефонная книга толком не синхронизируется. Зачем нужен такой Android? Долго копаясь в логах (logcat) самого устройства, я нашел записи, которые говорили о том, что использование Google запрещено. Самое не удобное в Android, вы видите лог, но не знаете какое системное приложение его производит. Чтобы отыскать от куда ноги растут, мне пришлось распотрошить все системные приложения до дизассемблированного Java кода. Это заняло достаточно времени, но я до сих пор пользуюсь проделанной работой при анализе и поиске нужного кода. Этапы получения подобного инструментария следующие:
1. Сделать DEODEX всей прошивки
2. Вашу новую DEODEX прошивку надо будет собрать и прошить на телефон. Как это делается — тема другой статьи.
3. Из каждого файла, находящегося в /system/framework вытащить файл classes.dex и переконвертировать в JAR посредством dex2jar.
4. Каждый полученный JAR открыть в JD-GUI и пере-сохранить в исходный код
5. Распаковать исходный код из архива.
В итоге у меня получилось столько папок, сколько было JAR файлов в /system/framework, и каждая папка имела структуру исходных кодов Java.
Путем несложных манипуляций, я быстро отыскал то место, которое генерировало записи в logcat.
Не будем рассматривать всю логику запрета, так как для каждого случая это отдельная история. Мне пришлось потратить пару часов, прежде чем я нашел где производятся проверки, построить в голове блок схему алгоритма и понять куда надо лезть, чтобы алгоритм чуть чуть «попортить».
Оказалось все просто. Есть подпрограмма, которая на основе заранее установленных констант, при обращении отвечала, относится ли телефон к Китаю или же нет.
Код находился в файле HTCExtension.jar, а класс, который содержал данную подпрограмму находился в \com\htc\util\contacts\BuildUtils$Customization.java

Распаковка и анализ оригинального файла

1. Сперва нам надо взять оригинальный DEODEX JAR файл, который отвечает за нужную нам часть кода. В нашем случае HTCExtension.jar.
2. Открыть любым архиватором и вытащить от туда classes.dex
3. С помощью конвертера dex2jar преобразовать его в JAR файл. Команда: dex2jar.bat classes.dex
4. Открыть полученный classes_dex2jar.jar файл в JD-GUI.
5. Да, чаще всего JD-GUI декомпилирует код не так как он выглядит в оригинале, оно и понятно, но читать вполне можно. В исходнике мы видим, что подпрограмма проверяет параметры проекта и языковой флаг прошивки. В нашем прискорбном случае возвращается значение TRUE.
public static boolean isChina() { if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23)); while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27)) return true; return false; }
6. Чтобы сделать патч, нам надо дизассемблировать сам Dalvik код. Для этого используем baksmali. Удобнее всего создать отдельную папку и положить туда три файла вместе: HTCExtension.jar, smali.jar и baksmali.jar. Даем команду java -Xmx512m -jar baksmali.jar -a -d -o HTCExtension -x HTCExtension.jar
— это API вашей версии Android. Для JB — это 16
— папка, где находятся все фреймворки прошивки.
В моем случае это была команда
java -Xmx512m -jar baksmali.jar -a 16 -d S:\dev\Android\Android-Kitchen\WORKING_JB_15\system\framework -o HTCExtension -x HTCExtension.jar
7. В нашей вновь созданной папке появилась папка HTCExtension, а в ней наши файлы с Dalvik кодом.
8. Отыскиваем файл по пути \com\htc\util\contacts\BuildUtils$Customization.java и смотрим код:
.method public static isChina()Z .registers 3 .prologue const/4 v0, 0x1 .line 276 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0xd8 if-eq v1, v2, :cond_13 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0xda if-eq v1, v2, :cond_13 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0x17 if-ne v1, v2, :cond_14 .line 297 :cond_13 :goto_13 return v0 .line 283 :cond_14 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S if-ne v1, v0, :cond_1d .line 285 const/4 v1, 0x2 sget-short v2, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_LANGUAGE_flag:S if-eq v1, v2, :cond_13 .line 291 :cond_1d sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0x1b if-eq v1, v2, :cond_13 .line 297 const/4 v0, 0x0 goto :goto_13 .end method
9. Страшно, не правда ли? Ничего же не понятно. Но, это дело поправимое. Создав несколько своих патчей и набив тем самым руку, вы легко сможете модифицировать код без сторонних средств. В нашем случае, в этом коде
.prologue const/4 v0, 0x1 происходит присваивание переменной v0 значение 1, то есть TRUE. Далее идут всякие проверки, и если телефон не китайский, то значение переменной изменяется:
.line 297 const/4 v0, 0x0 goto :goto_13
10. Самый простой способ спасти отца русской демократии, это изменить код на следующий:
.prologue const/4 v0, 0x0 , то есть поменять значение переменной с 1 на 0. То есть что бы ни было, всегда бы возвращалось значение FALSE и в JD-GUI код выглядел бы как public static boolean isChina() { if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23)); while (((HtcBuildFlag.Htc_PROJECT_flag == 1) && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27)) return false; return false; }
11. Да, метод ,будет работать. Но мы же не ищем легких путей — это раз. Во-вторых не совсем красиво. Хочется кода что-то вроде
public static boolean isChina() { return false; }
12. А как нам получить Dalvik код данного исходного кода? Для новичков мы сделаем небольшой трюк.

Создание Dalvik кода

1. Открываем Android SDK.
2. Создаем новый проект, и в наш единственный тестовый класс пишем следующий код
package ru.habrahabr.test; public class test { public static boolean isChina() { return false; } }
3. Компилируем наш проект и затем берем собранное приложение из рабочей области.
4. Кладем собранное приложение в папку, где мы с вами потрошили JAR файл.
5. Даем команду java -Xmx512m -jar baksmali.jar -a -d -o test -x test .apk
6. Мы дизассемблировали только что собранное приложение в Dalvik код.
7. Открываем наш файлик test.smali и видим там код
.method public static isChina()Z .registers 1 .prologue .line 7 const/4 v0, 0x0 return v0 .end method
8. Все, код для патчинга готов.

Накатывание патча

1. Dalvik код замусорен маркерами, указывающими строку кода в оригинальном исходном файле. Это нужно при выводе ошибок, если таковые имеются в вашей программе. Без указаний строк код также прекрасно работает.
2. Удаляем строки с нумерацией строк, копируем и заменяем метод (подпрограмму) в нашем \com\htc\util\contacts\BuildUtils$Customization.java файле.
.method public static isChina()Z .registers 1 .prologue const/4 v0, 0x0 return v0 .end method
3. Сохраняем файл. Да, забыл сказать, редактор нужен нормальный, например Notepad++ или EditPlus. Кому какой нравится.

Компиляция и сборка патченного JAR файла

1. С помощью backsmali мы распотрошили наш JAR файл, а теперь его надо собрать обратно.
2. Даем команду java -Xmx512m -jar smali.jar -a 16 HTCExtension -o classes.dex
3. В нашей папочке появляется файлик classes.dex
4. Снова открываем HTCExtension.jar файл архиватором и заменяем в нем существующий classes.dex на наш только что созданный.
5. Все, наш HTCExtension.jar содержит модифицированный программный код.

Замена оригинального файла на патченный

Обычно, для рядовых пользователей создаются специальные скрипты, которые через recovery заменяются. Но нам такое не интересно. Во-первых долго и нудно, во-вторых мы же опытные пользователи и можем себе позволить некоторые тонкости.
1. Заменить текущий рабочий файл можно следующими командами, если у вас уже стоит DEODEX прошивка и имеется root доступ:
adb push HTCExtension.jar /sdcard/HTCExtension.jar adb shell su mount -o remount -rw /system dd if=/system/framework/HTCExtension.jar of=/system/framework/HTCExtension.jar.back dd if=/sdcard/HTCExtension.jar of=/system/framework/HTCExtension.jar chmod 644 /system/framework/HTCExtension.jar rm /data/dalvik-cache/system@framework@HTCExtension.jar@classes.dex reboot
1-ая команда закидывает патченный файл на флешку
2-ая команда открывает shell
3-ая команда дает root доступ
4-ая команда монтирует систему в режим чтения/записи
5-ая команда делает резервную копию файла
6-ая команда перезаписывает существующий файл новым патченным.
7-ая команда настраивает разрешения
8-ая команда удаляет кэш
9-ая команда делает перезагрузку устройства.
2. Спасибо что дочитали до этого пункта, осталось немного.
3. После перезагрузки ваш новый патченный код вступит в силу.
4. Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.
adb shell su mount -o remount -rw /system dd if=/system/framework/HTCExtension.jar.back of=/system/framework/HTCExtension.jar rm /data/dalvik-cache/system@framework@HTCExtension.jar@classes.dex reboot

Эпилог

Да, кому-то показалось данная статья слишком специфичной, кому-то мало-понятной, а кому-то бесполезной. Я специально обошелся без углубленной детализации и иллюстраций как это все выглядит в живую и на практике. Во-первых, данный труд будет неблагодарный и только породить еще больше вопросов. Во-вторых, не хочу видеть армию пользователей на форумах, которые жалуются, что убили свой телефон.
К следующей статье я расскажу как делать Твики. Будет пример использования автоматической записи телефонных звонков родными средствами телефона. Спасибо за ваше внимание.
P.S. Если что-то не понятно или смущает, задавайте вопросы — всегда буду рад ответить и пояснить.

Любой пользователь Android имеет свое представление о том, как должна выглядеть операционная система, какие функции выполнять и какой набор ПО в ней должен быть установлен по умолчанию. Однако далеко не все знают, что создать собственную прошивку не так уж сложно. Для этого совсем не обязательно разбираться в ядре Linux, уметь компилировать исходники Android или понимать, как устроен смартфон.

Введение

Существует три способа создания собственной прошивки для Android-коммуникатора: 1. Допиливание и компиляция операционной системы из исходников, публикуемых компанией Google или командой CyanogenMod. 2. Модификация стоковой прошивки коммуникатора. 3. Модификация сторонней прошивки, созданной с помощью первого или второго способа.

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

Сторонние прошивки (так называемые моды) существуют практически для любого Android-устройства, с момента выхода которого на рынок прошла хотя бы неделя. Обычно они уже включают в себя все необходимые модификации, необходимые для корректной работы прошивки на коммуникаторе, а потому представляют собой отличную площадку для экспериментов над системой. Их можно модифицировать практически до неузнаваемости, включать в состав ОС любое ПО, изменять ее внешний облик, создавать множество низкоуровневых настроек с помощью простого текстового редактора и файлового менеджера. Эти действия не требуют глубоких знаний ОС и могут быть выполнены любым читателем журнала.

Общая структура каталогов и важные файлы

Набор файлов и каталогов, образовавшийся в результате выполнения предыдущей команды, и есть, в сущности, операционная система Android, причем ровно в том виде, в каком она будет размещена в NAND-памяти устройства. В зависимости от версии Android и фантазии автора, она может содержать разные наборы каталогов и файлов, однако в ней всегда присутствуют три обязательных объекта: META-INF, файл boot.img и директория system.

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

Файл boot.img содержит загрузочный образ, который включает в себя ядро Linux и образ initrd. Его можно распаковать, однако для нас он не несет особой пользы, так как почти любые системные параметры можно изменить с помощью файлов настроек и файловой системы /proc. Если же тебе требуется ядро, собранное с особыми параметрами, например с активированным планировщиком BFS или поддержкой NFS, то почти наверняка его можно найти на том же xda-developers и прошить с помощью ClockworkMod.

ClockworkMod Recovery: кастомное меню восстановления для Android

Наконец, каталог system — это то, ради чего все и затевалось. Содержимое этого каталога и представляет собой операционную систему Android без ядра Linux. Он содержит все, что нужно для работы ОС, а потому знать его структуру просто необходимо. Выглядит она так:

  • app — предустановленные приложения: телефон, калькулятор, календарь и т. д.
  • bin —аналог каталогов /bin и /usr/bin в Linux. Содержит различные системные компоненты, используемые более высокоуровневыми компонентами системы. Например, именно здесь лежит виртуальная машина dalvikvm.
  • etc — файлы настроек. Полный аналог /etc в Linux, используемый, однако, только системными компонентами. Приложения Android хранят настройки в каталоге /data/data.
  • fonts — шрифты. По умолчанию содержит только фирменные шрифты Droid (или Roboto в Android 4.0).
  • framework — наборы Java-классов, используемые системой и Android-софтом. Тут же лежит файл framework-res.apk, содержащий полное описание интерфейса операционной системы, включая все графические файлы.
  • lib — Linux-библиотеки, используемые низкоуровневыми компонентами системы. Аналог каталогов /lib и /usr/lib в Linux, включает такие стандартные библиотеки, как libc (правда, Android использует собственную Bionic вместо Glibc), libz (gzip-шифрование), libssl и другие.
  • media — медиафайлы: рингтоны, звуки уведомлений, звуки интерфейса и файлы анимации загрузки ОС.
  • tts — файлы, необходимые для работы синтезатора речи.
  • usr — необязательный каталог, который обычно содержит файлы, необходимые для работы софтин из каталога bin. По сути, аналог /usr/share.
  • vendor — файлы, поставляемые производителем аппарата. Обычно содержит бинарную firmware для различных «железных» компонентов, например модуля Wi-Fi.
  • xbin — необязательный каталог, который содержит все, что не вошло в bin. Как правило, используется для хранения полезных утилит, тем не менее необязательных для работы системы (top, текстовый редактор). CyanogenMod использует его для хранения инструментов администрирования: bash, ssh, powertop, busybox и т. д.
  • build.prop — файл, содержащий информацию о сборке, а также различные низкоуровневые настройки.

>Kоманда setprop

Приведенные в статье настройки build.prop можно применить и в уже работающей системе с помощью команды setprop:

# setprop debug.sf.nobootanimation 1

Собственный набор ПО

Каталог /system/app содержит все предустановленное в прошивку ПО. Удаляя и добавляя пакеты в этот каталог, мы можем изменить набор приложений, доступных «из коробки». Например, ни для кого не секрет, что стандартный ланчер Android (да и ADWLauncher в CyanogenMod) тормозит и имеет многочисленные недостатки. ОK, заменим его на LauncherPro:

$ rm system/app/Launcher.apk $ wget goo.gl/U9c54 -o system/app/LauncherPro.apk

И это все. Не надо ничего устанавливать, не надо нигде ковыряться, просто закидываем нужное приложение в каталог — и готово. Даже имя не имеет значения, Android сам найдет нужное приложение и установит его в качестве домашнего экрана. Таким же образом можно поместить в прошивку любую другую программу или удалить ее оттуда.

Полезно поместить в прошивку одно из приложений для поиска утерянного смартфона (например, prey), тогда даже в случае сброса до заводских настроек оно останется в ОС и будет работать. Также можно заменить некоторое системное ПО, например добавить Dialer One вместо стандартного Phone.apk или Go SMS вместо sms.apk.

Как насчет системных Linux-приложений, например ssh-сервера или mc? Здесь тоже все просто. Собрать софтину для Android и процессора ARM можно с помощью комплекта NDK от Google, но большинство нужных приложений уже собрано до нас. Например, мы хотим предустановить mc в свою прошивку. Идем на xda-developers и выполняем поиск по запросу Midnight Commander. На первой же странице находим apk-пакет с установщиком и распаковываем его с помощью все того же unzip:

$ cd /tmp; unzip ~/NativnuxInstaller_1.1.apk

Видим в списке распакованных файлов assets/kits/mc-4.7.5.4-arm.tar.jet. Это архив tar.gz, который распаковывается в корень системы после установки apk-пакета (а точнее, после установки apk, запуска приложения и нажатия кнопки Install). Мы можем сразу распаковать его в нашу прошивку и получить предустановленный mc:

$ cd ~/rom $ tar -xzf /tmp/assets/kits/mc-4.7.5.4-arm.tar.jet

Теперь для запуска файлового менеджера на устройстве достаточно открыть терминал и набрать mc. Другие приложения могут распространяться в zip-архивах для прошивки с помощью ClockworkMod Recovery. Поместить их в свой мод еще проще, для этого достаточно перейти в корень прошивки (в данном случае ~/rom) и распаковать архив с помощью unzip.

Свежераспакованная прошивка

Внешний облик

Собственную прошивку чаще всего создают для того, чтобы изменить внешний облик Android по своему вкусу. Проделать эту операцию в Android, опять же, очень просто. Все настройки графического интерфейса Android хранятся в файле framework/framework-res.apk. Его можно распаковать с помощью утилиты apktool:

$ cd ~; wget goo.gl/hxz5l $ tar -xjf apktool1.4.1.tar.bz2 $ cd ~/rom/system/framework $ java -jar ~/apktool.jar d framework-res.apk

В результате в текущем каталоге должен появиться каталог framework-res, содержащий все файлы пакета. Наиболее интересные подкаталоги внутри него — это res/drawable-* и res/layout-*. Первый содержит все графические элементы в виде png-файлов для разных разрешений и положений экрана. Например, drawable-land-mdpi — это каталог с графическими ресурсами для экранов среднего разрешения, находящихся в горизонтальном положении (во время поворота экрана ОС переключается на использование других файлов). Разумеется, любой файл можно отредактировать или заменить другим.

Распаковываем framework-res.apk

Каталоги layout содержат описания графических элементов в формате XML (на самом деле они хранятся в бинарном формате AXML, но apktool преобразовал их в обычный XML). Формат описания достаточно прост и понятен, но с наскоку с ним разобраться трудно, особенно если не знать, где что находится. Поэтому мы снова обратимся к услугам обитателей форума xda-developers, которые уже успели придумать массу различных модификаций для графического интерфейса Android. Их легко найти с помощью поискового запроса «framework-res mod имя_устройства».

Обычно такие моды распространяются в виде готового файла framework-res.apk, который можно просто положить в свою прошивку. Если же ты хочешь найти конкретные отличия в содержимом, то мод можно распаковать и сравнить с твоим framework-res с помощью diff:

$ diff -R ~/framework-res \ ~/rom/system/framework/framework-res

К сожалению, в рамках одной статьи мы не можем рассмотреть хотя бы часть внутреннего устройства framework-res, поэтому за более подробной информацией обращайся к соответствующей теме форума 4PDA.

WWW

goo.gl/tlHRo — набор советов по изменению framework-res.apk.

goo.gl/fTvz8 — простая анимация загрузки с логотипом Android.

goo.gl/Ya1fX — анимация загрузки с плазменным кругом.

goo.gl/P6JR — анимация загрузки в стиле IBM PC.

goo.gl/sGXwa — анимация загрузки Android Honeycomb.

После внесения модификаций можно собрать framework-res.apk с помощью все того же apktool. Однако для этой операции требуется утилита aapt из комплекта Android SDK, которую apktool использует для окончательной упаковки apk-файла. Ее можно получить и отдельно:

$ cd ~/bin; wget goo.gl/tC7k8

Теперь можно собрать файл:

$ cd ~/rom/system/framework $ java -jar ~/apktool.jar b framework-res $ cp framwork-res/dist/framework-res.apk . $ rm -rf framework-res

Следующий этап — это изменение анимации загрузки. Она хранится в виде обычных png-файлов, упакованных в архив system/media/bootanimation.zip. Распакуем его:

$ cd /tmp $ mkdir bootanimation; cd bootanimation $ unzip ~/rom/system/media/bootanimation.zip

Внутри находится файл desc.txt, описывающий анимацию в следующем формате:

Ширина Высота FPS p Порядок Пауза Каталог …

Стандартный вид этого файла:

480 800 30 p 1 0 part0 p 0 0 part1

Это значит, что изображение имеет размер 480 x 800, а скорость смены изображений (FPS) составляет 30 штук/с. Далее идет описание первой части анимации, файлы которой находятся в каталоге part0. Она проигрывается один раз (цифра 1 после p). Следующая часть (part1) проигрывается бесконечное число раз, пока аппарат не загрузится. Обычно каталог part0 содержит изображения, соответствующие первой части анимации, а part0 — все остальные изображения, которые проигрываются в цикле. Сами изображения должны быть одинакового размера, а их названия должны содержать числа в возрастающем порядке, например 0001.png, 0002.png и т. д.

Так как анимация загрузки имеет очень простой формат, ее довольно легко сделать. Достаточно преобразовать видеоролик в png-изображения с помощью mencoder (в desc.txt необходимо выставить значение FPS 24):

$ mplayer -nosound -vo png:z=9 video.avi

Но и это будет лишним. Участники форума xda-developers наделали столько анимаций, что необходимость работы руками отпадает вовсе. Ссылки на интересные анимации приведены в конце статьи.

Низкоуровневые настройки

Последнее, о чем я хотел бы рассказать в статье, — это редактирование низкоуровневых настроек. В Android для этого есть файл system/build.prop, который хранит информацию о сборке прошивки и настройки для конкретных устройств. Добавив в этот файл те или иные строки, можно изменить функционирование Android, ускорить его работу или уменьшить расход батареи. Ниже приведены наиболее интересные настройки.

Стандартный build.prop для Motorola Defy

  1. Запрет выгрузки рабочего стола из памяти: ro.HOME_APP_ADJ=1

    Опция позволяет сделать работу с устройством более удобной за счет мгновенного доступа к рабочему столу в любое время. Не рекомендуется использовать для устройств с малым объемом памяти.

  2. Повышение качества сохраняемых JPG-файлов: ro.media.enc.jpeg.quality=100

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

  3. Отключение анимации загрузки для ускорения загрузки операционной системы: debug.sf.nobootanimation=1
  4. Возложение части работы по отрисовке интерфейса на GPU: debug.sf.hw=1

    Позволяет сделать интерфейс более быстрым и плавным.

  5. Блокировка извещения об активном режиме отладки (при подключении к компу с помощью USB): persist.adb.notify=0
  6. Устранение проблемы с возникновением черного экрана после завершения звонка: ro.lge.proximity.delay=25 mot.proximity.delay=25
  7. Включение подсветки клавиш управления сразу после включения экрана: ro.mot.buttonlight.timeout=0

Помимо всего этого, многие пользователи также рекомендуют применять следующие комбинации флагов:

Все эти строки необходимо просто поместить в файл system/build.prop и сохранить.

Способы создания

Чтобы сделать прошивку Android из исходников рекомендуется проделать следующие шаги.

  • Установить UBUNTU. Только на ней получится добротная прошивка. Скачать UBUNTU можно на официальном сайте.
  • Затем подготовить рабочий стол и освободить достаточно места, как было написано выше. После переходим к самой сборке.
  • Установить программу Java.
  • Скачать исходники можно с форума 4pda.

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

Конечно же отредактировать уже готовую сборку под себя гораздо проще. Для этого понадобится:

  • Установить ОС UBUNTU.
  • Скачать программы andimgtool и rkwintools. Они помогут вам расшифровать данные boot.img, recovery.img, system.img. а также и запаковать их.
  • Найти чистую прошивку. Главное, чтобы в названии были слова ROM. Сайт для загрузки выбираем на свое усмотрение, например desktoplinux.ru, или любой другой.

Сделать прошивку телефона из уже готового файла конечно гораздо легче и проще. В этом заключается преимущество редактирования уже готовой прошивки.

Инструкция по изготовлению прошивки Андроид самостоятельно

Собрать прошивку Android из исходников

Прежде чем приступить к созданию кастомной прошивки своими руками, рекомендуется установить виртуальную машину, а на нее ОС Linux.

А также необходимо инсталлировать java версии 3,3. Если же вы будете работать на операционке Ubuntu, то в ее репозитории необходимо отыскать OpenJDK Java 6 Runtime и скачать ее.

После установки Джавы необходимо загрузить специальную утилиту видоизменения Android, ее называют android kitchen.

Теперь необходимо отыскать прошивку, которую будете модифицировать. xda-developers.com – на этом сайте отыщете необходимую вам прошивку. Главное, чтобы они имели в имени слово ROM и были чистыми. Затем скачиваете его и разархивируете, используя Winrar.

Когда вы откроете папку с разархивированными файлами, вы отыщете элементы, перечисленные ниже:

  • Каталог meta.inf. В нем можно изменить root права, вывести progress bar. В ней также находится скрипт обновления, с помощью которого вы можете изготавливать новые данные в памяти NAND.
  • В boot.img можно найти linux и образ initrd. Их можно не трограть. Все видоизменения для Андроид пользователь сможет сделать, используя настройки системы файлов /prof или же используя Clockwordmod.
  • И наконец папка для изготовления новых картинок, фонов, приложений, а именно /system. Здесь пользователь найдет ядро Android, которое состоит из:
    • app – это приложения, которые уже установлены.
    • bin – здесь находятся элементы, которые будут использоваться другими более высокоуровневыми в процессе работы системы.
    • fonts — шрифты.
    • framework — наборы классов Java, которые используются на Андроиде. Здесь находится framework-res.apk. Этот файл полностью описывает интерфейс системы.
    • lib — хранилища, которые используются низкоуровневыми компонентами системы.
    • media – рингтоны, звуки.
    • tts — файлы для синтезатора речи.
    • vendor – документы от производителя телефона.
    • bin – хранит полезные программы.
    • build.prop – файл, в котором есть данные сборки и настроек низкого уровня.

Запустите андроид kitchen. Запуск сделайте через Линукс или же через программу Cygwin. Если запускаете в Линуксе, то введите команду cd kitchen, потом ./menu.

Теперь распаковываете программу. Затем переходите в раздел 0 или advanced options. Отыскав команды для улучшения версии Андроида, нажмите на ту, которая необходима. Здесь вы добавляете собственные анимации, приложения, освобождаете память. После произведенных действий, наберите команду 99. Теперь нажмите build ROM fron working folder. Осталось только забрать архив с output_ZIP.

Редактирование готовой версии

Изучив изготовление прошивки из исходных файлов, сейчас будет рассмотрено, как видоизменить готовый файл. Для его редактирования файл надо скачать, ищем прошивку с именем: Pure Android 3.0 ROM. Это имя свидетельствует о том, что она является чистой.

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

  • Meta—inf. Здесь лежат все данные о будущей системе. Сертификаты, контрольные суммы и скрипты тоже находятся здесь.
  • Boot.img. Это образ для того, чтобы вы могли загрузить прошивку и установить.
  • Папка system. Это Андроид без ядра. Здесь лежат все настройки системы и некоторые из установленных утилит.

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

Для видоизменения графики рекомендуется обратиться к папке framework/framework-res.apk. Пользователю следует разархивировать элемент и вставить туда две папки: res/drawable-*, куда он сможет скидывать свои картинки и фон с разрешением .png. И res/layout-* — сюда будут вложены файлы с разрешением .xml. После произведенных манипуляций вы должны собрать все снова в один файл.

Видоизменить анимацию или поставить новую можно разархивировав архив с соответствующими файлами. Затем пользователь изменяет файлы и запаковывает их обратно.

Если пользователь хочет улучшить производительность собственного смартфона, то он должен ввести такие команды: ro.mot.buttonlight.timeout=0 – для подсвечивания кнопок после включения телефона. debug.sf.nobootanimation=1 – отключение анимации, когда телефон загружается. Многие из них лежат в папке system/build.prop.

Когда завершены все видоизменения, надо будет архивировать их командой $ cd ~/rom; zip -r my-rom.zip *.

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

Чтобы редактировать прошивку Андроид не используя компьютер, владелец телефона должен скачать ее в архиве. Запустить Total Commander, эта программа умеет работать с архивированными пакетами. Разархивировать пакет.

Что сделать дальше, описано ниже (необходимы рут-права):

  • Скачайте программу Nandroid backup с сайта и сделайте резервную копию.
  • Переходим в папку /system/app, вы можете удалить утилиты или добавить необходимые, которых не было.
  • Перезагружаем устройство. На этом редактирование закончится. Все должно заработать

Есть еще один вариант – если пошивка в формате zip.

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

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

Paranoid Android

Сайт: paranoidandroid.co
Число официально поддерживаемых устройств: 30 (на 08.08.2016)
Основа: AOSP
Версия Android: 6.0.1

Одна из самых инновационных прошивок. Когда-то была популярна благодаря возможности динамического переключения между планшетным и смартфонным интерфейсом Android. В разное время в прошивке существовали такие функции, как уведомления в стиле Facebook Heads, ставшее культовым круговое меню навигации PIE и всплывающие уведомления еще до того, как они появились в Android 5.0.

В феврале 2015 года значительная часть разработчиков занялась развитием OxygenOS для компании OnePlus и покинула команду. Спустя несколько месяцев разработка заморозилась, остановившись на версии 5.1 Lollipop. Сейчас новая команда пытается оживить этот проект. Последняя версия 6.0.3 включает в себя следующие возможности:

  • Floating peek — позволяет открыть окно приложения поверх другого;
  • Immersive Mode — скрывает статусбар или клавиши навигации в любом приложении;
  • «Темы» — движок тем CyanogenMod;
  • настройки отображения значка батареи;
  • удобный способ перемещения переключателей в окне быстрых настроек с помощью удержания пальца;
  • для OnePlus, OPPO, Nexus 5X, Nexus 6P имеются настройки жестов и режим «В кармане» (переименованный Peek).

Функций не так много, но надеемся, что со временем проект будет обрастать интересными, полезными и эксклюзивными функциями. Кстати, обновления приходят по OTA (от разработчиков этой прошивки, конечно). Больше всего разочаровало отсутствие русских букв в номеронабирателе из звонилки. Прошивка не умеет работать с разделами, отформатированными в F2FS.

Темы Настройка значка батареи

OmniROM

Официальный сайт: omnirom.org
Число официально поддерживаемых устройств: 84 (на 08.08.2016)
Основа: AOSP
Версия Android: 6.0.1

OmniROM родилась в ответ на «коммерциализацию» CyanogenMod. В число ее разработчиков входят Dees Troy (автор TWRP) и очень известный разработчик Chainfire (SuperSU, LiveBoot, Recently, FlashFire, Mobile Odin и другие классные приложения).

Ключевая особенность — какую функциональность добавить, выбирают сами пользователи, голосуя. В настройках есть любопытный пункт «Производительность». Он позволяет настроить частоты работы процессора, алгоритмы ввода-вывода, агрессивность менеджера задач (именно он выполняет работу таск-киллеров), а также посмотреть ряд интересных параметров. Все остальные функции стандартны и реализованы в других подобных прошивках. Однако, кроме всего прочего, здесь можно включить «темную тему» в настройках, а для переключения между приложениями доступна альтернативная панель OmniSwitch. Также в OmniROM есть система обновления OpenDelta, позволяющая уменьшить размер OTA-обновлений прошивки на 90%.

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

Настройки в темной теме Часы

CyanogenMod

Официальный сайт: cyanogenmod.org
Число официально поддерживаемых устройств: 376 (на 06.08.2016)
Основа: AOSP
Версия Android: 6.0.1

CyanogenMod — одна из первых кастомных прошивок, появившаяся вскоре после того, как пользователи нашли метод получения root на первом Android-смартфоне HTC Dream. Изначально прошивка базировалась на стоке, то есть была создана не путем добавления функциональности в AOSP и пересборки исходного кода, а пересборкой образа с прошивкой, что существенно ограничивало возможности разработчиков. Но вскоре ее создатели (называющие себя Team Douche) перешли на сборку из исходных текстов.

Со временем функций становилось все больше и больше, но прошивка сохраняла стабильность и скорость работы. Уже к своей 6-й версии CyanogenMod превосходил стоковый Android 2.2 практически по всем параметрам (скорость работы, энергопотребление, стабильность). В прошивку «из коробки» были вшиты полезные дополнения, такие как планировщик задач BFS, кодек FLAC и множество дополнительных опций настройки.

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

Знаменитый эквалайзер Одни из самых интересных пунктов настроек, которых многим не хватало на стоке

Комбайны

Temasek’s

Официальный сайт: github.com/temasek
Число официально поддерживаемых устройств: только неофициальные сборки
Основа: CyanogenMod
Версия Android: 6.0.1

В один день @temasek c форумов XDA решил немного улучшить CyanogenMod, добавив в него пару нужных программ и функций с других прошивок. А потом не смог остановиться… Этот ROM довольно популярен, но автор никуда не выкладывал порт прошивки, хоть и сам создавал ее для своего Samsung Note 3. Количество устройств растет только за счет неофициальных портов.

Собственно, это даже не оригинальная прошивка, а сборная солянка из частей различных прошивок, включая все описанные ранее. В качестве основы выступает CyanogenMod. Функций и настроек очень много. Настолько много, что подогнать прошивку под свои вкусы можно без использования Xposed. Тут можно найти не только неплохо настраиваемый PIE, но и различные панели, выдвигаемые жестами с различных частей экрана, настроить анимацию, прозрачность шторки с быстрыми настройками. Описать все возможности статьи не хватит.

В прошивке есть режим плавающих окон, как в Android 7 (он же доступен в далее описанных AICP и RR), пять режимов энергосбережения (от «Экономия энергии» до «Высокая производительность»), а также ряд полезных программ: ViPER4Android, SuperSU, OmniSwitch. Для полного фарша не хватает только таких замечательных программ, как Kernel Adiutor, L Speed, AdAway, настроек показа уровня сигнала в Dbm и переключения между 2G/3G из панели быстрых настроек. Увы, и баги тут тоже присутствуют. При активации некоторых пунктов настроек выскакивает ошибка графического интерфейса.

PIE Именно в этом комбайне сохранился правильный режим редактирования кнопок

AICP (Android Ice Cold Project)

Официальный сайт: aicp-rom.com
Число официально поддерживаемых устройств: 71 (на 13.08.2016)
Основа: CyanogenMod
Версия Android: 6.0.1

Еще один комбайн. Изначально ROM создавался для HTC Desire HD на основе AOKP. Со временем к разработке присоединялось очень много других разработчиков, а вместе с ними росло и количество поддерживаемых девайсов. Не менее успешно этот проект обрастал и функциями. После выхода Android Lollipop разработчики AOKP сообщили, что приостанавливают разработку на неопределенный срок, из-за чего AICP был переведен на CM. В настоящее время разработчики заявляют, что эта прошивка включает в себя абсолютно все необходимые расширения, так что никакие дополнительные твики не понадобятся.

Это действительно так, AICP имеет почти все функции, присутствующие в других прошивках. Плюс сюда вшиты SuperSU, AdAway и OmniSwitch, но нет ViPER4Android. Меню настроек не сильно отличается от меню в стоковом CyanogenMod, хоть и включает в себя некоторые новые пункты. А вот после нажатия на «Расширенные настройки» открывается океан дополнительных настроек. Тут есть настраиваемый индикатор сетевого трафика, полоса заряда аккумулятора, плавающие окна, PIE и другие интересные настройки, например удаление системных приложений, кеш прокрутки, опции прозрачности.

Удивило, что нельзя включить фонарик, удерживая кнопку питания при неактивном дисплее. Оказалось, чтобы получить эту функцию, необходимо перейти в «Экран блокировки» и активировать «Уведомление фонарика». Всему виной неправильный перевод, прошивка переведена на русский на 70–80%.

Расширенные настройки Диспетчер задач

RR (Resurrection Remix)

Официальный сайт: forum.resurrectionremix.com
Число официально поддерживаемых устройств: 91 (на 09.08.2016)
Основа: CyanogenMod
Версия Android: 6.0.1

Создатели прошивки решили включить в свое творение лучшие функции из CM, Slim и Omni. А в качестве стартовой площадки использовать Remix. В итоге появился весьма интересный комбайн.

Прошивка полностью корректно переведена на русский язык. Тут есть несколько отлично настраиваемых панелей с недавними приложениями (Slim, OmniSwith и стандартные из AOSP), вшиты AdAway, Kernel Adiutor, SuperSU (при желании можно использовать и стандартный контроллер root-доступа из CyanogenMod).

Подстроить и настроить можно почти все. Эта прошивка по праву разделяет первое место по нашпигованности различными функциями с Temasek, а может, и превосходит его. Не всем любителям максимально настраиваемых прошивок понравится механизм настройки наэкранных клавиш: нельзя поставить дополнительные клавиши с правого и левого краев (там, где обычно отображается значок меню и переключения клавиатур).

Из недостатков: режимов энергосбережения меньше, чем в Temasek, кнопки быстрых настроек настраиваются неочевидным способом — нужно удерживать палец на шестеренке, которая ведет в настройки. Официально CAF-версия не выпускается, однако владельцы Nexus 5 могут загрузить неофициальную .

Океан настроек Настройки недавних приложений

MK (MoKee)

Официальный сайт: mokeedev.com/en/
Число официально поддерживаемых устройств: 220 (на 13.08.2016)
Основа: CyanogenMod
Версия Android: 6.0.1

Разработчики запустили этот проект 12 декабря 2012 года и с того времени постоянно улучшали его, задавшись целью добавлять только самые лучшие функции из других прошивок. На данный момент это CyanogenMod, OmniROM и SlimRoms.

Прошивка имеет что-то общее с Paranoid Android: функций не очень много по сравнению с конкурентами, но самые полезные присутствуют. В эту прошивку уже вшит ViPER4Android FX, есть возможность изменить высоту навбара, можно отобразить секунды в часах, скорость входящего и исходящего трафика, настроить включение экрана двойным тапом. В качестве интерфейса это все тот же CM, только в нем поменялась анимация всплывающих текстовых уведомлений, а навбар теперь всегда красится в цвет строки состояния во многих приложениях.

Скорость работы не уступает чистому CyanogenMod, присутствуют обновления по OTA-каналу. Причем все функции полностью русифицированы. Стоит отметить, что тут есть приложение «Защитник» — что-то вроде антивируса. Позволяет управлять некоторыми разрешениями приложений. Для разблокировки части экспериментальных функций нужно открыть «Настройки -> Панель MoKee» и нажать несколько раз на «Версия MoKee».

ViPER4Android FX
Приложение «Защитник»

Особенные

FlymeOS

Официальный сайт: flymeos.com
Число официально поддерживаемых устройств: 73 (на 08.08.2016)
Основа: CyanogenMod
Версия Android: 5.1.1

Прошивка создана и портируется на различные устройства компанией Meizu Technology Co., Ltd. Нетрудно догадаться, что она преследовала цель популяризовать собственные смартфоны. Полный список поддерживаемых устройств доступен только в китайской версии сайта.

Интерфейс по-настоящему оригинален. Абсолютно все стандартные приложения из Android заменены на приложения собственной разработки, а остальные значительно доработаны. В панели уведомлений есть быстрые переключатели, которые появляются над уведомлениями. Раздел «Энергопотребление» переименован в «Управление питанием» и намного более удобен и информативен, кнопка «Режимы сети» позволяет включить режимы «Только 3G» и «Только 2G».

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

В китайском аналоге Play Store есть почти все популярные (и не очень) приложения. Но гугловские программы откажутся работать без сервисов Google Play, а поставить эти сервисы не так-то просто. В интернете есть решение проблемы, но работает оно далеко не всегда, придется пользоваться либо встроенным маркетом, либо разными неофициальными магазинами, а также смириться с тем, что некоторые приложения «не заведутся» без Google Services.

Панель уведомлений Маркет

Выбыли из теста

Bliss

Официальный сайт: blissroms.com/
Число официально поддерживаемых устройств: 48 (на 13.08.2016)
Основа: CyanogenMod
Версия Android: 6.0.1

Разработчики утверждают, что Bliss — одна из самых настраиваемых пошивок. На самом деле это не так. Прошивка действительно представляет собой сборку интересных функций из других прошивок, но до RR, AICP или Temasek ей очень далеко. Разве что изначально вшиты и запускаются через настройки Kernel Adiutor и SuperSU. Настройки самой прошивки не переведены на русский язык. Перевод касается только пунктов, которые есть в CyanogenMod.

crDroid

Официальный сайт: ww2.crdroid.org
Число официально поддерживаемых устройств: 29 (на 09.08.2016)
Основа: CyanogenMod
Версия Android: 6.0.1

Цель создания, как и у всех, — добавить самые лучшие функции из других прошивок. На экране приветствия при первоначальной настройке написано, что прошивка включает в себя очень много функций из OmniROM, Paranoid Android, Temasek и других. К сожалению, тут та же история, что и с Bliss. Отсутствие эксклюзивных функций и значительное отставание по возможностям от RR, AICP, Temasek. Никаких интересных приложений не встроено.

Вне теста

  • NexSense 6.0 — попытка портировать HTC Sense 6.0 (Android 4.4.2) на Nexus 5. Сначала запускалась только сама прошивка, но со временем энтузиасты смогли заставить заработать Wi-Fi, Bluetooth, GPS, различные сенсоры. Но очень долгое время этого не получалось добиться от камеры и звука. Со временем разработчики пришли к выводу, что необходимо практически с нуля переписать некоторые библиотеки. Местные умельцы вроде бы пытались это сделать, но безуспешно.
  • ASUS ZENUI CM 13 (Nightly) Based — проект по портированию приложений из Asus ZenUI в CyanogenMod 13. Официально разработка ведется только для LG G2. По заверениям разработчиков, уже перемещено около 90% всех приложений.
  • MIUI — прошивка официально портирована на 286 различных устройств. Разрабатывается фирмой Xiaomi и основывается на исходных кодах CyanogenMod и AOSP. Много фишек сюда перекочевало из iOS, TouchWiz, UX (LG), HTC Sense, но есть и свои собственные. Полезных функций настолько много, что их описание — тема для отдельной статьи.
  • Maru OS — очень оригинальная прошивка, которая при подключении смартфона к монитору делает из него полноценный десктоп. Прочитать подробный обзор и интервью с разработчиком можно у нас.

Как установить?

Для большинства девайсов прошивка со стока выглядит следующим образом:

  1. Разблокируем загрузчик (для каждого девайса это индивидуально, так что вперед, в Google).
  2. Устанавливаем кастомный рекавери (в редких случаях можно и без него ставить кастомы, но это не очень хорошая идея).
    2.1. Идем на официальный сайт TWRP, вводим там имя своего девайса, загружаем для него самую новую версию.
    2.2. Подключаем смартфон по USB, устанавливаем на компьютер драйверы для своего устройства.
    2.3. Скачиваем и устанавливаем Android SDK.
    2.4. Запускаем терминал и прошиваем рекавери командой fastboot flash recovery имя_рекавери.img (fastboot находится в папке platform-tools внутри SDK).
  3. После прошивки заходим в TWRP, выбираем русский язык (в самом низу), ставим галочку на «Разрешить изменения» и свайпаем вправо.
  4. Переходим в раздел «Очистка» и там выбираем «Форматировать Data». Это нужно, если раздел data зашифрован.
  5. Подключаем смартфон к компьютеру и перекидываем на карту памяти файл с новой прошивкой.
  6. Выбираем «Установка», а потом файл прошивки. Соглашаемся свайпом вправо.
  7. Нажимаем на «Перезагрузка в ОС» и ждем окончания загрузки (около десяти минут, включая оптимизацию приложений).
  8. После первоначальной настройки рекомендуем опять загрузиться в рекавери и сделать бэкапы. Как минимум — EFS-раздела, в котором вшиты IMEI, s/n и другие важные данные.

Если ты не хочешь терять основную прошивку, кастом можно установить второй системой. В этом поможет единственный в своем роде MultiROM Manager. Он позволяет установить сразу несколько прошивок. Выбрать прошивку из установленных девайс предлагает при включении. Установка программы достаточно проста (только не забудь перед этим сделать резервные копии на всякий случай):

  1. Устанавливаем MultiROM Manager из Play Store и запускаем его.
  2. Нажимаем кнопку «Установить».
  3. Ждем окончания установки, а потом соглашаемся на перезагрузку.
  4. После перезагрузки и установки некоторых скриптов откроется интерфейс выбора прошивки.

Установка второй прошивки выполняется через MultiTWRP в разделе Advanced -> MultiROM либо через само приложение.

Главный экран MultiROM Manager

Словарик

  • Stock (сток, стоковая прошивка) — официальная прошивка, предустанавливаемая производителем по умолчанию. Также стоковыми часто называют не только абсолютно чистые образы стоковых прошивок, но и образы, подготовленные для установки через неофициальные рекавери.
  • AOSP (Android Open Source Project) — оригинальные исходные коды Android от компании Google, доступные для скачивания и модификации всем желающим. Термин «основанная на AOSP прошивка» (based on stock, based on AOSP) означает, что прошивка была собрана на базе этих исходников (а не исходников CyanogenMod, как это иногда бывает). Большинство модификаций Xposed работают только в AOSP/CyanogenMod и основанных на них прошивках.
  • CAF (Code Aurora Forum) — поддерживаемый Linux Foundation проект, форсирующий продвижение открытого кода в мобильную технику. Главный участник проекта — компания Qualcomm, поддерживающая репозиторий Android for MSM, который содержит исходные тексты Android с оптимизациями для чипов Qualcomm. Если разработчики заявляют, что их прошивка основана на CAF, значит, она включает все эти оптимизации. Но стоит иметь в виду, что изменения из Android for MSM зачастую перетекают в AOSP.
  • CyanogenMod Based (CM based, основано на CynogenMod) — прошивка, основанная на коде CyanogenMod. Сразу после выхода новой версии AOSP разработчики CyanogenMod копируют его исходники в собственный репозиторий и начинают внедрять в него свои дополнения и портировать на новые устройства. А устройств в списке поддерживаемых CyanogenMod такое внушительное число, что многие разработчики кастомных прошивок выбирают в качестве базы именно его, а не AOSP.
  • Recovery (режим восстановления, рекавери) — консоль восстановления Android. Предназначена для того, чтобы сделать сброс до заводских настроек или установить zip-файл прошивки, подписанной ключом производителя. Для многих устройств существуют сторонние recovery с расширенными функциями, такие как ClockworkMod, TWRP, Philz. Они позволяют делать полные бэкапы как всей системы, так и отдельных частей, устанавливать сторонние прошивки, форматировать и менять размер разделов, устанавливать любые дополнения и много чего другого полезного.
  • Bootloader (загрузчик, бутлоадер) — загружается в первую очередь. Он передает ядру таблицу разделов встроенной NAND-памяти, загружает его в память и запускает. Именно загрузчик осуществляет подключение к ПК в режиме fastboot и запускает рекавери. Поэтому перед установкой кастомного recovery и зачастую сторонней прошивки его приходится разблокировать. Почти всегда после разблокировки загрузчика из памяти устройства стираются абсолютно все данные.
  • GApps (Google Apps) — набор сервисов и приложений от Google. Пакеты GApps бывают различных размеров, от самых маленьких (меньше 100 Мбайт), которые включают в себя только Google Play и сервисы для его работы, до больших, которые содержат почти все существующие гугловские приложения (размер таких пакетов приближается к 800 Мбайт). Многие разработчики прошивок рекомендуют ставить Open GApps. Отличия между версиями можно посмотреть в Wiki по Open GApps. Следует иметь в виду, что некоторые приложения GApps могут заменить системные приложения.
  • Nightly («ночнушка») — ночная сборка прошивки. Для многих устройств сборки делаются ежедневно (еженощно). В теории обладают низкой стабильностью, но на практике неудачные сборки встречаются крайне редко, а всплывшие баги исправляются очень быстро.

Файловая система F2FS

Почти все кастомные прошивки поддерживают файловую систему F2FS, которая разработана специально для работы с флеш-памятью и в теории эффективнее и более бережно ее использует, чем ext4. Перейти на эту ФС можно следующим способом:

  1. Зайти в TWRP.
    2.0. Открыть пункт «Очистка -> Выборочная очистка».
    2.1. Отметить раздел Cache.
    2.2. Нажать «Восстановить или изменить файловую систему -> Изм. файловую систему -> F2FS» и свайпнуть для подтверждения.
    2.3. Нажать кнопку «Домой».
  2. Повторить пункт 2 для разделов data и system.

Примечания:

  • Не все прошивки поддерживают F2FS. Если поддержка отсутствует, ты поймаешь бесконечную загрузку.
  • После изменения файловой системы раздела data потеряются не только данные программ и настройки прошивки, но и файлы, сохраненные на внутренней карте памяти.
  • На практике выигрыш в производительности составит в лучшем случае несколько процентов.

Мы рассмотрели далеко не все существующие прошивки. Однако даже этого хватит, чтобы иметь представление о современных прошивках. По интерфейсу они почти все похожи, все работают очень плавно, и какие-либо отличия в скорости работы заметить очень сложно. А вот функции у них разные. От себя могу добавить, что если долго посидеть хотя бы на MoKee или тем более Resurrection Remix, то возвращаться даже на чистый CyanogenMod уже не захочется. А вот к помощи Xposed наверняка придется обратиться. К счастью, почти во всех существующих кастомных прошивках работают практически любые модули Xposed.