Реализация альтернативного пользовательского шрифта

В Android 11 и нижней части , обновление файлов шрифтов устройства установлены в AOSP (в /system/fonts раздела) или разделы поставщика (в /product/fonts или /system/fonts разделов) требует обновления системы от OEM. Это требование существенно влияет на совместимость эмодзи. В Android 12 вы можете использовать FontManager обслуживание системы управления , установленные файлы шрифтов и обновления устройств установлены файлы шрифтов без обновления системы.

Android 12 поддерживает три взаимодействия процессов; FontManagerService , Font Updater и Application .

FontManagerService центральная система управления на сервере системы. FontManagerService сохраняет последние настройки системы шрифтов для каждого пользователя.

FontUpdater является подключаемым шрифтом обновлением , который доверяет в signature|privileged проверкой прав доступа. В FontUpdater общается с FontManagerService получить, установить, удалить или обновить текущие настройки системы шрифтов. FontUpdater может передать новое содержимое файла шрифта с помощью коммуникационных механизмов межпроцессного (IPC). FontManagerService сохраняет содержимое в общедоступном для чтения места хранения, например, в /data/fonts файлов. Это хранилище охраняется. Она может быть написана FontManagerService только, политикой SELinux.

Когда Application запускает класс, он передает параметры системы шрифта как аргументы bindApplication методы; затем он инициализирует настройки шрифта для использования процессом приложения.

Реализация пользовательских шрифтов

Некоторые OEM-производители устанавливают или заменяют файлы шрифтов в AOSP, чтобы показать свои бренды. Android 12 поддерживает эту функцию, но добавляет требования по обновлению шрифтов эмодзи на устройствах. OEM-производителям, которые не изменяют и не обновляют файлы шрифтов эмодзи, не нужно использовать эту функцию.

Google обновляет файлы шрифтов, особенно NotoColorEmoji файлы через GMS Ядра, так что не изменить или удалить NotoColorEmoji.ttf файл из /system раздела, а не удалить его из /system/etc/fonts.xml . Обратите внимание на следующие три способа , которые можно настроить шрифты:

  1. Заменить NotoColorEmoji.ttf файл с OEM-марочного Emoji шрифт.
  2. Измените NotoColorEmoji.ttf файл для ваших потребностей местного рынка.
  3. Заменить или изменить другие файлы шрифтов.

Если вы не изменяете шрифты эмодзи в AOSP, вам не нужно предпринимать никаких действий. Если вы хотите настроить шрифты эмодзи, следуйте инструкциям в следующих разделах.

Замена NotoColorEmoji.ttf фирменными шрифтами эмодзи OEM

Чтобы заменить NotoColorEmoji.ttf файл с вашим OEM-марочным Emoji шрифты файлом, поместите Emoji шрифт непосредственно перед резервным шрифтом цепи:

  1. Поместите свой собственный шрифт, названный OEMCustomEmoji.ttf , в /system раздела.
  2. Изменение /system/etc/fonts.xml как показано в следующем коде:

    <family lang="ko">
    <font weight="400" style="normal" index="1">NotoSansCJK-Regular.ttc</font>
    </family>
    <!-- ADD FOLLOWING LINE -->
    <family lang="und-Zsye">
       <font weight="400" style="normal">OEMCustomEmoji.ttf</font>
    </family>
    <!-- END OF MODIFICATION -->
    <family lang="und-Zsye">
       <font weight="400" style="normal">NotoColorEmoji.ttf</font>
    </family>
    <family lang="und-Zsym">
       <font weight="400" style="normal">NotoSansSymbols-Regular-Subsetted2.ttf</font>
    </family>
    

Изменение NotoColorEmoji.ttf для нужд местного рынка

Выполните следующие действия, чтобы выполнить настройку в соответствии с потребностями вашего местного рынка:

  1. Создайте свой собственный NotoColorEmoji файл с другим именем; например, назовите его Modified\_NotoColorEmoji.ttf .
  2. Поместите его перед оригинальным NotoColorEmoji.ttf файла.

После выполнения шага 2, модифицированный глиф , поддерживаемый Modified\NotoColorEmoji.ttf показывает вместо оригинального NotoColorEmoji.ttf . Google рекомендует следующее:

  • В этом шрифте должен быть только необходимый глиф.
  • Делегат неизмененных глифов оригинального NotoColorEmoji.ttf файл , так что ваши устройства получают любые дизайнерские исправления , сделанные в последующих версиях Emoji.

Удалить глифы: Для того, чтобы удалить глифы из NotoColorEmoji.ttf файла, выполните шаги 1 и 2, а также указать glyph ID = 0 в вашем CMAP.

Используйте региональный флаг: Если цель глиф регионального флага, указать глифы ID как неизвестный код страны. (Использовать country code = "ZZ" .)

Сделать тофу глиф: Вы можете явно указать Тофу глифов ID , если вы хотите использовать один. При указании glyphID = 0 , соответствующее приложение толкует , что в качестве «глиф не доступен». Например, если вы используете этот атрибут, то Paint#hasGlyph приложение возвращает false .

Заменить или изменить другие файлы шрифтов

Для того, чтобы заменить или изменить другие шрифты, настройка выполняется аналогично для модификации tff файлов для потребностей местного рынка. Неизвестные файлы шрифтов, которые обновляются в AOSP во время выполнения, игнорируются и не обновляются. Google игнорирует неизвестные шрифты на вашем устройстве. Сюда входят файлы шрифтов, которые были изменены из исходных шрифтов в AOSP.

Хотя обновления шрифтов выполняются Google в GMS Core, общий механизм обновления шрифтов открыт для всех OEM-производителей. OEM - производители могут устанавливать дополнительные шрифты с использованием выполняемых обновлениями шагов в Конференц - предпосылках , подписание файлов шрифты и внесение выполнения шрифта обновления .

Предпосылки для встречи

Механизм обновления шрифта использует fs-verity Linux функцию ядра. Убедитесь , что ваше устройство fs-verity податливое и включают сертификат на устройстве.

Подпись файлов шрифтов

Поскольку файлы шрифтов являются опасными ресурсами, их необходимо проверять с помощью надежных ключей. Внимательно просмотрите все файлы шрифтов, которые необходимо обновить, и подпишите своим закрытым ключом. Подпись должна быть fs-verity совместимы.

Обновление шрифтов во время выполнения

В FontManger выполняет приложение системного шрифта обновления. FontManager приложение обеспечивает самый последний статус шрифта установлен в системе и способность к файлам обновления шрифтов с подписями. Для вызова обновления приложений, добавить UPDATE_FONT signature|privileged разрешение вашего приложения allowlist , и в манифесте .

Обеспечить UPDATE_FONT signature|privileged разрешение на функцию программы обновления вашего приложения.