Как собрать прошивку android из исходников на windows

Обновлено: 04.07.2024

Я занимаюсь автоматизацией Android устройств и часто SDK или ОС Android не имеют нужного функционала или его работа выполняется медленно/очень медленно.

Используя возможности Native Development Kit (NDK) мы можем написать функционал, который будет выполняться быстрей, чем тот же функционал на Java. За счет данного кита мы можем добавлять в свое приложение код, написанный на C/C++ или создавать свои бинарные файлы под мобильные Android устройства.

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

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

Установка NDK

Скачиваем Android NDK и распаковываем архив или устанавливаем через SDK Manager.

Если еще нет, то можете добавить доп. инструменты:


И создаем «проект» под архитектуру вашего мобильного устройства:


Так как у моего HOMTOM HT16 архитектура armeabi-v7a то я буду использовать команду:


И ждем, пока скрипт создаст все необходимые файлы (до 5 мин. примерно).

Проверка на работоспособонсть

Создадим файл hello_world.c с простым кодом:


И попробуем его скомпилировать:


С помощью атрибута -o указываем имя файла, а с помощью ключа -pie мы указываем, что бинарный файл PIE и все его зависимости загружаются в случайные расположения в виртуальной памяти каждый раз, когда приложение выполняется.

Если компиляция прошла успешно, то заливаем файл на телефон:


И попробуем бинарник:


Если вы увидели вывод фразы «hello world» — значит вы всё сделали правильно!

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

Для определения архитектуры можете выполнить команду

Исходники и библиотеки

Так как анализ скомпилированного бинарного файла очень затратно по времени, а Android является открытой системой, то почему бы не воспользоваться этим качеством!

Заходим сюда и ищем нужную версию Android. Ну а так уже — скачиваем архив и ищем нужный исходник бинарного файла. Хотя, конечно же есть вариант — Google и «правильный запрос».

В моем случае нужный мне файл находится по этой ссылке.

Частично разберем данный код.

DEFAULT_DISPLAY_ID — идентификатор дисплея, с которого необходимо получить скриншот. В нашем случае 0.

flinger2skia и vinfoToPixelFormat — отвечает за определение, в каком формате должно быть изображение.

notifyMediaScanner — после того, как изображение будет создано в файловой системе необходимо послать broadcast, чтобы файл смог корректно отображаться. Если не вызывать данный broadcast, то не все приложении смогут увидеть созданный файл.
Функция main не является сложной для «чтения», поэтому разберем только важные моменты, которые непосредственно отвечают за получение данных о изображении.

/dev/graphics/fb0 — это так называемый framebuffer. Framebuffer — это область видеопамяти для кратковременного хранения одного или нескольких видеокадров. Исходя из кода main видно, что существуют версии Android устройств, которые хранят изображение экрана в этом файле. Таким образом, если вы «счастливчик», то узнав vinfo.xoffset и vinfo.yoffset (в большинстве случаев они будут равны 0) и используя консоль вы с легкостью сможете получить информацию о цвете:


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

screenshot.update — это второй способ, как можно получить изображение. Данная функция имеет несколько перегруженных методов с которыми можно ознакомиться тут.

Рассмотрим описание функции с самым большим количеством параметров:


display — ссылка на необходимый display.
sourceCrop — кроп выбранной области изображения. Может содержать координаты верхней левой точки и нижней правой (всего 4 параметра xLeft, yTop, xRight, yBottom). Начальная точка координат — верхний левый угол.
reqWidth — ширина возвращаемого изображения
reqHeight — высота возвращаемого изображения
minLayerZ и maxLayerZ — как именно работают данные параметры не удалось понять. Перебор значений выдавал иногда черный кран
useIdentityTransform — Если true, то отключает слой наложения поверх приложений, т.е. тех Activity, которые используют ACTION_MANAGE_OVERLAY_PERMISSION
rotation — поворот изображения.

Таким образом, чтобы нам получить цвет пикселя, нам необходимо задать xLeft и yTop, сдвинув их на 1, т.к. отсчет будет идти с 0, а указанные координаты установить в xRight, yBottom. В reqWidth и reqHeight установить значение равным 1. Изменяя параметры данной функции мы сможем определять границы нужной для нас области.

Компиляция базового screencap.cpp

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

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

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


В ошибке будет виден путь до данной директории. Если clang у вас находится в другом месте — измените путь до него.

Обращаемся к Google и ищем все необходимые файлы. В моем случае пришлось добавить следующие директории и файлы:

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


