Skip to content

Параграф 3: Скачиваем исходники прошивки

Работать будем целиком в терминале, чтобы не бегать из терминала в UI и обратно.

Создаем папку, где будет хранится наша прошивка и заходим в неё. Пусть она условно будет называться LOS (сокращенное название Lineage OS), но можно назвать как угодно и еще даже циферки написать 😃

bash
mkdir LOS
cd LOS

Отлично, теперь требуется скачать исходники прошивки. Открываем github.com/LineageOS и офигеваем, какое большое там количество всего. И все это качать? Да, но не вручную, а с помощью утилиты repo. Открываем репозиторий android либо manifest (зависит от прошивки), обычно он закреплен.

GitHub_LineageOS

Ага! Первым делом в Readme видим как скачать. Замечательно 😃 Вводим

bash
repo init -u git://github.com/LineageOS/android.git -b lineage-17.1 --git-lfs
repo sync

Примечание.

Для экономии места на диске, можно использовать параметр --depth=1, который говорит не скачивать всю историю измнений.

bash
repo init --depth=1 -u git://github.com/LineageOS/android.git -b lineage-17.1 --git-lfs

Скачивание началось и ждем.

Примечание.

Чтобы обновить исходники, введите просто в папке с исходниками

bash
repo sync

Примечание.

Если Вы хотите ограничить скорость закачивания, требуется ввести количество потоков.

bash
repo sync -j#

Где # - количество потоков. Автор обычно вручную ставит 16 потоков для быстрого скачивания. Так же существуют самые разные агрументы для этих команд, подробнее: repo init repo sync

Такой репозиторий, который мы открыли, обычно состоит из манифестов, которые представляют из себя xml файлы. Один файл может подключать другие файлы, тем самым не надо все хранить в одном файле, удобно. default.xml это манифест, в котором хранятся все исходники AOSP и исходники AOSP, которые были модифицированы командой Linege OS. В snippets/lineage.xml лежат уже исходники Lineage OS за их авторством, к примеру всеми известный плеер Eleven.

И в принципе на этом параграф заканчивается, единственное, что хотелось бы немного рассказать про локальные манифесты.

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

Они находятся в .repo/local_manifests/. Может будет вопрос "а зачем он нам?". Все просто, не нужно вводить кучу команд для скачивания нескольких репозиториев себе, а просто положить .xml файл, в котором описаны что, где, куда нужно качать. Посмотрим на примере устройства Lenovo Z5s aka jd2019

xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>

    <!-- Remotes -->
  <remote name="gitlab_jd2019" fetch="https://gitlab.com/lenovo-z5s" />
  <remote name="github_kernel" fetch="https://github.com/jzinferno2" />

  <!-- DT -->
  <project name="device_lenovo_jd2019" path="device/lenovo/jd2019" remote="gitlab_jd2019" revision="thirteen" />
  <project name="device_lenovo_sdm710-common" path="device/lenovo/sdm710-common" remote="gitlab_jd2019" revision="thirteen/stable" />

  <!-- VT -->
  <project name="vendor_lenovo_jd2019" path="vendor/lenovo/jd2019" remote="gitlab_jd2019" revision="twelve" />
  <project name="vendor_lenovo_sdm710" path="vendor/lenovo/sdm710-common" remote="gitlab_jd2019" revision="thirteen" />

  <!-- KT -->
  <project name="kernel_lenovo_sdm710" path="kernel/lenovo/sdm710" remote="github_kernel" revision="thirteen" />

</manifest>

Что мы тут видим? Обычную xml-структуру. Для сборки jd2019 нам требуется больше 3 репозиториев. Для начала определяем откуда качать.

Это так называемый remote. В нашем случае у нас два remote, ссылка на GitLab и GitHub. Они введут на организацию в GitLab и обычного пользователя на GitHub.

Дальше указываем что скачиваем.

xml
<project name="device_lenovo_jd2019" path="device/lenovo/jd2019" remote="gitlab_jd2019" revision="thirteen" />

Рассмотрим подробнее xml структуру манифеста,

  • name - Название репозитория в GitHub/GitLab
  • path - Путь, куда необходимо скачать на диск
  • remote - Откуда качать репозиторий
  • revision - Ветка в репозитории, можно не указывать (будет качать ветку по-умолчанию)

В итоге сохранил этот .xml файл как .repo/local_manifests/jd2019.xml

Как использовать этот файл? Просто пишем repo sync и он будет скачивать наши репозитори вместе с исходниками прошивки и конечно же будет обновлять исходники.