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

ตั้งแต่ 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 ของนักพัฒนาซอฟต์แวร์ที่รองรับการอัปเดตนี้ได้ที่ OpenType Variable Font API ที่ปรับปรุงใหม่และ 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 แก่ฟังก์ชันโปรแกรมอัปเดตของแอป