ใช้แบบอักษรที่กำหนดเอง

ตั้งแต่ Android 15 เป็นต้นไป ระบบจะแสดงผลแบบอักษรแบบแปรผันขณะรันไทม์อย่างมีประสิทธิภาพและละเอียดยิ่งขึ้น การอัปเดตนี้ทําให้ผู้ให้บริการต้องเพิ่มการกําหนดค่าแบบอักษรตัวแปรใหม่ใน font_fallback.xml แทน fonts.xml เนื่องจากจะเลิกใช้งาน fonts.xml ดูข้อมูลเพิ่มเติมได้ที่การรองรับแบบอักษรแบบผันแปร

ใน Android 11 และต่ำกว่า การอัปเดตไฟล์แบบอักษรที่ติดตั้งในอุปกรณ์ใน AOSP (ในพาร์ติชัน /system/fonts) หรือพาร์ติชันของผู้ให้บริการ (ในพาร์ติชัน /product/fonts หรือ /system/fonts) จะต้องทำการอัปเดตระบบจาก OEM ข้อกำหนดนี้ส่งผลอย่างมากต่อความเข้ากันได้ของอีโมจิ ใน Android 12 คุณสามารถใช้FontManagerบริการของระบบเพื่อจัดการไฟล์แบบอักษรที่ติดตั้งไว้และอัปเดตไฟล์แบบอักษรที่ติดตั้งในอุปกรณ์ได้โดยไม่ต้องอัปเดตระบบ

Android 12 มีการโต้ตอบกระบวนการ 3 กระบวนการ ได้แก่ FontManagerService, Font Updater และ Application

FontManagerService เป็นระบบการจัดการส่วนกลางในเซิร์ฟเวอร์ระบบ FontManagerService จะจัดเก็บการตั้งค่าแบบอักษรของระบบต่อผู้ใช้ล่าสุด

FontUpdater เป็นเครื่องมืออัปเดตแบบอักษรที่เสียบได้ ซึ่งได้รับความไว้วางใจจากการตรวจสอบสิทธิ์ของ signature|privileged FontUpdater จะสื่อสารกับ FontManagerService เพื่อรับ ติดตั้ง นำออก หรืออัปเดตการตั้งค่าแบบอักษรของระบบปัจจุบัน FontUpdater สามารถส่งเนื้อหาไฟล์แบบอักษรใหม่โดยกลไกการสื่อสารระหว่างกระบวนการ (IPC) FontManagerService จะบันทึกเนื้อหาไว้ในตำแหน่งพื้นที่เก็บข้อมูลที่อ่านได้ทั่วโลก เช่น ในไฟล์ /data/fonts พื้นที่เก็บข้อมูลนี้มีการรักษาความปลอดภัย เขียนได้โดย FontManagerService เท่านั้นโดยนโยบาย SELinux

เมื่อคลาส Application เปิดขึ้น ระบบจะส่งการตั้งค่าแบบอักษรของระบบเป็นอาร์กิวเมนต์ของเมธอด bindApplication จากนั้นจะเริ่มการตั้งค่าแบบอักษรสำหรับการใช้งานโดยกระบวนการของแอป

รองรับแบบอักษรที่หลากหลาย

ตั้งแต่ Android 15 เป็นต้นไป การกําหนดค่าแบบอักษรแบบแปรผันจะระบุใน font_fallback.xml โดยใช้รูปแบบต่อไปนี้

<family lang="und-Ethi" supportedAxes="wght,ital">
    <font>NotoSansEthiopic-VF.ttf</font>
</family>

ในรูปแบบนี้ แบบอักษรตัวแปรจะมีแอตทริบิวต์ทั้งหมดของแบบอักษรแบบคงที่ที่มีแอตทริบิวต์ supportedAxes เพิ่มเติม แอตทริบิวต์ supportedAxes คือรายการแท็กแกนที่รองรับซึ่งคั่นด้วยคอมมา ใน Android 15 คุณจะระบุได้เฉพาะแกน wght และ ital

