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
파일과 같이 누구나 읽을 수 있는 저장소 위치에 콘텐츠를 저장합니다. 이 저장소는 보호됩니다. SELinux 정책에 따라 FontManagerService
로만 작성할 수 있습니다.
Application
클래스가 실행되면 시스템 글꼴 설정을 bindApplication
메서드의 인수로 전달합니다. 그런 다음 애플리케이션 프로세스에서 사용할 글꼴 설정을 초기화합니다.
맞춤 글꼴 구현
일부 OEM은 브랜드가 표시되도록 AOSP에서 글꼴 파일을 설치하거나 대체합니다. Android 12에서는 이 기능을 지원하지만 기기에서 그림 이모티콘 글꼴이 계속 업데이트되도록 요구사항을 추가합니다. 그림 이모티콘 글꼴 파일을 수정하거나 업데이트하지 않는 OEM은 이 기능을 사용하지 않아도 됩니다.
Google에서는 글꼴 파일, 특히 NotoColorEmoji
파일을 GMS 코어를 통해 업데이트하므로 /system
파티션에서 NotoColorEmoji.ttf
파일을 수정하거나 삭제하지 말고 /system/etc/fonts.xml
에서도 삭제하지 마세요. 글꼴을 맞춤설정할 수 있는 다음 세 가지 방법을 확인하세요.
NotoColorEmoji.ttf
파일을 OEM 브랜드 그림 이모티콘 글꼴로 바꿉니다.- 현지 시장 요구에 맞게
NotoColorEmoji.ttf
파일을 수정합니다. - 기타 글꼴 파일을 바꾸거나 수정합니다.
AOSP에서 그림 이모티콘 글꼴을 수정하지 않는 경우 아무런 작업을 하지 않아도 됩니다. 그림 이모티콘 글꼴을 맞춤설정하려는 경우 다음 섹션의 안내를 따르세요.
NotoColorEmoji.ttf를 OEM 브랜드 그림 이모티콘 글꼴로 대체
NotoColorEmoji.ttf
파일을 OEM 브랜드 그림 이모티콘 글꼴 파일로 바꾸려면 글꼴 대체 체인 바로 앞에 그림 이모티콘 글꼴을 배치합니다.
/system
파티션에OEMCustomEmoji.ttf
라는 자체 글꼴을 배치합니다.다음 코드와 같이
/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 수정
다음 단계를 따라 현지 시장 요구에 맞게 맞춤설정합니다.
- 다른 이름(예:
Modified\_NotoColorEmoji.ttf
)으로 자체NotoColorEmoji
파일을 만듭니다. - 원본
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
권한을 앱의 업데이터 함수에 제공합니다.