и получаем ужасный результат:

По мне, это был реальный ад, т.к. множество файлов имело ошибки, чего по идее быть не должно, ведь содержимое данных файлов не менялось. На данном этапе я на долго «присел» и начал активно гуглить ошибки, но нужного ответа не нашел. Каким образом я решил поизучать туториал по clang я уже не помню, но это решение меня спасло!

Как оказалось, у clang есть параметр (а точнее у ld) --unresolved-symbols, который отвечает за работу с неразрешенными (unresolved) символами. Хотя по самой ошибки и не скажешь, что дело в этом. Добавляем параметр и выполняем компиляцию снова:


Наконец-то компиляция прошла успешно! На самом деле, я уже думал, что большая часть проблем ушла, но не тут то было. Начали появляться ошибки, наподобие следующей:


Как оказалось, компилятору было достаточно наших добавленных файлов, но на Android устройстве все эти файлы хранятся в .so библиотеках. Позже разобравший более менее хорошо в этом вопросе, я нашел относительно простой способ поиска необходимых библиотек. Для этого нужно открыть бинарных файл screencap, который находится на Android-устройстве (/system/bin/screencap) в текстовом редакторе и посмотреть все названия .so библиотек, которые используются в данном файле. В моем случае вот эта часть:

Вы можете сравнить данную часть с вашим скомпилированным файлом и найти, каких же библиотек вам не хватает. В данном случае ими оказались: libgui.so, libui.so, libcutils.so, libutils.so, libbinder.so, libskia.so. Ищем их расположение (на самом деле, они находятся в одном и том же месте):


Выполняем копирование на sdcard/libs всех библиотек (пример для libskia.so):


Используя adb pull копируем файлы с моб. устройства на компьютер:


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


Теперь и компиляция пройдет успешно и запуск бинарного файла на моб. устройстве будет без ошибок.

Заключение и результат

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

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


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

Нужный ZIP можно найти на XDA Developers или 4PDA. Но имей в виду, что нужна прошивка конкретно для твоей модели аппарата, — у того же Galaxy S7 есть несколько модификаций для разных рынков, не всегда совместимых между собой.

Структура ZIP-файла с прошивкой

После загрузки распакуем архив с помощью любого архиватора. Внутри будет следующий набор файлов и папок:

  • META-INF — папка с метаинформацией о прошивке (сертификат автора, манифест со списком файлов, их контрольными суммами), скриптом обновления (updater-script) и инсталлятором (update-binary), который выполняет команды скрипта по монтированию разделов, копированию файлов и другим действиям с NAND-памятью;
  • boot.img — образ с ядром и RAM-диском (он прошивается в раздел boot);
  • system.new.dat — это, грубо говоря, и есть сама прошивка, а точнее образ раздела system, содержащий операционную систему Android за вычетом ядра;
  • system.transfer.list — содержит список команд, которые необходимо выполнить, чтобы поблочно скопировать содержимое system.new.dat в раздел system при установке прошивки;
  • system.patch.dat — используется для OTA-обновлений, то есть выборочного внесения изменений в прошивку; если прошивка «полная», он имеет нулевой размер.

Реверс малвари

Распаковываем system.new.dat

Файлы system.new.dat и system.transfer.list представляют для нас наибольший интерес. Точнее, не они, а содержащаяся в них система. Но добраться до нее не так просто.

Скрипт

Самые ленивые могут разобрать прошивку с помощью скрипта System_Extractor-Linux.

  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 ):

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

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

Содержимое образа system

Содержимое образа system

Структура каталогов 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, начнем вносить изменения.

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

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

Друг от друга они отличаются привилегиями доступа. Если программы из 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 — число кадров в секунду. Part0 и part1 указывают на папки, из которых будет воспроизводиться анимация, и последовательность воспроизведения. Вообще, может быть как одна часть, так и несколько (три и больше).

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

Четыре части в bootanimation.zip для LineageOS

Четыре части в bootanimation.zip для LineageOS

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

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

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

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

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

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

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

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

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

Дополнительный файл для Gigaset ME и ME Pro

Дополнительный файл для 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:

Инфа о разделе system

Инфа о разделе system

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

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

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

Место, занимаемое прошивкой, будет приблизительно равно размеру 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 . Скачиваем нужные нам инструменты:

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

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

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

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

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

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

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

Установка

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

Выводы

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

