Где взять boot img android. Кастомный Android: делаем свою прошивку из стоковой, не копаясь в исходниках

MTwinTools — это утилита, позволяющая работать с файлами прошивок и образами boot.img, recovery.img и system.img. Автором утилиты является vin2809 с форума 4pda. MTwinTool пригодится владельцам смартфонов Huawei на базе процессоров MTK.

Руководство пользователя по работе со средством MTwinTools

1. Введение.

1.1. Назначение.

Средство MTwinTools предназначено для разборки/сборки образов устройств на основе чипов MT.

Оно построено для использования в командной строке по мотивам средства RKwinTools, предназначенного для работы с устройствами на чипах RK29xx-RK31xx, и некоторых свободно распространяемых программ.

Работает только под Windows 7 и выше без установки CYGWIN, а также не требует никаких дополнительных прописок путей в переменных среды ОС.

Средство позволяет:

  • распаковать и запаковать образ Boot.img;
  • распаковать и запаковать образ Recovery.img;
  • распаковать и запаковать образ Kernel.img;
  • распаковать и запаковать образ System.img, как yaffs типа, так и ext2-ext4;
  • конвертировать разреженный файл типа sparse в образ типа ext4;
  • подсчитать контрольную сумму файла в формате md5;
  • инициировать SuperUser.

1.2. Инсталляция средства MTwinTools.
Инсталляция средства производится путем распаковки архива в любом удобном для Вас месте. При этом будет создана папка MTwinTools, содержащая:

  • папки _In/, App/ и Cygwin/;
  • а также файлы Readme.txt, и menu.bat.

Папка _In пустая и предназначена для размещения исходных образов для обработки. Папка App/ содержит набор командных файлов, производящих обработку образов. В папке Cygwin/ находятся свободно распространяемые служебные библиотеки и файлы. Файл Readme.txt содержит инструкцию пользователя, т.е. читаемый Вами сейчас текст. Файл menu.bat служит для создания меню средства MTwinTools.

ВНИМАНИЕ. Никакого прописывания путей доступа к служебным файлам в переменных среды ОС Windows НЕ ТРЕБУЕТСЯ.

Во время работы появятся и другие, необходимые папки:

  • Pack, в которой будут находиться файлы Boot, Recovery и System после
    запаковки, папка md5, содержащая файлы с контрольной суммой, а также папка
    Firmware, в подпапке Image которой будут находиться собранные файлы Boot,
    Recovery и System;
  • Unpack, в которой ПОЛНОСТЬЮ распакованные файлы Boot, Recovery и System
    будут находиться в папке Firmware, в подпапке Image.

1.3. Деинсталляция средства MTwinTools.

Деинсталляция средства производится путем удаления корневой папки средства, т.е. папки MTwinTools.

2. Основные правила работы.

2.1.Для начала работы необходимо запустить файл menu.bat, при этом запустится меню средства.

2.2.Образы, предназначенные для распаковки, необходимо положить в папку _In средства. Имена входных файлов ОБЯЗАТЕЛЬНО должны содержать ключевые слова и могут иметь названия следующего вида:

  • *boot*.img;
  • *recovery*.img;
  • *kernel*.img;
  • *system*.img.

2.3.При первом запуске выполните инициализацию средства. При инициализации средства ВСЕ файлы, расположенные в папке _In, будут скопированы в рабочую входную папку Unpack/Firmware/Image. Это сделано для того, чтобы сохранить исходные файлы.

2.4.После разборки образа его содержимое будет помещено в папку Unpack, в которой будет создана следующая структура папок:

Boot(Recovery)/cfg/
kernel/
ramdisk/

В папке cfg/ будут находиться настройки образа, в папке kernel Вы найдете ядро, т.е. бинарный файл zImage, а в папке ramdisk будет все остальное. Для выполнения сборки образа его составные части, т.е. ramdisk, ядро, а, возможно и настройки, поместите в соответствующие папки в Unpack. Созданный образ будет находиться в выходной папке Pack.

3. Описание средства.

3.1. Главное меню команд.

Главное меню команд средства имеет следующий вид:

**************************
* MTwinTools_V_0.6 *
**************************
* Image commands: *
* ————— *
* 1-Boot *
* 2-Recovery *
* 3-Kernel *
* 4-System *
* 5-Other commands *
* *
**************************
* Tools commands: *
* ————— *
* 6-Init Tools *
* 7-Clean *
* *
**************************
* 8-Exit *
**************************
Please, choose command:

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

— перейти к меню обработки образа Boot, набрав цифру «1»;
— перейти к меню обработки образа Recovery — «2»;
— перейти к меню обработки образа Kernel — «3»;
— перейти к меню обработки образа System — «4»;
— перейти к меню других команд — «5»;
— провести инициализацию рабочей области средства — «6»;
— провести очистку рабочей области средства — «7»;
— завершить работу, т.е. выйти из средства — «8».