หากไม่ได้ระบุแอตทริบิวต์ supportedAxes โหนด font จะทำงานเป็นแบบอักษรแบบคงที่ของแบบอักษรตัวแปรเดียวซึ่งระบุด้วยย่อย axis

หากระบุแอตทริบิวต์ supportedAxes ระบบจะสร้างอินสแตนซ์แบบอักษรแบบไดนามิกสำหรับค่าน้ำหนักและสไตล์ที่ระบุไว้ในขณะรันไทม์

นักพัฒนาแอปสามารถใช้ android.graphics.fonts.SystemFonts#getAvailableFonts Java API หรือ ASystemFontIterator_open NDK API เพื่อรับรายการไฟล์แบบอักษรที่ระบบติดตั้ง ดูข้อมูลเกี่ยวกับ API ของนักพัฒนาซอฟต์แวร์ที่รองรับการอัปเดตนี้ที่หัวข้อ API แบบอักษร OpenType Variable ที่ได้รับการปรับปรุงและ buildVariableFamily

ปรับแต่งแบบอักษร

OEM บางรายติดตั้งหรือแทนที่ไฟล์แบบอักษรใน AOSP เพื่อแสดงแบรนด์ของตน Android 12 รองรับฟังก์ชันการทำงานนี้ แต่เพิ่มข้อกำหนดในการอัปเดตแบบอักษรอีโมจิในอุปกรณ์อยู่เสมอ OEM ที่ไม่แก้ไขหรืออัปเดตไฟล์แบบอักษรอีโมจิไม่จำเป็นต้องใช้ฟีเจอร์นี้

Google จะอัปเดตไฟล์แบบอักษร โดยเฉพาะไฟล์ NotoColorEmoji ผ่าน GMS Core ดังนั้นอย่าแก้ไขหรือนำไฟล์ NotoColorEmoji.ttf ออกจากพาร์ติชัน /system และอย่านำออกจาก /frameworks/base/data/fonts/fonts.xml โปรดทราบว่าคุณปรับแต่งแบบอักษรได้ 3 วิธีดังนี้

  1. แทนที่ไฟล์ NotoColorEmoji.ttf ด้วยแบบอักษรอีโมจิที่มีแบรนด์ OEM
  2. แก้ไขไฟล์ NotoColorEmoji.ttf เพื่อตอบสนองความต้องการของตลาดในพื้นที่
  3. แทนที่หรือแก้ไขไฟล์แบบอักษรอื่นๆ

หากคุณไม่ได้แก้ไขแบบอักษรอีโมจิใน AOSP คุณก็ไม่ต้องดำเนินการใดๆ หากต้องการปรับแต่งแบบอักษรอีโมจิ ให้ทำตามวิธีการในส่วนต่อไปนี้

แทนที่ NotoColorEmoji.ttf ด้วยแบบอักษรอีโมจิที่เป็นแบรนด์ OEM

หากต้องการแทนที่ไฟล์ NotoColorEmoji.ttf ด้วยไฟล์แบบอักษรอีโมจิของแบรนด์ OEM ให้ใส่แบบอักษรอีโมจิไว้หน้าเชนแบบอักษรสำรอง ดังนี้

  1. วางแบบอักษรของคุณเองซึ่งเรียกว่า OEMCustomEmoji.ttf ในพาร์ติชัน /system
  2. แก้ไข /frameworks/base/data/fonts/fonts.xml (และ /frameworks/base/data/fonts/font-fallback.xml ใน Android 15 ขึ้นไป) ตามในโค้ดต่อไปนี้

    <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 แล้ว สัญลักษณ์ที่แก้ไขแล้วซึ่ง Modified\NotoColorEmoji.ttf รองรับจะแสดงแทน NotoColorEmoji.ttf เดิม Google ขอแนะนําให้ทําดังนี้

  • มีรูปอักขระที่จำเป็นในแบบอักษรนี้เท่านั้น
  • มอบสิทธิ์รูปอักขระที่ยังไม่ได้แก้ไขไปยังไฟล์ NotoColorEmoji.ttf ต้นฉบับเพื่อให้อุปกรณ์ได้รับการแก้ไขการออกแบบที่จะมีการเปิดตัวอีโมจิในอนาคต

