Skip to content

Параграф 2: Що таке дерево і скільки їх має бути

Повторимо визначення зі введення.

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

Зазвичай дерево лежить за шляхом device/vendor/devicecodename, де vendor - виробник, а devicecodename - кодове ім'я пристрою. Наведемо приклад для Xiaomi Redmi Note 4X - device/xiaomi/mido.

Але буває таке, що пристрої дико схожі за складовою дерева, і однакову частину просто переносять в окреме загальне дерево - common. Для прикладу розглянемо Asus ZenFone 2 Laser ZE500KL/KG і Asus ZenFone Max (Z010D).

Структура виходить така - у папці device/asus лежать три дерева:

  • Загальне: msm8916-common
  • Специфічне: Z00xD (об'єднане дерево для Asus ZenFone 2 Laser ZE500KL і Asus ZenFone 2 Laser ZE500KG)
  • Специфічне: Z010D

За підсумком, вся база лежить в msm8916-common, а специфіка лежить в специфічних деревах.

Посилання на проєкт з вихідними кодами, бранч lineage-16.0.

Але найсмішніше, що загальних дерев може бути ще більше!

Наведу приклад для Sony Xperia Z3 Compact:

  • device/sony/z3c
  • device/sony/shinano-common
  • device/sony/msm8974-common
  • device/sony/common

4 дерева, які одне за одним підключаються. Важливо не пропустити цю інформацію, інакше буде потім незрозуміло чому на етапі ініціалізації збірки сталася помилка.

Виникає все ж резонне запитання: чи не простіше все-таки все в одне дерево "запхати" і не паритися?

І я скажу Вам ні. На те є дві причини:

  • Якщо інший пристрій, на який збирають прошивку, використовує загальні дерева, то скорочується кількість дій, які потрібно зробити для збірки (працює в тому разі, якщо збирають прошивку не з нуля);
  • Багато часу і сил займає додавання одного комміта в цілу низку пристроїв, простіше один комміт в одне дерево, в результаті зміна буде у всіх пристроях, які використовують загальне дерево.

У підсумку, виходить тільки вигода. Схожу ситуацію ми побачимо в вендорі.