Параграф 5: Адаптація вихідних текстів пристрою
Увага!
Тут будуть загальні знання і вони стосуватимуться в основному дерева. З приводу детальнішої адаптації дивіться репозиторій прошивки в пошуках прикладів і запитуйте у підтримки.
Отже, для бази свого дерева я рекомендую взяти дерево для Lineage OS. І так, чому? Тому що Lineage OS реалізувала деякі фічі, які також використовуються в Lineage-based прошивках (логічно), або були портовані на AOSP-based прошивки. Наприклад:
FlipFlap
- підтримка магнітних чохлівTouch HAL
- підтримка кастомних фіч тачскрінаLiveDisplay HAL
- підтримка кастомного налаштування дисплея
Як приклад візьмемо дерево для mido.
Загальні моменти
Як ми вже з'ясували, є конфіг lineage_mido.mk
. Його треба перейменувати відповідно до прошивки (див. інші дерева для цієї прошивки). Наприклад, у carbon_mido.mk
. Далі відкриваємо цей файл. Знаходимо змінну PRODUCT_NAME
, там буде такий текст
PRODUCT_NAME := lineage_mido
Логічно припустити, що lineage треба міняти на carbon
PRODUCT_NAME := carbon_mido
Трохи вище ми побачимо цей код
$(call inherit-product, vendor/lineage/config/common_full_phone.mk)
Так-с, тут треба дивитися на що міняти. Приміром, у CarbonROM треба вписати наступний код (це для смартфонів, бо mido - це смартфон, а не планшет чи щось іще)
$(call inherit-product, vendor/carbon/config/gsm.mk)
$(call inherit-product, vendor/carbon/config/common.mk)
Так, зберігаємо, відкриваємо AndroidProducts.mk
. Одразу бачимо, що в нас є такий код
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
і т. д. (це варіації який білд можна зібрати). І має вийти щось таке
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
і прибираємо наступний код
# Touch features
PRODUCT_PACKAGES += \
vendor.lineage.touch@1.0-service.xiaomi_mido
# LiveDisplay
PRODUCT_PACKAGES += \
vendor.lineage.livedisplay@2.0-service.xiaomi_mido
# FlipFlap
PRODUCT_PACKAGES += \
FlipFlap
Також вирізаємо збірку Trust HAL (якщо його в прошивці немає)
# 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 нашого дерева. Робиться так:
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, збираємо, ставимо і перевіряємо. Якщо все працює, то я вітаю, Ви зробили це!
Наостанок
Не гребуйте дивитися чужі дерева. Ви не можете відразу все знати. Робіть за прикладом інших і трохи вносьте свою лепту, якщо це потрібно. І зберігайте авторство! 😃