นำรูปอักขระออก: หากต้องการนำรูปอักขระออกจากไฟล์ NotoColorEmoji.ttf ให้ทำตามขั้นตอนที่ 1 และ 2 และระบุ glyph ID = 0 ใน cmap

ใช้ธงประจำภูมิภาค: หากรูปอักขระเป้าหมายเป็นธงประจำภูมิภาค ให้ระบุรหัสรูปอักขระเป็นรหัสประเทศที่ไม่รู้จัก (ใช้ country code = "ZZ")

สร้างกลีฟ Tofu: คุณสามารถระบุรหัสกลีฟ Tofu อย่างชัดเจนได้หากต้องการใช้ เมื่อคุณระบุ glyphID = 0 แอปที่เกี่ยวข้องจะตีความว่า "รูปอักขระไม่พร้อมใช้งาน" เช่น เมื่อใช้แอตทริบิวต์นี้ แอป Paint#hasGlyph จะแสดงผล false

แทนที่หรือแก้ไขไฟล์แบบอักษรอื่นๆ

หากต้องการแทนที่หรือแก้ไขแบบอักษรอื่นๆ การปรับแต่งจะคล้ายกับการปรับแต่งไฟล์ TTF เพื่อตอบสนองความต้องการของตลาดท้องถิ่น ระบบจะไม่สนใจไฟล์แบบอักษรที่ไม่รู้จักและอัปเดตใน AOSP ขณะรันไทม์ และจะไม่มีการอัปเดต โดย Google จะไม่สนใจแบบอักษร ที่ไม่รู้จักในอุปกรณ์ของคุณ ซึ่งรวมถึงไฟล์แบบอักษรที่แก้ไขมาจากแบบอักษรต้นฉบับใน AOSP

แม้ว่า Google จะเป็นผู้อัปเดตแบบอักษรใน GMS Core แต่กลไกการอัปเดตแบบอักษรทั่วไปนั้นเปิดให้ผู้ OEM ทั้งหมดเข้าถึงได้ OEM สามารถติดตั้งโปรแกรมอัปเดตแบบอักษรเพิ่มเติมโดยทำตามขั้นตอนในข้อกำหนดเบื้องต้นของการประชุม การเซ็นไฟล์แบบอักษร และการอัปเดตแบบอักษรรันไทม์

มีคุณสมบัติตรงตามข้อกําหนดเบื้องต้น

กลไกการอัปเดตแบบอักษรใช้ฟีเจอร์ fs-verity Linux Kernel ตรวจสอบว่าอุปกรณ์เป็นไปตามข้อกำหนดของ fs-verity และใส่ใบรับรองไว้ในอุปกรณ์

ลงนามไฟล์แบบอักษร

เนื่องจากไฟล์แบบอักษรเป็นทรัพยากรที่มีความเสี่ยง จึงต้องยืนยันด้วยคีย์ที่เชื่อถือได้ ตรวจสอบไฟล์แบบอักษรทั้งหมดที่จะอัปเดตอย่างละเอียดและลงนามด้วยคีย์ส่วนตัว ลายเซ็นต้องเข้ากันได้กับ fs-verity

อัปเดตแบบอักษรแบบรันไทม์

แอประบบ FontManager จะอัปเดตแบบอักษร แอป FontManager จะแสดงสถานะแบบอักษรของระบบที่ติดตั้งล่าสุด และความสามารถในการอัปเดตไฟล์แบบอักษรที่มีลายเซ็น หากต้องการเรียกใช้แอปอัปเดตแอป ให้เพิ่มสิทธิ์ UPDATE_FONT signature|privileged ลงในรายการที่อนุญาตของแอป และเพิ่มไปยังไฟล์ Manifest

ให้สิทธิ์ UPDATE_FONT signature|privileged ในฟังก์ชันโปรแกรมอัปเดตของแอป