Triển khai phông chữ tuỳ chỉnh

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. Trong 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 UpdaterApplication.

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.

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 /system và không xoá phân vùng đó khỏi /system/etc/fonts.xml. Lưu ý sau đây để giúp bạn tuỳ chỉnh phông chữ của mình:

  1. 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.
  2. 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.
  3. 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ữ:

  1. Đặt phông chữ của riêng bạn, tên là OEMCustomEmoji.ttf, vào phân vùng /system.
  2. Sửa đổi /system/etc/fonts.xml 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:

  1. Tạo tệp NotoColorEmoji của riêng bạn bằng tên khác; ví dụ: đặt tên tệp là Modified\_NotoColorEmoji.ttf.
  2. Đặ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 chữ tượng hình đậu phụ: Bạn có thể chỉ định rõ mã nhận dạng hình ảnh đậ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 FontManger 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 các tệp phông chữ có chữ ký. Để gọi ứng dụng cập nhật, hãy thêm UPDATE_FONT signature|privileged quyền đối với danh sách cho phép ứng dụng của bạn, 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 .