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
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 і ті, які були модифіковані командою LineageOS. У 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 і він буде завантажувати наші репозиторії разом з вихідними кодами прошивки і, звісно ж, буде оновити вихідні коди.