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

ตั้งแต่ 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 children

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

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

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

ผู้ผลิตอุปกรณ์บางรายติดตั้งหรือแทนที่ไฟล์แบบอักษรใน 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")

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

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

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

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

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

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

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

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

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

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

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