Kể từ Android 15, các phông chữ biến thể sẽ hiển thị ở
hiệu quả và độ chi tiết cao hơn. Với bản cập nhật này, nhà cung cấp phải
thêm cấu hình phông chữ biến đổi mới vào
font_fallback.xml
thay vì fonts.xml
, vì fonts.xml
sẽ không được dùng nữa.
Hãy xem bài viết Hỗ trợ phông chữ thay đổi để biết thêm thông tin.
Trong Android 11 trở xuống, cập nhật các tệp phông chữ được cài đặt trên thiết bị trong AOSP (trong
phân vùng /system/fonts
) hoặc phân vùng nhà cung cấp (trong /product/fonts
hoặc
/system/fonts
) yêu cầu nhà sản xuất thiết bị gốc phải cập nhật hệ thống. Chiến dịch này
có ảnh hưởng đáng kể đến khả năng tương thích của biểu tượng cảm xúc. Ngang bằng
Trên Android 12, bạn có thể sử dụng hệ thống FontManager
dịch vụ quản lý các tệp phông chữ đã cài đặt và cập nhật các tệp phông chữ được cài đặt trên thiết bị
mà không cần cập nhật hệ thống.
Android 12 có 3 hoạt động tương tác với 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ữ chế độ cài đặt phông chữ mới nhất của mỗi người dùng trong hệ thống.
FontUpdater
là trình cập nhật phông chữ có thể cắm được
Kiểm tra quyền signature|privileged
. FontUpdater
giao tiếp với
FontManagerService
để tải, cài đặt, xoá hoặc cập nhật phông chữ hiện tại của hệ thống
phần cài đặt. FontUpdater
có thể truyền nội dung tệp phông chữ mới thông qua quy trình liên quy trình
cơ chế truyền thông (IPC). FontManagerService
lưu nội dung vào
một vị trí lưu trữ dễ đọc trên toàn cầu, chẳng hạn như trong các tệp /data/fonts
. Chiến dịch này
bộ nhớ dữ liệu được bảo vệ. Chỉ FontManagerService
có thể viết mã này, bằng cách
Chính sách SELinux.
Khi lớp Application
chạy, lớp này sẽ chuyển chế độ cài đặt phông chữ của hệ thống dưới dạng
đối số của phương thức bindApplication
; sau đó sẽ khởi chạy chế độ cài đặt phông chữ
để quy trình ứng dụng sử dụng.
Hỗ trợ các phông chữ có thể thay đổi
Kể từ Android 15, các cấu hình phông chữ có thể thay đổi sẽ
được chỉ định trong
font_fallback.xml
bằng cách sử dụng định dạng sau:
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
Ở định dạng này, phông chữ thay đổi có tất cả các thuộc tính của phông chữ tĩnh với
thuộc tính supportedAxes
bổ sung. Thuộc tính supportedAxes
là
danh sách các thẻ trục được hỗ trợ được phân tách bằng dấu phẩy. Bằng
Trên Android 15, chỉ trục wght
và ital
mới có thể
đã chỉ định.
Nếu bạn không chỉ định thuộc tính supportedAxes
, nút font
sẽ hoạt động như một
phông chữ tĩnh của một phiên bản phông chữ biến được chỉ định bằng axis
trẻ em.
Nếu bạn chỉ định thuộc tính supportedAxes
, hệ thống sẽ tự động tạo một thuộc tính
bản sao phông chữ cho giá trị độ đậm và kiểu đã cho trong thời gian chạy.
Nhà phát triển có thể dùng android.graphics.fonts.SystemFonts#getAvailableFonts
API Java hoặc ASystemFontIterator_open
NDK API để lấy danh sách các tệp phông chữ do hệ thống cài đặt. Để biết thông tin về
các API nhà phát triển hỗ trợ bản cập nhật này, hãy xem
API phông chữ biến OpenType đã cải tiến
và buildVariableFamily
.
Tuỳ chỉnh phông chữ
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 thêm để cập nhật phông chữ biểu tượng cảm xúc trên thiết bị. 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 các tệp phông chữ, đặc biệt là các tệp NotoColorEmoji
thông qua GMS
chính yếu, do đó đừng sửa đổi hoặc xoá tệp NotoColorEmoji.ttf
khỏi
Phân vùng /system
và không xoá phân vùng đó khỏi
/frameworks/base/data/fonts/fonts.xml
.
Hãy lưu ý ba cách sau để bạn có thể tuỳ chỉnh phông chữ của mình:
- Thay thế tệp
NotoColorEmoji.ttf
bằng phông chữ biểu tượng cảm xúc mang thương hiệu OEM. - Sửa đổi tệp
NotoColorEmoji.ttf
cho phù hợp với nhu cầu của 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 không sửa đổi phông chữ biểu tượng cảm xúc trong AOSP (Dự án nguồn mở Android) thì bạn không cần làm gì cả. Nếu bạn muốn tuỳ chỉnh phông chữ biểu tượng cảm xúc, hãy làm theo hướng dẫn trong .
Thay thế NotoColorEmoji.ttf bằng phông chữ biểu tượng cảm xúc mang thương hiệu OEM
Cách 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:
đặ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, tên là
OEMCustomEmoji.ttf
, vào phân vùng/system
. Sửa đổi
/frameworks/base/data/fonts/fonts.xml
(và/frameworks/base/data/fonts/font-fallback.xml
inch Android 15 trở lên) như trong 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>
Chỉnh sửa NotoColorEmoji.ttf cho nhu cầu tại thị trường địa phương
Hãy làm theo các bước sau để điều chỉnh cho phù hợp với nhu cầu tại thị trường địa phương của bạn:
- Tạo tệp
NotoColorEmoji
của riêng bạn bằng tên khác; ví dụ: đặt tên nó làModified\_NotoColorEmoji.ttf
. - Đặt tệp này trước tệp
NotoColorEmoji.ttf
gốc.
Sau khi bạn thực hiện bước 2, ký tự đã sửa đổi được hỗ trợ bởi
Modified\NotoColorEmoji.ttf
xuất hiện thay vì NotoColorEmoji.ttf
gốc.
Google đề xuất những việc sau:
- Chỉ có ký tự cần thiết trong phông chữ này.
- Uỷ quyền các ký tự chưa sửa đổi cho tệp
NotoColorEmoji.ttf
ban đầu để thiết bị của bạn sẽ nhận được mọi bản sửa lỗi thiết kế trong các bản phát hành biểu tượng cảm xúc sau này.
Xoá ký tự: Để xoá ký tự khỏi tệp NotoColorEmoji.ttf
, hãy làm theo
bước 1 và 2, đồng thời chỉ định glyph ID = 0
trong cmap của bạn.
Sử dụng cờ khu vực: Nếu ký tự mục tiêu là cờ khu vực, hãy chỉ định
ký tự dưới dạng mã quốc gia không xác định. (Sử dụng country code = "ZZ"
.)
Tạo ký tự trên đậu phụ: Bạn có thể chỉ định rõ mã nhận dạng ký tự đậu phụ nếu muốn
để sử dụng. Khi bạn chỉ định glyphID = 0
, ứng dụng liên quan sẽ diễn giải rằng là
"không có ký tự". Ví dụ: khi bạn sử dụng thuộc tính này, thuộc tính
Ứ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, cách tuỳ chỉnh cũng tương tự như đối với sửa đổi tệp TTF cho phù hợp với nhu cầu của thị trường địa phương. Tệp phông chữ không xác định cập nhật trong AOSP (Dự án nguồn mở Android) tại thời gian chạy sẽ bị bỏ qua và không được cập nhật. Google sẽ bỏ qua phông chữ không xác định trong thiết bị của bạn. Bao gồm cả các tệp phông chữ đã được sửa đổi phông chữ gốc trong AOSP.
Mặc dù việc cập nhật phông chữ do Google thực hiện trong GMS Core, nhưng bản cập nhật phông chữ chung dành 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 phần Điều kiện tiên quyết cho cuộc họp, Ký tệp phông chữ, và Cập nhật phông chữ trong thời gian chạy.
Đáp ứng các điều kiện tiên quyết
Cơ chế cập nhật phông chữ sử dụng tính năng nhân fs-verity
của Linux. Xác minh rằng
thiết bị của bạn tuân thủ fs-verity
và có chứng chỉ này trong thiết bị của bạn.
Ký tệp phông chữ
Vì tệp phông chữ là tài nguyên tiềm ẩn rủi ro, nên bạn phải xác minh các tệp này bằng các khoá đáng tin cậy.
Xem xét kỹ tất cả các tệp phông chữ sẽ được cập nhật và ký bằng
khoá riêng tư. Chữ ký phải tương thích với fs-verity
.
Cập nhật phông chữ trong thời gian chạy
Ứng dụng hệ thống FontManager
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ữ mới nhất của hệ thống và khả năng cập nhật phông chữ
tệp có chữ ký. Để gọi ứng dụng cập nhật, hãy thêm
Quyền của UPDATE_FONT signature|privileged
đối với
danh sách ứng dụng được phép,
và vào tệp kê khai.
Cấp quyền UPDATE_FONT signature|privileged
cho trình cập nhật ứng dụng
.