Skip to content

Параграф 5: Адаптація вихідних текстів пристрою

Увага!

Тут будуть загальні знання і вони стосуватимуться в основному дерева. З приводу детальнішої адаптації дивіться репозиторій прошивки в пошуках прикладів і запитуйте у підтримки.

Отже, для бази свого дерева я рекомендую взяти дерево для Lineage OS. І так, чому? Тому що Lineage OS реалізувала деякі фічі, які також використовуються в Lineage-based прошивках (логічно), або були портовані на AOSP-based прошивки. Наприклад:

  • FlipFlap - підтримка магнітних чохлів
  • Touch HAL - підтримка кастомних фіч тачскріна
  • LiveDisplay HAL - підтримка кастомного налаштування дисплея

Як приклад візьмемо дерево для mido.

Загальні моменти

Як ми вже з'ясували, є конфіг lineage_mido.mk. Його треба перейменувати відповідно до прошивки (див. інші дерева для цієї прошивки). Наприклад, у carbon_mido.mk. Далі відкриваємо цей файл. Знаходимо змінну PRODUCT_NAME, там буде такий текст

makefile
PRODUCT_NAME := lineage_mido

Логічно припустити, що lineage треба міняти на carbon

makefile
PRODUCT_NAME := carbon_mido

Трохи вище ми побачимо цей код

makefile
$(call inherit-product, vendor/lineage/config/common_full_phone.mk)

Так-с, тут треба дивитися на що міняти. Приміром, у CarbonROM треба вписати наступний код (це для смартфонів, бо mido - це смартфон, а не планшет чи щось іще)

makefile
$(call inherit-product, vendor/carbon/config/gsm.mk)
$(call inherit-product, vendor/carbon/config/common.mk)

Так, зберігаємо, відкриваємо AndroidProducts.mk. Одразу бачимо, що в нас є такий код

makefile
PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/lineage_mido.mk

COMMON_LUNCH_CHOICES := \
    lineage_mido-user \
    lineage_mido-userdebug \
    lineage_mido-eng

Знову-таки логічно подумати, що треба lineage поміняти на carbon (щонайменше, ми ж перейменували lineage_mido.mk на carbon_mido.mk), це правильно. lineage_mido.mk міняємо на carbon_mido.mk, а lineage_mido-user і т. д. міняємо на carbon_mido-user і т. д. (це варіації який білд можна зібрати). І має вийти щось таке

makefile
PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/carbon_mido.mk

COMMON_LUNCH_CHOICES := \
    carbon_mido-user \
    carbon_mido-userdebug \
    carbon_mido-eng

Lineage OS based -> Lineage OS based

За фактом вистачить усього того, що описано вище.

Lineage OS based -> AOSP based

З'ясовуємо, чого немає в прошивці. У CarbonROM, наприклад, немає жодної з фіч, які я перераховував на самому початку параграфа. Потрібно вирізати Touch HAL, LiveDisplay і FlipFlap overlay, якщо все це є і цього в прошивці немає. Touch HAL лежить у директорії touch, LiveDisplay HAL - у директорії livedisplay, FlipFlap overlay - у lineage-overlay/packages/apps/FlipFlap. Усі ці директорії вирізаємо. Далі відкриваємо файл device.mk і прибираємо наступний код

makefile
# Touch features
PRODUCT_PACKAGES += \
    vendor.lineage.touch@1.0-service.xiaomi_mido
makefile
# LiveDisplay
PRODUCT_PACKAGES += \
    vendor.lineage.livedisplay@2.0-service.xiaomi_mido
makefile
# FlipFlap
PRODUCT_PACKAGES += \
   FlipFlap

Також вирізаємо збірку Trust HAL (якщо його в прошивці немає)

makefile
# Trust HAL
PRODUCT_PACKAGES += \
    vendor.lineage.trust@1.0-service

Зберігаємо і закриваємо файл.

Тепер потрібно відредагувати SEPolicy! Відкриваємо sepolicy/vendor/file_contexts і знаходимо таке:

/(vendor|system/vendor)/bin/hw/vendor\.lineage\.livedisplay@2\.0-service\.xiaomi_mido u:object_r:hal_lineage_livedisplay_qti_exec:s0
/(vendor|system/vendor)/bin/hw/vendor\.lineage\.touch@1\.0-service\.xiaomi_mido       u:object_r:hal_lineage_touch_default_exec:s0

Згадуємо, що LideDisplay HAL і Touch HAL були благополучно видалені, тому видаляємо ці два рядки, але треба прибрати в SEPolicy ще й правила для hal_lineage_livedisplay_qti_exec і hal_lineage_touch_default_exec. Найпростіше - grep'нути всі правила SEPolicy нашого дерева. Робиться так:

bash
grep -InRI "place_here_searched_text"

Таким чином ми побачимо всі файли, які мають включення тексту place_here_searched_text, сподіваюся логіка зрозуміла. І так, шукаємо і видаляємо ці правила. Якщо файл складається цілком з того, що відноситься до шуканих типів, то просто видаляємо (швидше за все так і буде). Уря! Готово!

AOSP based -> Lineage OS based

Тут за фактом вистачило б загальних моментів для цієї справи, однак ми пам'ятаємо, що є такі фічі, як Touch HAL і LiveDisplay HAL! Їх можна написати і додати правила SEPolicy для них. Якщо Ви написали/портували/перенесли HAL і він працює в Permissive, то я вітаю. Наступний крок - це додати новий HAL у file_contexts, зібрати прошивку і встановити її. Далі крутимо HAL як можемо, щоб набралися відмови SEPolicy. Щойно ми зібрали всі відмови, зберігаємо logcat і додаємо ці правила на базі зібраних відмов. Переводимо SELinux в Enforcing, збираємо, ставимо і перевіряємо. Якщо все працює, то я вітаю, Ви зробили це!

Наостанок

Не гребуйте дивитися чужі дерева. Ви не можете відразу все знати. Робіть за прикладом інших і трохи вносьте свою лепту, якщо це потрібно. І зберігайте авторство! 😃