ตั้งแต่ 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 วิธีต่อไปนี้
- แทนที่ไฟล์
NotoColorEmoji.ttf
ด้วยแบบอักษรอีโมจิที่มีการสร้างแบรนด์ OEM - แก้ไขไฟล์
NotoColorEmoji.ttf
ให้ตรงกับความต้องการของตลาดท้องถิ่น - แทนที่หรือแก้ไขไฟล์แบบอักษรอื่นๆ
หากไม่ได้แก้ไขแบบอักษรอีโมจิใน AOSP คุณก็ไม่จำเป็นต้องดำเนินการใดๆ หาก ต้องการปรับแต่งแบบอักษรอีโมจิ ให้ทำตามวิธีการในส่วนต่อไปนี้
แทนที่ NotoColorEmoji.ttf ด้วยแบบอักษรอีโมจิที่มีการสร้างแบรนด์ OEM
หากต้องการแทนที่ไฟล์ NotoColorEmoji.ttf
ด้วยไฟล์แบบอักษรอีโมจิที่มีการสร้างแบรนด์ OEM
ให้วางแบบอักษรอีโมจิไว้ก่อนเชนการสำรองแบบอักษร
- วางแบบอักษรของคุณเองที่ชื่อ
OEMCustomEmoji.ttf
ในพาร์ติชัน/system
แก้ไข
/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 ให้เหมาะกับความต้องการของตลาดท้องถิ่น
ทำตามขั้นตอนต่อไปนี้เพื่อปรับแต่งให้เหมาะกับความต้องการของตลาดในพื้นที่
- สร้างไฟล์
NotoColorEmoji
ของคุณเองโดยใช้ชื่ออื่น เช่น ตั้งชื่อเป็นModified\_NotoColorEmoji.ttf
- วางไว้ก่อนไฟล์
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
สิทธิ์ให้กับฟังก์ชันตัวอัปเดตของแอป