Изменение наложений AOSP с помощью системного свойства - PullRequest
0 голосов
/ 21 января 2019

Я работаю в пользовательской сборке AOSP, для которой я сделал наложение, которое меняет тему устройства по умолчанию. Я поместил эти наложения в:

device/overlay/framework/base/core/res/res

Теперь я хотел бы сделать другое наложение для той же сборки таким образом, чтобы изменение свойства изменило применяемое наложение.

Так, например, я установил

setprop persist.brand brand1

И я вижу оверлей1, затем:

setprop persist.brand brand2

и см. Наложение 2.

Я копался в RRO и смог изменить некоторые оверлеи с помощью пользовательских apks, но я понятия не имею, как связать это с системным свойством.

EDIT:

Я обнаружил, что могу добиться аналогичных результатов, компилируя rro apks, используя

include $(BUILD_RRO_PACKAGE)

в Android.mk.

Я заметил, что в build_rro_package.mk есть комментарий, который говорит

## Set LOCAL_RRO_THEME to the theme name if the package should apply only to
## a particular theme as set by ro.boot.vendor.overlay.theme system property.

Что я понимаю, так это то, что я могу сгруппировать много пакетов rro в одно имя LOCAL_RRO_THEME, а затем активировать или деактивировать их вместе, используя свойство ro.boot.vendor.overlay.theme. Если это правильно, то это именно то, что я искал

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда я задаю LOCAL_RRO_THEME с именем, отличным от LOCAL_PACKAGE_NAME, наложение не будет отображаться, когда я перечислю их с:

cmd overlay list

Это не имеет особого смысла, но, возможно, я делаю что-то не так?

1 Ответ

0 голосов
/ 05 марта 2019

с какой версией AOSP вы работаете? В AOSP 9 есть функция наложения во время выполнения (хотя Google еще не опубликовал документ, но он есть). В более ранней версии этого сделать нельзя, потому что система оверлеев выполняется во время компиляции. Если вы действительно хотите изменить ресурсы во время выполнения, вам нужно изменить структуру, особенно PackageManagerService

...