3.2. Меню Boot.

Для перехода к обработке образа Boot выполните команду «1-Boot». При этом Вы перейдете в меню «Boot commands».

Меню обработки образов Boot имеет следующий вид:

**************************
* Boot commands: *
* ————— *
* 1-Boot unpack *
* 2-Boot pack *
* *
**************************
* 3-Return *
**************************
Please, choose command:

По команде «1» производится распаковка образов Boot, по команде «2» производится запаковка образов Boot. По команде «3» производится возврат в главное меню средства.

2.2.1. Разборка образа boot.img.

2.2.2. Сборка образа boot.img.

При сборке образа boot появится меню выбора источника данных.

**************************
* Choice source image: *
* 1. Unpack dir *
* 2. Pack dir *
* 3. Return *
**************************
Please, choose source:

У Вас есть возможность собрать образ из распакованного образа, расположенного в папке Unpack/Boot, для этого выбирайте пункт меню «1. Unpack dir». Если выбрать пункт меню «2. Pack dir», то образ будет создан из данных, расположенных в папке Pack/boot. Для отказа от выполнения операции выберите пункт меню «3. Return». При этом Вы
вернетесь в меню «Boot commands».

3.3. Меню Recovery.

Для перехода к обработке образа Recovery выполните команду «2-Recovery». При этом Вы перейдете к меню «Recovery commands». Меню обработки образов Recovery имеет следующий вид:

**************************
* Recovery commands: *
* —————— *
* 1-Recovery unpack *
* 2-Recovery pack *
* *
**************************
* 3-Return *
**************************
Please, choose command:

По команде «1» производится распаковка образов Recovery, по команде «2» производится запаковка образов Recovery. По команде «3» производится возврат в главное меню средства.
2.3.1. Разборка образа recovery.img.

Все действия выполняются автоматически, т.е. без Вашего участия и описывать здесь нечего.

2.3.2. Сборка образа recovery.img.

При сборке образа recovery появится меню выбора источника данных.

**************************
* Choice source image: *
* 1. Unpack dir *
* 2. Pack dir *
* 3. Return *
**************************
Please, choose source:

У Вас есть возможность собрать образ из распакованного образа, расположенного в папке Unpack/recovery, для этого выбирайте пункт меню «1. Unpack dir». Если выбрать пункт меню «2. Pack dir», то образ будет создан из данных, расположенных в папке Pack/recovery.

Для отказа от выполнения операции выберите пункт меню «3. Return». При этом Вы вернетесь в меню «Recovery commands».

3.4. Меню Kernel.

Для перехода к обработке образа Kernel выполните команду «3-Kernel». При этом Вы перейдете к меню «Kernel commands».

Меню обработки образов Kernel имеет следующий вид:

**************************
* Kernel commands: *
* —————— *
* 1-Kernel unpack *
* 2-Kernel pack *
* *
**************************
* 3-Return *
**************************
Please, choose command:

По команде «1» производится распаковка образов Kernel, по команде «2» производится запаковка образов Kernel. По команде «3» производится возврат в главное меню средства.

3.4.1. Разборка образа kernel.img.

Все действия выполняются автоматически, т.е. без Вашего участия и описывать здесь нечего.

3.4.2. Сборка образа kernel.img.

При сборке образа kernel появится меню выбора источника данных.

**************************
* Choice source image: *
* 1. Unpack dir *
* 2. Pack dir *
* 3. Return *
**************************
Please, choose source:

У Вас есть возможность собрать образ из распакованного образа, расположенного в папке Unpack/Kernel, для этого выбирайте пункт меню «1. Unpack dir». Если выбрать пункт меню «2. Pack dir», то образ будет создан из данных, расположенных в папке Pack/Kernel.

Для отказа от выполнения операции выберите пункт меню «3. Return». При этом Вы вернетесь в меню «Kernel commands».

3.5. Меню System.

Для перехода к обработке образа System выполните команду «3-System». При этом Вы перейдете к меню «System commands».

Меню обработки образов System имеет следующий вид:


* System commands: *
* ——————————————— *
* 1-unpack yaffs * 2-pack yaffs *
* 3-unpack ext3 * 4-pack ext3 *
* 5-unpack ext4 * 6-pack ext4 *
* 7-sparse to ext4 * *
* * *
***************************************************
* 8-Return *
***************************************************
Please, choose command:

3.5.1. Разборка образа system типа yaffs.

По команде «1» производится распаковка образов System типа yaffs в папку Unpack/System.

3.5.2. Сборка образа system типа yaffs.

По команде «2» производится запаковка образов System типа yaffs. При этом появится меню выбора источника данных.

**************************
* Choice source image: *
* 1. Unpack dir *
* 2. Pack dir *
* 3. Return *
**************************
Please, choose source:

