Trong Android 11 trở xuống, việc cập nhật tệp phông chữ do thiết bị cài đặt trong AOSP (trong phân vùng /system/fonts
) hoặc phân vùng nhà cung cấp (trong phân vùng /product/fonts
hoặc /system/fonts
) yêu cầu cập nhật hệ thống từ OEM. Yêu cầu này có tác động đáng kể đến khả năng tương thích của biểu tượng cảm xúc. Trong Android 12, bạn có thể sử dụng dịch vụ hệ thống FontManager
để quản lý các tệp phông chữ đã cài đặt và cập nhật tệp phông chữ do thiết bị cài đặt mà không cần cập nhật hệ thống.
Android 12 có ba tương tác quy trình; FontManagerService
, Font Updater
và Application
.
FontManagerService
là hệ thống quản lý trung tâm trong máy chủ hệ thống. FontManagerService
lưu trữ các cài đặt phông chữ hệ thống mới nhất cho mỗi người dùng.
FontUpdater
là một trình cập nhật phông chữ có thể cắm được, được tin cậy bởi một kiểm tra signature|privileged
FontUpdater
giao tiếp với FontManagerService
để lấy, cài đặt, xóa hoặc cập nhật cài đặt phông chữ hệ thống hiện tại. FontUpdater
có thể chuyển nội dung tệp phông chữ mới bằng cơ chế giao tiếp giữa các quá trình (IPC). FontManagerService
lưu nội dung vào vị trí lưu trữ có thể đọc được trên thế giới, chẳng hạn như trong tệp /data/fonts
. Kho lưu trữ này được bảo vệ. Nó chỉ có thể được viết bởi FontManagerService
, bởi chính sách SELinux.
Khi lớp Application
khởi chạy, nó chuyển cài đặt phông chữ hệ thống làm đối số của phương thức bindApplication
; sau đó nó khởi tạo cài đặt phông chữ để sử dụng bởi quá trình ứng dụng.
Triển khai phông chữ tùy chỉnh
Một số OEM cài đặt hoặc thay thế các tệp phông chữ trong AOSP để hiển thị thương hiệu của họ. Android 12 hỗ trợ chức năng này nhưng bổ sung thêm các yêu cầu để luôn cập nhật phông chữ biểu tượng cảm xúc trong các thiết bị. Các OEM không sửa đổi hoặc cập nhật tệp phông chữ biểu tượng cảm xúc không cần sử dụng tính năng này.
Google cập nhật tệp phông chữ, đặc biệt là tệp NotoColorEmoji
thông qua GMS Core, vì vậy, không sửa đổi hoặc xóa tệp NotoColorEmoji.ttf
khỏi phân vùng /system
và không xóa tệp khỏi /system/etc/fonts.xml
. Lưu ý ba cách sau để bạn có thể tùy chỉnh phông chữ của mình:
- Thay thế tệp
NotoColorEmoji.ttf
bằng một phông chữ biểu tượng cảm xúc có thương hiệu OEM. - Sửa đổi tệp
NotoColorEmoji.ttf
nhu cầu thị trường địa phương của bạn. - Thay thế hoặc sửa đổi các tệp phông chữ khác.
Nếu bạn không sửa đổi phông chữ biểu tượng cảm xúc trong AOSP, bạn không cần thực hiện hành động. Nếu bạn muốn tùy chỉnh phông chữ biểu tượng cảm xúc, hãy sử dụng hướng dẫn trong các phần sau.
Thay thế NotoColorEmoji.ttf bằng phông chữ biểu tượng cảm xúc có thương hiệu OEM
Để thay thế tệp NotoColorEmoji.ttf
bằng tệp phông chữ biểu tượng cảm xúc mang thương hiệu OEM của bạn, hãy đặt phông chữ biểu tượng cảm xúc ngay trước chuỗi dự phòng phông chữ:
- Đặt phông chữ của riêng bạn, được gọi là
OEMCustomEmoji.ttf
, trong phân vùng/system
. Sửa đổi
/system/etc/fonts.xml
như trong đoạn mã sau:<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>
Sửa đổi NotoColorEmoji.ttf cho nhu cầu thị trường địa phương
Thực hiện theo các bước sau để tùy chỉnh cho nhu cầu thị trường địa phương của bạn:
- Tạo tệp
NotoColorEmoji
của riêng bạn với một tên khác; chẳng hạn, đặt tên làModified\_NotoColorEmoji.ttf
. - Đặt nó trước tệp
NotoColorEmoji.ttf
gốc.
Sau khi bạn thực hiện bước 2, glyph đã sửa đổi được Modified\NotoColorEmoji.ttf
hỗ trợ sẽ hiển thị thay vì NotoColorEmoji.ttf
ban đầu. Google đề xuất những điều sau:
- Chỉ có glyph cần thiết trong phông chữ này.
- Ủy quyền các glyph chưa sửa đổi cho tệp
NotoColorEmoji.ttf
gốc để thiết bị của bạn nhận được bất kỳ bản sửa lỗi thiết kế nào được thực hiện trong các bản phát hành biểu tượng cảm xúc trong tương lai.
Xóa glyph: Để xóa glyph khỏi tệp NotoColorEmoji.ttf
, hãy làm theo các bước 1 và 2 và chỉ định glyph ID = 0
trong cmap của bạn.
Sử dụng cờ khu vực: Nếu glyph đích là cờ khu vực, hãy chỉ định ID glyph làm mã quốc gia không xác định. (Sử dụng country code = "ZZ"
.)
Tạo glyph đậu phụ: Bạn có thể chỉ định rõ ràng ID glyph đậu phụ nếu bạn muốn sử dụng. Khi bạn chỉ định glyphID = 0
, ứng dụng liên quan sẽ hiểu rằng "glyph không khả dụng". Ví dụ: khi bạn sử dụng thuộc tính này, ứng dụng Paint#hasGlyph
trả về false
.
Thay thế hoặc sửa đổi các tệp phông chữ khác
Để thay thế hoặc sửa đổi các phông chữ khác, tùy chỉnh tương tự như để sửa đổi các tệp tff
cho nhu cầu thị trường địa phương. Các tệp phông chữ không xác định được cập nhật trong AOSP lúc chạy sẽ bị bỏ qua và không được cập nhật. Google bỏ qua các phông chữ không xác định trong thiết bị của bạn. Điều này bao gồm các tệp phông chữ đã được sửa đổi từ phông chữ gốc trong AOSP.
Mặc dù cập nhật phông chữ được Google thực hiện trong GMS Core, cơ chế cập nhật phông chữ chung được mở cho tất cả OEM. OEM có thể cài đặt trình cập nhật phông chữ bổ sung bằng cách sử dụng các bước trong Điều kiện tiên quyết cuộc họp , Ký tệp phông chữ và Thực hiện cập nhật phông chữ trong thời gian chạy .
Điều kiện tiên quyết đáp ứng
Cơ chế cập nhật phông chữ sử dụng tính năng nhân Linux fs-verity
. Xác minh rằng thiết bị của bạn tuân thủ fs-verity
và đưa chứng chỉ vào thiết bị của bạn.
Ký tệp phông chữ
Vì tệp phông chữ là tài nguyên rủi ro, chúng phải được xác minh bằng các khóa đáng tin cậy. Xem xét cẩn thận tất cả các tệp phông chữ sẽ được cập nhật và ký bằng khóa cá nhân của bạn. Chữ ký phải tương thích với fs-verity
.
Cập nhật phông chữ thời gian chạy
Ứng dụng Hệ thống FontManger
thực hiện cập nhật phông chữ. Ứng dụng FontManager
cung cấp trạng thái phông chữ hệ thống được cài đặt mới nhất và khả năng cập nhật tệp phông chữ có chữ ký. Để gọi các ứng dụng cập nhật, hãy thêm UPDATE_FONT signature|privileged
quyền vào danh sách cho phép ứng dụng của bạn và vào tệp kê khai của bạn .
Cung cấp UPDATE_FONT signature|privileged
cho chức năng trình cập nhật ứng dụng của bạn.