Параграф 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 дерева, которые друг за другом подключаются. Важно не пропустить данную информацию, иначе будет потом непонятно почему на этапе инициализации сборки произошла ошибка.
Возникает все же резонный вопрос: не проще ли все-таки все в одно дерево "запихнуть" и не париться?
И я скажу Вам нет. На то есть две причины:
- Если другое устройство, на которое собирается прошивка, использует общие деревья, то сокращается количество действий, которое нужно совершить для сборки (работает в том случае, если собирается прошивка не с нуля);
- Много времени и сил занимает добавление одного коммита в целый ряд устройств, проще один коммит в одно дерево, в итоге изменение будет во всех устройствах, которые используют общее дерево.
В итоге, получается только выгода. Похожую ситуацию мы увидим в вендоре.