У Вас есть возможность собрать образ из распакованного образа, расположенного в папке Unpack/system, для этого выбирайте пункт меню «1. Unpack dir». Если выбрать пункт меню «2. Pack dir», то образ будет создан из данных, расположенных в папке Pack/system.

Для отказа от выполнения операции выберите пункт меню «3. Return» и Вы вернетесь в предыдущее меню «System commands».

3.5.3. Разборка образа system типа ext3.

По команде «3» производится распаковка образов System типа ext2-ext3 в папку Unpack/System.

3.5.4. Сборка образа system типа ext3.

По команде «4» производится сборка образа System типа ext2-ext3. Запаковка производится аналогично п.3.5.2. только выходной образ будет иметь тип ext3.

3.5.5. Разборка образа system типа ext4.

По команде «5» производится распаковка образов System типа ext4 в папку Unpack/System.

3.5.6. Сборка образа system типа ext4.

По команде «6» производится сборка образа System типа ext4. Запаковка производится аналогично п.3.5.2. только выходной образ будет иметь тип ext4.

3.5.7. Конвертация сжатого образа sparse в ext4.

По команде «7» производится преобразование (конвертация или перекодирование) сжатых образов типа sparse в образы типа ext4 (аналог операции simg2img).

3.5.8.Возврат в главное меню.

По команде «8» производится возврат в главное меню средства.

3.6. Меню других команд.

Для перехода к выполнению других команд выполните команду «5-Other commands». При этом Вы перейдете к меню «Others commands». Меню выполнения других команд имеет следующий вид:

**************************
* Others commands: *
* —————- *
* 1-Init SuperUser *
* 2-Calculate md5 *
* *
**************************
* 3-Return *
**************************
Please, choose command:

По команде «1» производится инициализация SuperUser в образе System, по команде «2» производится расчет контрольной суммы файлов. По команде «3» производится возврат в главное меню средства.

3.6.1. Инициализация SuperUser.

При проведении инициализации SuperUser появится меню выбора источника:

**************************
* Choice source init: *
* 1. Unpack dir *
* 2. Pack dir *
* 3. Return *
**************************
Please, choose source:

У Вас есть возможность инициализировать распакованный образ, расположенный в папке Unpack/system, для этого выберите пункт меню «1. Unpack dir». Если выбрать пункт меню «2. Pack dir», то будет инициализирован образ, расположенный в папке Pack/system. Для отказа от выполнения операции выберите пункт меню «3. Return».
Инициализация производится путем копирования необходимых файлов (su и SuperSU.apk) в разобранный образ System.img. Для получения Root-доступа Вам необходимо:

— провести распаковку образа System, используя команду «3» главного меню
средства или поместить распакованный образ в папку Unpack(или Pack)/System/;
— выполнить команду «1-init SuperUser» меню «Others commands».

После прошивки образа System.img у Вас в Вашем устройстве появится Root-доступ. Если для получения Root-доступа на Вашем устройстве используются файлы другой версии, то Вам достаточно обновить (заменить) файлы su и SuperSU.apk в папке App/.

3.6.2. Подсчет контрольной суммы.

Для подсчета контрольной суммы файла или файлов поместите их в папку Pack/md5/. После выполнения команды «2-Calculate md5» во все файлы, находящиеся в папке Pack/md5, будет дописана контрольная сумма, рассчитанная по алгоритму md5. Обрабатываются только файлы без расширения или с расширением.img, .tar, .zip.

3.7. Инициализация.

Для проведения инициализации выполните команду «6-init Tools». При этом будут созданы все необходимые для работы средства MTwinTools структуры папок и будет произведено копирование входных образов в рабочую папку Unpack/Firmware/Image.

3.8. Очистка средства.

Для очистки рабочей области наберите «7-CLEAN». При этом ВСЕ дополнительные папки вместе с содержимым будут удалены, средство MTwinTools завершит работу и примет вид, какой оно имело сразу после инсталляции.

3.9. Выход.

Для выхода наберите «8-Exit». При этом произойдет ТОЛЬКО выход из средства без всякой очистки.

Интерполяция , интерполирование — в вычислительной математике способ нахождения промежуточных значений величины по имеющемуся дискретному набору известных значений.

Многим из тех, кто сталкивается с научными и инженерными расчётами, часто приходится оперировать наборами значений, полученных опытным путём или методом случайной выборки. Как правило, на основании этих наборов требуется построить функцию, на которую могли бы с высокой точностью попадать другие получаемые значения. Такая задача называется аппроксимацией . Интерполяцией называют такую разновидность аппроксимации, при которой кривая построенной функции проходит точно через имеющиеся точки данных.

Существует много конечно-разностных методов интерполяции. Наиболее
распространенным является метод Ньютона для интерполяции «вперед» (метод Ньютона - Грегори). Интерполяционный полином в этом случае имеет вид:

