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