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 дерева, которые друг за другом подключаются. Важно не пропустить данную информацию, иначе будет потом непонятно почему на этапе инициализации сборки произошла ошибка.

Возникает все же резонный вопрос: не проще ли все-таки все в одно дерево "запихнуть" и не париться?

И я скажу Вам нет. На то есть две причины:

  • Если другое устройство, на которое собирается прошивка, использует общие деревья, то сокращается количество действий, которое нужно совершить для сборки (работает в том случае, если собирается прошивка не с нуля);
  • Много времени и сил занимает добавление одного коммита в целый ряд устройств, проще один коммит в одно дерево, в итоге изменение будет во всех устройствах, которые используют общее дерево.

В итоге, получается только выгода. Похожую ситуацию мы увидим в вендоре.