Коэффициенты С находим по формуле:

Реализация программы на языке C#:
using System; namespace Interpolation { class Program…

Программа разделена на два потока в одном из которых выполняется сортировка, а в другом перерисовка графического интерфейса. После нажатия на кнопку «Сортировать», в программе вызывается метод «RunSorting», в котором определяется алгоритм сортировки и создается новый поток с запущенным в нем процессом сортировки.
private void RunSo…

Совместное использование ресурсов (CORS) — это спецификация W3C, которая позволяет осуществлять междоменную связь в браузере. Создавая поверх объекта XMLHttpRequest, CORS позволяет разработчикам работать с одинаковыми идиомами как запросы с одним доменом. Вариант использования для CORS прост. Представьте, что на сайте alice.com есть некоторые данные, которые сайт bob.com хочет получить. Этот тип запроса традиционно не допускается в соответствии с той же политикой происхождения браузера. Однако, поддерживая запросы CORS, alice.com может добавить несколько специальных заголовков ответов, которые позволяют bob.com получать доступ к данным. Как видно из этого примера, поддержка CORS требует координации между сервером и клиентом. К счастью, если вы являетесь разработчиком на стороне клиента, вы защищены от большинства этих деталей. В остальной части этой статьи показано, как клиенты могут выполнять запросы с кросс-началом и как серверы могут настраивать себя для поддержки CORS. Продолжени…

Всем привет, сегодня я хочу показать код еще одного проекта, который является абсолютно бесполезным и написан исключительно для развлечения. Однажды у нас на уроке не было преподавателя и мы чтобы хоть как-то развлечь себя начали писать на Pascal. Началось все с простой сирены, которая заставляла системные блоки в аудитории издавать звуки, подобные сирены автомобилей скорой помощи. Закончилось все дома, написанием фрагмента песни группы Linkin Park - Numb.

Вот собственно и код программы:
USES CRT; VAR i, temp, note, note2, note4, note8: Integer; PROCEDURE PlayNote(f, p: Integer); BEGIN Sound(f); Delay(p); NoSound; Delay(20); END; PROCEDURE Pause(p: Integer); BEGIN Delay(p); END; PROCEDURE Numb(temp, note, note2, note4, note8: Integer); BEGIN FOR i:=0 TO 1 DO BEGIN PlayNote(880, note4); PlayNote(1047, note4); PlayNote(880, note4); PlayNote(1175, note2 + note4); PlayNote(1397, note2 + note4); PlayNote(1319, note…

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

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

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

Каждое действие с собственными Андроид-устройствами пользователь осуществляет на свой страх и риск. За возможные негативные последствия использования методов, описанных на данном ресурсе, администрация сайта ответственности не несет!

Четкое выполнение подготовительных процедур предопределяет успех всего процесса прошивки устройства, поэтому осуществление нижеописанных шагов можно считать обязательным условием перед проведением операций.

Установка драйверов

О том, как установить специальный драйвер для фастбут-режима, можно узнать из статьи:

Бэкап системы

Если существует малейшая возможность, перед прошивкой обязательно осуществляется создание полной резервной копии существующих разделов памяти устройства. Необходимые для создания бэкапа действия описаны в статье:

Загрузка и подготовка необходимых файлов

Fastboot и ADB являются взаимодополняющими друг друга инструментами из состава Android SDK. Загружаем инструментарий полностью или скачиваем отдельный пакет, содержащий только АДБ и Фастбут. Затем распаковываем полученный архив в отдельную папку на диске С.

Через Fastboot возможна запись как отдельных разделов памяти Андроид-девайса, так и прошивок-обновлений целым пакетом. В первом случае понадобятся файлы-образы в формате *.img , во втором – пакет(ы) *.zip . Все файлы, которые планируются к использованию, должны быть скопированы в папку, содержащую распакованные Fastboot и ADB.

Пакеты *.zip не распаковываем, необходимо лишь переименовать загруженный файл(ы). В принципе имя может быть любым, но не должно содержать пробелов и русских букв. Для удобства следует использовать короткие имена, к примеру update.zip . Кроме прочего необходимо учитывать тот фактор, что Fastboot чувствителен к регистру букв в посылаемых командах и именах файлов. Т.е. «Update.zip» и «update.zip» для фастбут — разные файлы.

Запуск Fastboot

Поскольку Fastboot является консольным приложением, работа с инструментом осуществляется при помощи введения команд определенного синтаксиса в командную строку Windows (cmd). Для запуска Фастбут проще всего использовать следующий метод.


Эта надстройка позволяет производить все операции из нижеописанных примеров в полуавтоматическом режиме и не прибегать к ручному вводу команд в консоль.


Разблокировка загрузчика

Производители определенного ряда Андроид-аппаратов блокируют возможность управления разделами памяти устройства через блокировку загрузчика (bootloader). Если у устройства заблокирован загрузчик, в большинстве случаев его прошивка через фастбут неосуществима.

Для проверки статуса загрузчика можно послать в устройство, находящееся в режиме fastboot и подключенное к ПК, команду:

fastboot oem device-info

Но вновь приходиться констатировать, что данный способ выяснения статуса блокировки не универсален и отличается для устройств разных производителей. Это утверждение также касается разблокировки bootloader – методология проведения процедуры отличается для разных устройств и даже для различных моделей одного бренда.

Запись файлов в разделы памяти девайса

Завершив подготовительные процедуры, можно переходить к процедуре записи данных в разделы памяти устройства. Еще раз перепроверяем корректность загрузки файлов-образов и/или zip-пакетов и их соответствие прошиваемому устройству.

Внимание! Прошивка некорректных и поврежденных файл-образов, а также образов от другого девайса в устройство приводит в большинстве случаев к невозможности загрузки Android и/или другим негативным для аппарата последствиям!

Установка zip-пакетов

Для записи в девайс, к примеру OTA-обновлений, или полного комплекта составляющих ПО, распространяемых в формате *.zip , используется fastboot-команда update .


Запись img-образов в разделы памяти

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

А вот возможность прошивки отдельных образов в соответствующие разделы, в частности «boot» , «system» , «userdata» , «recovery» и др. через Fastboot при восстановлении аппарата после серьезных программных проблем, может спасти ситуацию во многих случаях.

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

fastboot flash наименование_раздела имя_файла.img




Таким образом производится прошивка с помощью команд, посылаемых через консоль. Как видим, большее количество времени и сил отнимают подготовительные процедуры, но, если они выполнены правильно, запись разделов памяти устройства происходит очень быстро и почти всегда беспроблемно.

Начнем с того, что тебе нужен Linux. В Windows ты сможешь только разобрать прошивку, но собрать обратно уже не получится по чисто техническим причинам. Теперь о прошивке. Обычно они распространяются в виде ZIP-архивов, прошиваемых через кастомные рекавери. Именно один из них нам и понадобится для опытов. Начинать путь ромодела я рекомендую с какой-нибудь максимально приближенной к AOSP кастомной прошивки, потому что в ней зачастую проще разобраться, чем в стоке.

  1. Распаковываем архив с прошивкой в любую папку.
  2. Качаем скрипт по ссылке и разархивируем в любую папку.
  3. Запускаем файл ext (если будет ругаться на отсутствие Java, просто пропусти, нажав y ; Java нужна только для запаковки).
  4. Теперь выбираем распаковку, нажав кнопку 1, а затем Enter.
  5. Новая папка с именем extract_* появится рядом с файлом ext и папкой tools . Копируем в нее файлы system.new.dat и system.transfer.list .
  6. После копирования файлов нажимаем Enter и ждем. Через некоторое время нужно будет опять нажать Enter, ввести пароль администратора и еще раз тапнуть Enter.
  7. Готово. Содержимое system в папке extract_*/output .

Ручной способ

Распаковываем архив с прошивкой в любую папку (например, в rom):

$ mkdir ~/rom $ unzip путь_до_архива -d ~/rom/

Скачиваем нужные нам инструменты в эту папку:

$ cd ~/rom $ wget https://github.com/xpirt/sdat2img/raw/master/sdat2img.py

Запускаем скрипт:

$ chmod +x sdat2img.py $ ./sdat2img.py system.transfer.list system.new.dat system.img

Он преобразует файл system.new.dat в raw-образ с именем system.img . Монтируем образ к подпапке mnt:

$ mkdir mnt $ sudo mount -t ext4 -o loop system.img ~/rom/mnt

Структура каталогов Android

После распаковки system появится следующая каталоговая структура:

  • app - предустановленные приложения со стандартными привилегиями;
  • priv-app - предустановленные приложения с повышенными привилегиями, в том числе некоторые компоненты системы;
  • bin - бинарные файлы формата ELF, аналог каталогов /bin и /usr/bin в Linux. Содержит различные системные компоненты, используемые более высокоуровневыми компонентами системы;
  • etc - файлы настроек. Полный аналог /etc в Linux, используемый, однако, только теми самыми системными компонентами. Приложения Android хранят индивидуальные настройки в каталогах /data/data/ ;
  • fonts - шрифты. По умолчанию содержит только фирменные шрифты Roboto;
  • framework - библиотеки Java-классов, используемых системой и приложениями. Тут же лежит файл framework-res.apk , содержащий полное описание интерфейса операционной системы, включая все графические файлы;
  • lib и lib64 - Linux-библиотеки, используемые низкоуровневыми компонентами системы. Аналог каталогов /lib и /usr/lib в Linux, включая такие стандартные библиотеки, как libc, libz, libssl. На устройствах с архитектурой ARMv7 и ниже каталог lib64 будет отсутствовать;
  • media - медиафайлы: рингтоны, звуки уведомлений, звуки интерфейса и анимация загрузки ОС;
  • tts - файлы, необходимые синтезатору речи;
  • usr - каталог, который обычно содержит файлы, необходимые для работы приложений из каталога bin. По сути, аналог /usr/share ;
  • vendor - файлы, поставляемые производителем устройства. Обычно содержит бинарный firmware для различных железных компонентов, например модуля Wi-Fi;
  • xbin - необязательный каталог; кастомные прошивки используют его для хранения таких вещей, как интерпретатор bash, SSH, PowerTOP, BusyBox, и других полезных инструментов;
  • build.prop - файл, содержащий информацию о сборке, а также различные низкоуровневые настройки;
  • addon.d - содержит скрипты, запускаемые после установки прошивки. Сюда же GApps прописывают свой скрипт, благодаря которому возрождаются после переустановки прошивки.

Ознакомившись с базовой структурой Android, начнем вносить изменения.

Удаляем и добавляем приложения

Все предустановленные программы можно найти в двух папках:

  • /system/app/;
  • /system/priv-app/.

Друг от друга они отличаются привилегиями доступа. Если программы из app имеют такие же полномочия, как сторонние программы (например, установленные из Play Store), то приложения из priv-app могут использовать привилегированные API (права privileged). Подробнее об этом можно узнать из .

Для предустановки приложения в прошивку просто кинь ее APK-файл в /system/app/ . Можно, конечно, создать отдельную папку, но в нашем случае в этом нет смысла, потому что папка служит для хранения библиотек и odex-файлов, которых у нас попросту нет. Для удаления просто удали папку с ним.

Можно пойти дальше и поменять стоковые приложения на аналоги. К примеру, для замены календаря удаляем папку Calendar и копируем в /system/app наш любимый com.rpagyc.simplecalendar.apk . А можно и не копировать. Тогда прошивка будет без календаря.

Главное, помни: стоковые программы могут быть связаны между собой. Поэтому удаление одной проги вполне может привести к полной неработоспособности другой (к примеру, CalendarProvider и Calendar: удалив первый, ты сделаешь неработоспособным не только стоковый, но и любой другой календарь). К счастью, в чистых AOSP-прошивках взаимосвязей не так много.

Меняем анимацию загрузки

Анимация хранится в виде PNG-картинок, упакованных в архив /system/media/bootanimation.zip без сжатия. Внутри архива находятся:

  • desc.txt - файл, описывающий анимацию;
  • part0 - папка с файлами анимаций, которые воспроизводятся первыми;
  • part1 - папка с файлами анимаций, которые воспроизводятся вторыми;
  • part? - крайняя папка, изображения с которой воспроизводятся в конце.

Файл desc.txt может содержать нечто вроде

1920 1080 60 p 1 0 part0 p 0 0 part1

Назначение этих строк интуитивно понятно: 1920 × 1080 - разрешение картинки, 60 - число кадров в секунду. Part0 и part1 указывают на папки, из которых будет воспроизводиться анимация, и последовательность воспроизведения. Вообще, может быть как одна часть, так и несколько (три и больше).

Изображения, находящиеся в папках part, пронумерованы пятью цифрами в порядке воспроизведения: 00000.png , 00001.png , 00002.png ... Эти изображения можно поменять на свои, тем самым создав оригинальную анимацию. А можно просто удалить файл bootanimation.zip . Тогда девайс будет показывать анимацию из стандартного Android. Или воспользоваться уже готовой коллекцией анимаций на 4PDA .

Изменяем звуковое оформление

Фактически все звуки, которые воспроизводит система, хранятся в папке /system/media/audio . Внутри нее ты найдешь следующие папки:

  • alarms - мелодии будильника;
  • notifications - звуки уведомлений;
  • ringtones - мелодии звонка;
  • ui - системные звуки, например низкий заряд батареи, фокусировка камеры, выбор элементов интерфейса.

В alarms, notifications, ringtones можно накидать сколько угодно любых мелодий. Взять их можно, например, здесь:

  • стандартные мелодии из разных телефонов и смартфонов Nokia ;

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

Добавляем шрифты

Шрифты хранятся в fonts . Найти архивы с файлами шрифтов можно на 4PDA и XDA . Для установки достаточно скопировать с заменой ttf-файлы из архива в папку fonts .

Меняем системные настройки (build.prop)

В образе system есть интересный файлик build.prop , содержащий множество полезной информации о железе устройства и настройках, устанавливаемых по умолчанию, для различных стоковых приложений. Справедливости ради замечу, что это не всегда так. Например, в Gigaset ME и ME Pro build.prop разделен на две части. В одной части содержатся настройки для Gigaset ME, а для ME Pro некоторые строки продублированы, но ключи (название смартфона и так далее) в них другие. Это было сделано, чтобы обеспечить более-менее корректную работоспособность одной и той же прошивки на разных аппаратах.


Build.prop содержит (или может содержать) огромное количество настроек. Некоторые из них ничего не меняют, некоторые улучшают одно за счет ухудшения другого, но есть те, которые действительно полезны:

  • ro.product.model и ro.product.manufacturer - модель смартфона и имя производителя. С помощью замены этих строк можно заставить Play Store думать, будто у тебя другой смартфон, что откроет доступ к большему количеству софта. Для всяких малоизвестных китайских смартфонов эти строчки могут стать спасительными;
  • hw.qemu.mainkeys - принимает только два значения: 0 - показать наэкранные клавиши навигации, 1 - не показывать кнопки. Отсутствие строки соответствует 0;
  • debug.sf.nobootanimation - значение 1 отключает анимацию загрузки, что немного поднимает ее скорость. Установка 0 или удаление строки возвращает анимацию на место;
  • ro.telephony.default_network - говорит системе, в какой режим должна быть переключена мобильная сеть при загрузке;
  • ro.sf.lcd_density - DPI дисплея, наиболее точное значение для дисплея можно посчитать через удобный сайт . Но никто не запрещает поставить и большее или меньшее значение по своему вкусу: более высокие значения делают элементы интерфейса крупнее, низкие - меньше;
  • ro.config.vc_call_vol_steps - количество шагов громкости во время разговора (по умолчанию 8);
  • ro.config.media_vol_steps - количество шагов громкости мультимедиа (по умолчанию 15).

Внедряем в прошивку Google Apps

Почти всегда кастомные прошивки поставляются без сервисов Google и магазина приложений. Разработчики предлагают нам установить их отдельно с помощью пакета GApps. Однако его можно интегрировать прямо в прошивку.

Для начала необходимо скачать пакет GApps. Я рекомендую брать архивы Open GApps . Выбираешь версию Android, архитектуру процессора и вариант комплектации (Pico, Nano, Stock...), который определяет, сколько различных приложений Google содержит архив. Я рекомендую скачать версию Pico. Она содержит только Play Store и набор необходимых для его работы библиотек.

Интеграция GApps в прошивку выполняется так:

  1. Распаковываем ZIP-архив GApps с помощью любого архиватора.
  2. Переходим в папку Core.
  3. Видим множество архивов с расширением.tar.lz . Извлекаем с помощью lzip.
  4. После распаковки копируем файлы из папок в соответствующие папки в system. Что куда кидать, нетрудно догадаться по структуре каталогов в архиве. Например, configupdater (со скриншота) нужно кидать в папку priv-app .
  5. Переходим в папку GApps (находится рядом с Core) и проделываем пункты 3 и 4 для файлов в ней.
  6. Все, мы интегрировали GApps в нашу прошивку!

Свободное место

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

$ adb shell df /system

Второй вариант: поставить на устройство терминал и набрать команду

$ df /system

Размер раздела в байтах можно узнать, установив на смартфон BusyBox и выполнив в терминале команду

$ busybox df -B 1 /system

Или то же самое с помощью ADB:

$ adb shell busybox df -B 1 /system

Место, занимаемое прошивкой, будет приблизительно равно размеру system в распакованном виде. Вообще, при создании прошивки необходимо учитывать, что юзер также может прошить поверх нее различные модификации (SuperSU, Xposed) или перенести приложения в раздел system. Например, минимальный пакет приложений Google (Pico) требует минимум 150 Мбайт дополнительного пространства для установки.

При необходимости размер файла прошивки можно уменьшить, удалив не только ненужные программы из /system/app (/system/priv-app) и звуки вызова из system/media/audio и bootanimation.zip , но и:

  • /system/tts/lang_pico - языки примитивного голосового движка Pico TTS, голосовой движок Google это не затронет;
  • /system/usr/srec/config/ - офлайн-языки. Можно будет скачать потом онлайн, если понадобится.

Сборка

После внесения изменений нужно собрать все обратно. Сначала запакуем раздел system в system.new.dat . Скачиваем нужные нам инструменты:

$ wget https://github.com/xpirt/img2sdat/raw/master/img2sdat.py $ wget https://github.com/xpirt/img2sdat/raw/master/blockimgdiff.py $ wget https://github.com/xpirt/img2sdat/raw/master/common.py $ wget https://github.com/xpirt/img2sdat/raw/master/rangelib.py $ wget https://github.com/xpirt/img2sdat/raw/master/sparse_img.py $ sudo apt-get install android-tools-fsutils

Преобразовываем нашу папку обратно в RAW-образ. Назовем его system_new.img:

$ sudo make_ext4fs -T 0 -S file_contexts -l 1073741824 -a system system_new.img output/

1073741824 меняем на размер раздела system в байтах. Желательно даже сделать его чуть меньше. Делаем из RAW-образа sparse-образ:

$ img2simg system_new.img system_snew.img

Преобразуем наш образ в system.transfer.list и system.new.dat , которые и нужно кидать в архив с прошивкой, но сначала удалим старые файлы:

$ rm -rf system.transfer.list $ rm -rf system.new.dat $ rm -rf system.patch.dat $ chmod +x img2sdat.py $ ./img2sdat.py system_snew.img

Отделим файлы прошивки от лишней шелухи (файлов, которые мы загружали для работы. Для этого удобно пользоваться архивом с прошивкой). Удалили? Теперь нужно запаковать прошивку в ZIP-архив (любым архиватором).

Осталось подписать архив. Сделать это можно как на самом Android с помощью ZipSigner , так и на ПК (потребуется установленная Java):

$ wget https://github.com/appium/sign/raw/master/dist/sign.jar $ java -jar файл.zip

Подводные камни

Во время сборки system.new.dat ты можешь столкнуться с несколькими проблемами, вызванными постоянными изменениями в механизмах формирования прошивок Android. Описанный выше способ должен хорошо сработать в случае основанной на Android 5.1 прошивки, в более новых могут возникнуть сложности, так что потребуется использовать другие версии инструментов сборки. К сожалению, мы не можем описать все нюансы сборки, поэтому, возможно, придется погуглить.

Установка

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

TWRP

Выводы

Эта статья описывает лишь верхушку огромного айсберга под названием «модификация прошивок». «Серьезные» прошивки не только дополняют ядро и саму прошивку со стоковыми приложениями множеством функций (которые зачастую вырваны из других ядер и прошивок), организовывая или даже меняя принципы их взаимодействия, но и вполне могут кардинально менять принципы работы ОС. Правда, такая поделка - это уже не Android, а отдельная ОС, даже если Play-сервисы получится туда поставить (кстати, такие действия, мягко говоря, не поощряются Google). Ну и не забываем: все оболочки от производителей - TouchWiz, ZenUI, HTC Sense и так далее - всего лишь обычные кастомы, максимально привязанные к железу устройства и друг к другу.

Мега утилита Android IMG Repack Tools для всех начинающих и продвинутых ромоделов, разработчиков, для редактирования образов Android.

Android IMG Repack Tools что это и зачем?

Android IMG Repack Tools утилита от пользователя под ником A.S._id (xda , 4pda), призвана для того чтобы редактировать образы Android:

  • распаковать образ Android (img, ext4)
  • редактирование файлов (вручную)
  • собрать образ

А также работа с ядрами (boot.img) и recovery (recovery). Утилита предназначена для работы как из под Linux, так и Windows (необходимо устанавливать Cygwin).

Android IMG Repack Tools будет полезна абсолютно всем ромоделам Android для создания новых кастомных прошивок, а также разработчикам ПО.

Где найти и загрузить Android IMG Repack Tools?

Скачать и новейшую версию утилиты Android IMG Repack Tools можно с официальной страницы проекта на XDA .

Установка Android IMG Repack Tools на компьютер

Так как ОС Android основана на ядре Linux, то все же правильней будет работать утилитой Android IMG Repack Tools из операционной системы основанной на Linux.

Предварительная настройка ОС для Android IMG Repack Tools

Если у вас Ubuntu версии 14.04 и старее (и Mint основанный на нем), то вам будет необходимо установить GCC 5 из репозитория (открыть терминал и набрать следующие команды):

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

sudo apt-get update

sudo apt-get install gcc-5 g++-5

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 --slave /usr/bin/g++ g++ /usr/bin/g++-5

Для пользователей Ubuntu 16.04 (и Mint основанный на нем), то вам нужно установить вначале:

1. GNU Automake 1.14 (скачать и распаковать)

2. Перейти в папку с Gnu Automake, открыть терминал и выполнить поочередно команды: ./configure make sudo make install

3. Установить пакеты: sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind libreadline6-dev gcc-multilib g++-multilib libc6-dev x11proto-core-dev libx11-dev libz-dev gawk texinfo automake libtool cvs libsdl-dev

Настройка Android IMG Repack Tools

1. После того как скачали Android IMG Repack Tools распаковать, перейти, открыть терминал

2. Набрать команду для запуска утилиты./main_menu

Если же у вас установлен Mint, то кликнуть по файлу main_menu

3. Перейти в раздел утилиты «0 — Configure & clean tools menu »

4. Выбрать «1 — Build android_img_repack_tools «, для того чтобы загрузить и сконфигурировать инструменты с помощью которых происходит работа с образами Android.

Работа с утилитой Android IMG Repack Tools

Ожидайте обновление статьи с инструкциями по работе утилиты в ближайшее время!