Параграф 3: Завантажуємо вихідні коди прошивки
Працювати будемо цілком у терміналі, щоб не бігати з терміналу в UI і назад.
Створюємо директорію, де зберігатиметься наша прошивка і заходимо в неї. Нехай вона умовно називатиметься LOS (скорочена назва Lineage OS), але можна назвати як завгодно і ще навіть циферки написати 😃
mkdir LOS
cd LOS
Чудово, тепер потрібно завантажити вихідні коди прошивки. Відкриваємо github.com/LineageOS і офігіваємо, яка велика там кількість усього. І все це качати? Так, але не вручну, а за допомогою утиліти repo. Відкриваємо репозиторій android або manifest (залежить від прошивки), зазвичай він закріплений.
Ага! Насамперед у Readme бачимо як завантажити. Чудово 😃 Вводимо
repo init -u git://github.com/LineageOS/android.git -b lineage-17.1
repo sync
Примітка
Для економії місця на диску, можна використовувати параметр --depth=1
, який говорить не завантажувати всю історію змін.
repo init --depth=1 -u git://github.com/LineageOS/android.git -b lineage-17.1 --git-lfs
Завантаження почалося і чекаємо.
Примітка
Щоб оновити вихідні коди, введіть просто в директорії з вихідними кодами
repo sync
Примітка
Якщо Ви хочете обмежити швидкість завантаження, потрібно ввести кількість потоків.
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 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.
Далі вказуємо що завантажуємо.
<project name="device_lenovo_jd2019" path="device/lenovo/jd2019" remote="gitlab_jd2019" revision="thirteen" />
Розглянемо докладніше xml структуру маніфесту,
name
- Назва репозиторію в GitHub/GitLabpath
- Шлях, куди необхідно завантажити на дискremote
- Звідки завантажувати репозиторійrevision
- Гілка в репозиторії, можна не вказувати (буде завантажувати гілку за замовчуванням)
У підсумку зберіг цей .xml файл як .repo/local_manifests/jd2019.xml
.
Як використовувати цей файл? Просто пишемо repo sync
і він буде завантажувати наші репозиторії разом з вихідними кодами прошивки і, звісно ж, буде оновити вихідні коди.