맞춤 글꼴 구현

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 반환합니다.

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

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

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

전제 조건 충족

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

글꼴 파일 서명

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

런타임 글꼴 업데이트

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

앱의 업데이트 기능에 UPDATE_FONT signature|privileged 권한을 제공하세요.