ตั้งแต่ 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 วิธีดังนี้
- แทนที่ไฟล์
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"
)
สร้างสัญลักษณ์ 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
แก่ฟังก์ชันโปรแกรมอัปเดตของแอป