사용자 정의 글꼴 대체 구현

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

Android 12에는 세 가지 프로세스 상호 작용이 있습니다. FontManagerService , Font UpdaterApplication .

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

FontUpdatersignature|privileged 권한 검사에서 신뢰하는 플러그형 글꼴 업데이트 프로그램입니다. FontUpdaterFontManagerService 와 통신하여 현재 시스템 글꼴 설정을 가져오고, 설치하고, 제거하거나 업데이트합니다. FontUpdater 는 IPC(프로세스 간 통신) 메커니즘을 통해 새 글꼴 파일 내용을 전달할 수 있습니다. FontManagerService/data/fonts 파일과 같이 세계에서 읽을 수 있는 저장 위치에 내용을 저장합니다. 이 저장소는 보호됩니다. SELinux 정책에 의해 FontManagerService 로만 작성할 수 있습니다.

Application 클래스가 시작되면 시스템 글꼴 설정을 bindApplication 메서드의 인수로 전달합니다. 그런 다음 응용 프로그램 프로세스에서 사용할 글꼴 설정을 초기화합니다.

사용자 정의 글꼴 구현

일부 OEM은 브랜드를 표시하기 위해 AOSP에서 글꼴 파일을 설치하거나 교체합니다. Android 12는 이 기능을 지원하지만 기기에서 이모티콘 글꼴을 업데이트 상태로 유지하기 위한 요구 사항을 추가합니다. 이모티콘 글꼴 파일을 수정하거나 업데이트하지 않는 OEM은 이 기능을 사용할 필요가 없습니다.

Google은 GMS Core를 통해 글꼴 파일, 특히 NotoColorEmoji 파일을 업데이트하므로 /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. 다른 이름으로 나만의 NotoColorEmoji 파일을 만드십시오. 예를 들어 이름을 Modified\_NotoColorEmoji.ttf 로 지정합니다.
  2. 원본 NotoColorEmoji.ttf 파일 앞에 놓습니다.

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

  • 이 글꼴에는 필요한 글리프만 있어야 합니다.
  • 수정되지 않은 글리프를 원본 NotoColorEmoji.ttf 파일에 위임하여 장치가 향후 이모티콘 릴리스에서 수정된 디자인을 받을 수 있도록 합니다.

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

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

두부 글리프 만들기: 두부 글리프 ID를 사용하려는 경우 명시적으로 지정할 수 있습니다. glyphID = 0 을 지정하면 관련 앱에서 이를 "글리프를 사용할 수 없음"으로 해석합니다. 예를 들어, 이 속성을 사용하면 Paint#hasGlyph 앱이 false 를 반환합니다.

다른 글꼴 파일 바꾸기 또는 수정

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

글꼴 업데이트는 GMS Core에서 Google에 의해 수행되지만 일반적인 글꼴 업데이트 메커니즘은 모든 OEM에게 열려 있습니다. OEM은 전제 조건 충족 , 글꼴 파일 서명런타임 글꼴 업데이트 만들기 의 단계를 사용하여 추가 글꼴 업데이트 프로그램을 설치할 수 있습니다.

전제 조건 충족

글꼴 업데이트 메커니즘은 fs-verity Linux 커널 기능을 사용합니다. 장치가 fs-verity 와 호환되는지 확인하고 장치에 인증서를 포함하십시오.

글꼴 파일 서명

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

런타임 글꼴 업데이트

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

앱의 업데이터 기능에 UPDATE_FONT signature|privileged 권한을 제공하십시오.