Оригинал: How to build Android ROM Part 1/3
Автор: Masc
Дата публикации: 6 марта 2017 г.
Перевод: А.Панин
Дата перевода: 28 марта 2017 г.

Разработка Android-прошивок - настройка рабочего окружения

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

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

Если вы хотите собирать Android-прошивки, вам понадобится установленный на компьютере Linux-дистрибутив, ну а если вы не можете выделить отдельный компьютер для этих целей, вы вполне можете обойтись виртуальной машиной с Linux-системой.

Я буду использовать дружелюбную систему Ubuntu 16.04, что рекомендую и вам.

Требования

  • Дистрибутив Linux
  • Как минимум 200 ГБ свободного пространства на жестком диске или твердотельном накопителе
  • Мощный компьютер с как минимум 4 ГБ оперативной памяти и производительным четырехядерным центральным процессором
  • Качественное соединение с сетью Интернет на скорости как минимум 600 КБ/с

Если у вас есть все необходимое, можно начинать работу.

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

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

Сборочный инструментарий

Выполните следующую команду для установки сборочного инструментария (ее исполнение может занять достаточно много времени в зависимости от скорости вашего Интернет-соединения):

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

Выполните следующую команду для для установки описанного инструмента в свою систему:

CCACHE

Это полезная утилита, которая используется для кэширования бинарных файлов и позволяет сократить время компиляции (примерно на 50%).

Для ее инициализации следует выполнить следующую команду:

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

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

Для удаления файлов кэша - следующую команду:

Настройка рабочего окружения почти закончена - осталось открыть файл bash.rc:

Теперь следует перейти к последней строке этого файла и вставить в него следующие строки:

Наконец, следует закрыть текстовый редактор и выполнить следующую команду для применения изменений:

Как скомпилировать прошивку LineageOS с исходного кода

Как скомпилировать прошивку LineageOS с исходного кода. Хотели бы сами скомпилировать прошивку LinageOS для своего Android из исходного кода? Мы подробно и доступно расскажем вам как это сделать!

Если вам вдруг захотелось попробовать силы в создание прошивки LineageOS для своего устройства из исходного кода, но вы понятия не имеете как это делать. Тогда данный материал это что вам надо!

Сборка прошивки LineageOS с исходного кода будет на примере Xiaomi MI5. Поэтому когда будете компилировать прошивку для своего смартфона или планшета будьте внимательны и вносите необходимые правки где это понадобиться.

Что необходимо

  • Android устройство для которого будет создана прошивка
  • Кабель USB, совместимый с Android устройством
  • Скоростной интернет
  • Установленная 64х разрядная операционная система Ubuntu (LTS) на компьютер, c большим количеством свободного места (более 100 GB)

Прежде чем начать

Вы должны знать как пользоваться командой cd ! Также на вашем Android устройстве должны быть установлены Root права , а также включена « отладка по USB «.

Установка необходимых компонентов

Абсолютно все действия будут происходить в терминале Linux! Поэтому открываем терминал и приступаем!

Обновим систему Ubuntu, чтобы скачивать самые новые версии программного обеспечения:

apt-get update && sudo apt-get upgrade -y

Для начала установим утилиты ADB и Fastboot на ваш компьютер:

sudo apt install android-tools-adb

sudo apt install android-tools-fastboot

Теперь установим необходимые пакеты разработчика, для того чтобы скомпилировать прошивку из исходного кода:

sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev repo

Далее нам необходимо установить Java Development Kit (JDK)

для этого вводим команду:

Подготовка среды для компиляции прошивки

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

После чего в вашей домашней папке должны появится две папки bin, android, а в ней lineage.

Подключаемся к Google API:

Обновляем среду комплирования:

Теперь необходимо перейти в папку lineage, подключиться к репозиториям LinageOS и начать загружать исходный код:

Если вы планируете устанавливать версию прошивку не 15.1, а 14.1, то в конце команды выше необходимо сделать поправку.

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

Подготовка устройства и компиляция прошивки

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

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

sudo source build/envsetup.sh

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

Теперь необходимо извлечь из Android «драйвера» устройства. Подключите Android к компьютеру и выполните команду для перехода:

В конце, вместо xiaomi и gemini вы должны указать своего производителя и устройство Android.

И запустим скрипт командой:

Если все пройдет как надо, то в папке /android/lineage/vendor/ваш_производитель_устройства будут файлы. Если в прошлый раз у вас была проблема с загрузкой исходного кода для ядра, то вернитесь назад и повторите команды.

Читайте также: