맞춤 글꼴 대체 구현

Android 11 이하에서는 AOSP(/system/fonts 파티션) 또는 공급업체 파티션(/product/fonts 또는 /system/fonts 파티션)에서 기기에 설치된 글꼴 파일을 업데이트하려면 OEM의 시스템 업데이트가 필요했습니다. 이 요구사항은 그림 이모티콘 호환성에 크게 영향을 미쳤습니다. Android 12에서는 FontManager 시스템 서비스를 사용하여 시스템 업데이트 없이 설치된 글꼴 파일을 관리하고 기기에 설치된 글꼴 파일을 업데이트할 수 있습니다.

Android 12에는 다음과 같은 세 가지 프로세스 상호작용이 있습니다. FontManagerService, Font Updater, Application

FontManagerService는 시스템 서버에 있는 중앙 관리 시스템입니다. FontManagerService는 사용자별 최신 시스템 글꼴 설정을 저장합니다.

FontUpdatersignature|privileged 권한 확인으로 신뢰할 수 있는 플러그형 글꼴 업데이터입니다. FontUpdaterFontManagerService와 통신하여 현재 시스템 글꼴 설정을 가져오거나 설치하거나 삭제하거나 업데이트합니다. FontUpdater는 프로세스 간 통신(IPC) 메커니즘을 통해 새 글꼴 파일 콘텐츠를 전달할 수 있습니다. FontManagerService/data/fonts 파일과 같이 누구나 읽을 수 있는 저장소 위치에 콘텐츠를 저장합니다. 이 저장소는 보호됩니다. SELinux 정책에 따라 FontManagerService 작성할 수 있습니다.

Application 클래스가 실행되면 시스템 글꼴 설정을 bindApplication 메서드의 인수로 전달합니다. 그런 다음 애플리케이션 프로세스에서 사용할 글꼴 설정을 초기화합니다.

맞춤 글꼴 구현

일부 OEM은 브랜드가 표시되도록 AOSP에서 글꼴 파일을 설치하거나 대체합니다. Android 12에서는 이 기능을 지원하지만 기기에서 그림 이모티콘 글꼴이 계속 업데이트되도록 요구사항을 추가합니다. 그림 이모티콘 글꼴 파일을 수정하거나 업데이트하지 않는 OEM은 이 기능을 사용하지 않아도 됩니다.

Google에서는 글꼴 파일, 특히 NotoColorEmoji 파일을 GMS 코어를 통해 업데이트하므로 /system 파티션에서 NotoColorEmoji.ttf 파일을 수정하거나 삭제하지 말고 /system/etc/fonts.xml에서도 삭제하지 마세요. 글꼴을 맞춤설정할 수 있는 다음 세 가지 방법을 확인하세요.

  1. NotoColorEmoji.ttf 파일을 OEM 브랜드 그림 이모티콘 글꼴로 바꿉니다.
  2. 현지 시장 요구에 맞게 NotoColorEmoji.ttf 파일을 수정합니다.
  3. 기타 글꼴 파일을 바꾸거나 수정합니다.

AOSP에서 그림 이모티콘 글꼴을 수정하지 않는 경우 아무런 작업을 하지 않아도 됩니다. 그림 이모티콘 글꼴을 맞춤설정하려는 경우 다음 섹션의 안내를 따르세요.

NotoColorEmoji.ttf를 OEM 브랜드 그림 이모티콘 글꼴로 대체

NotoColorEmoji.ttf 파일을 OEM 브랜드 그림 이모티콘 글꼴 파일로 바꾸려면 글꼴 대체 체인 바로 앞에 그림 이모티콘 글꼴을 배치합니다.

  1. /system 파티션에 OEMCustomEmoji.ttf라는 자체 글꼴을 배치합니다.
  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. 다른 이름(예: Modified\_NotoColorEmoji.ttf)으로 자체 NotoColorEmoji 파일을 만듭니다.
  2. 원본 NotoColorEmoji.ttf 파일 앞에 배치합니다.

2단계를 실행하면 Modified\NotoColorEmoji.ttf에서 지원되는 수정된 글리프가 원본 NotoColorEmoji.ttf 대신 표시됩니다. Google에서는 다음을 권장합니다.

  • 이 글꼴에는 필요한 글리프만 포함합니다.
  • 기기에서 향후 그림 이모티콘 출시에 적용된 모든 디자인 수정사항을 받을 수 있도록 수정되지 않은 글리프를 원본 NotoColorEmoji.ttf 파일에 위임합니다.

글리프 삭제: NotoColorEmoji.ttf 파일에서 글리프를 삭제하려면 1단계와 2단계를 따르고 cmap에서 glyph ID = 0을 지정합니다.

지역 플래그 사용: 타겟 글리프가 지역 플래그인 경우 글리프 ID를 알 수 없는 국가 코드로 지정합니다. country code = "ZZ"를 사용합니다.

두부 글리프 만들기: 두부 글리프 ID를 사용하려면 명시적으로 지정하면 됩니다. glyphID = 0을 지정하면 관련 앱은 'glyph를 사용할 수 없음'으로 해석합니다. 예를 들어 이 속성을 사용하면 Paint#hasGlyph 앱은 false를 반환합니다.

기타 글꼴 파일 대체나 수정

기타 글꼴을 대체하거나 수정하기 위한 맞춤설정은 현지 시장 요구에 맞게 tff 파일을 수정하는 것과 유사합니다. 런타임에 AOSP에서 업데이트되는 알 수 없는 글꼴 파일은 무시되고 업데이트되지 않습니다. Google은 기기에 있는 알 수 없는 글꼴을 무시합니다. 여기에는 AOSP의 원본 글꼴에서 수정된 글꼴 파일이 포함됩니다.

글꼴 업데이트는 Google에서 GMS 코어를 통해 이루어지지만 일반 글꼴 업데이트 메커니즘은 모든 OEM에 공개됩니다. OEM은 기본 요건 충족, 글꼴 파일 서명, 런타임 글꼴 업데이트 만들기의 단계를 따라 추가 글꼴 업데이터를 설치할 수 있습니다.

기본 요건 충족

글꼴 업데이트 메커니즘은 fs-verity Linux 커널 기능을 사용합니다. 기기가 fs-verity를 준수하는지 확인하고 기기에 인증서를 포함합니다.

글꼴 파일 서명

글꼴 파일은 위험한 리소스이므로 신뢰할 수 있는 키로 확인해야 합니다. 업데이트할 모든 글꼴 파일을 신중히 검토하고 비공개 키로 서명합니다. 서명은 fs-verity와 호환되어야 합니다.

런타임 글꼴 업데이트 만들기

FontManger 시스템 앱은 글꼴 업데이트를 실행합니다. FontManager 앱은 설치된 최신 시스템 글꼴 상태와 서명으로 글꼴 파일을 업데이트하는 기능을 제공합니다. 업데이트 앱을 호출하려면 UPDATE_FONT signature|privileged 권한을 앱 허용 목록매니페스트에 추가합니다.

UPDATE_FONT signature|privileged 권한을 앱의 업데이터 함수에 제공합니다.