ใน Android 11 และต่ำกว่า การอัปเดตไฟล์ฟอนต์ที่ติดตั้งอุปกรณ์ใน AOSP (ในพาร์ติชั่น /system/fonts
) หรือพาร์ติชั่นผู้จำหน่าย (ในพาร์ติชั่น /product/fonts
หรือ /system/fonts
) จำเป็นต้องมีการอัปเดตระบบจาก OEM ข้อกำหนดนี้มีผลกระทบอย่างมากต่อความเข้ากันได้ของอีโมจิ ใน Android 12 คุณสามารถใช้บริการระบบ FontManager
เพื่อจัดการไฟล์ฟอนต์ที่ติดตั้งและอัปเดตไฟล์ฟอนต์ที่ติดตั้งในอุปกรณ์โดยไม่ต้องอัปเดตระบบ
Android 12 มีปฏิสัมพันธ์สามกระบวนการ FontManagerService
, Font Updater
และ Application
FontManagerService
เป็นระบบการจัดการส่วนกลางในเซิร์ฟเวอร์ระบบ FontManagerService
เก็บการตั้งค่าแบบอักษรของระบบต่อผู้ใช้ล่าสุด
FontUpdater
เป็นตัวอัปเดตฟอนต์แบบเสียบได้ที่ได้รับความไว้วางใจจาก signature|privileged
การตรวจสอบสิทธิ์พิเศษ FontUpdater
สื่อสารกับ FontManagerService
เพื่อรับ ติดตั้ง ลบ หรืออัปเดตการตั้งค่าแบบอักษรของระบบปัจจุบัน FontUpdater
สามารถส่งผ่านเนื้อหาไฟล์ฟอนต์ใหม่โดยกลไกการสื่อสารระหว่างกระบวนการ (IPC) FontManagerService
บันทึกเนื้อหาไปยังตำแหน่งที่เก็บข้อมูลที่สามารถอ่านได้ทั่วโลก เช่น ในไฟล์ /data/fonts
ที่เก็บข้อมูลนี้ได้รับการปกป้อง สามารถเขียนได้โดย FontManagerService
เท่านั้น โดยนโยบาย SELinux
เมื่อเปิดคลาส Application
มันจะส่งผ่านการตั้งค่าแบบอักษรของระบบเป็นอาร์กิวเมนต์ของเมธอด bindApplication
จากนั้นจะเริ่มต้นการตั้งค่าแบบอักษรเพื่อใช้โดยขั้นตอนการสมัคร
การใช้แบบอักษรที่กำหนดเอง
OEM บางรายติดตั้งหรือแทนที่ไฟล์ฟอนต์ใน AOSP เพื่อแสดงแบรนด์ของตน Android 12 รองรับฟังก์ชันนี้ แต่เพิ่มข้อกำหนดเพื่อให้แบบอักษรอิโมจิอัปเดตอยู่เสมอในอุปกรณ์ OEM ที่ไม่แก้ไขหรืออัปเดตไฟล์ฟอนต์อิโมจิไม่จำเป็นต้องใช้คุณสมบัตินี้
Google อัปเดตไฟล์ฟอนต์ โดยเฉพาะไฟล์ NotoColorEmoji
ผ่าน GMS Core ดังนั้นอย่าแก้ไขหรือลบไฟล์ NotoColorEmoji.ttf
ออกจากพาร์ติชั่น /system
และอย่าลบออกจาก /system/etc/fonts.xml
สังเกตสามวิธีต่อไปนี้ในการ ปรับแต่ง ฟอนต์ของคุณ:
- แทนที่ไฟล์
NotoColorEmoji.ttf
ด้วยฟอนต์อีโมจิแบรนด์ OEM - แก้ไขไฟล์
NotoColorEmoji.ttf
สำหรับความต้องการของตลาดในพื้นที่ของคุณ - แทนที่หรือแก้ไขไฟล์ฟอนต์อื่นๆ
หากคุณไม่ได้แก้ไขฟอนต์อิโมจิใน AOSP คุณไม่จำเป็นต้องดำเนินการใดๆ หากคุณต้องการปรับแต่งฟอนต์อีโมจิ ให้ใช้คำแนะนำในหัวข้อต่อไปนี้
การแทนที่ NotoColorEmoji.ttf ด้วยแบบอักษรอีโมจิแบรนด์ OEM
ในการแทนที่ไฟล์ NotoColorEmoji.ttf
ด้วยไฟล์ฟอนต์อีโมจิแบรนด์ OEM ของคุณ ให้วางฟอนต์อิโมจิไว้ข้างหน้าฟอนต์สำรองของฟอนต์:
- วางแบบอักษรของคุณเองที่เรียกว่า
OEMCustomEmoji.ttf
ในพาร์ติชั่น/system
แก้ไข
/system/etc/fonts.xml
ตามโค้ดต่อไปนี้:<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
ดั้งเดิม เพื่อให้อุปกรณ์ของคุณได้รับการแก้ไขการออกแบบที่ทำในอีโมจิที่ออกในอนาคต
Remove glyphs: ในการลบ glyphs จากไฟล์ NotoColorEmoji.ttf
ให้ทำตามขั้นตอนที่ 1 และ 2 และระบุ glyph ID = 0
ใน cmap ของคุณ
ใช้ธงประจำภูมิภาค: หากสัญลักษณ์เป้าหมายเป็นธงประจำภูมิภาค ให้ระบุรหัสสัญลักษณ์เป็นรหัสประเทศที่ไม่รู้จัก (ใช้ country code = "ZZ"
.)
สร้างสัญลักษณ์เต้าหู้: คุณสามารถระบุรหัสสัญลักษณ์เต้าหู้ได้อย่างชัดเจนหากต้องการใช้ เมื่อคุณระบุ glyphID = 0
แอพที่เกี่ยวข้องจะตีความว่าเป็น “glyph is not available” ตัวอย่างเช่น เมื่อคุณใช้แอตทริบิวต์นี้ แอป Paint#hasGlyph
จะคืนค่า false
แทนที่หรือแก้ไขไฟล์ฟอนต์อื่นๆ
ในการแทนที่หรือแก้ไขฟอนต์อื่น การปรับแต่งจะคล้ายกับการปรับแต่งไฟล์ tff
สำหรับความต้องการของตลาดท้องถิ่น ไฟล์ฟอนต์ที่ไม่รู้จักซึ่งอัปเดตใน AOSP เมื่อรันไทม์จะถูกละเว้น และจะไม่อัปเดต Google ละเว้นแบบอักษรที่ไม่รู้จักในอุปกรณ์ของคุณ ซึ่งรวมถึงไฟล์ฟอนต์ที่ดัดแปลงจากฟอนต์ดั้งเดิมใน AOSP
แม้ว่าการอัปเดตแบบอักษรจะทำโดย Google ใน GMS Core แต่กลไกการอัปเดตแบบอักษรทั่วไปนั้นเปิดให้ OEM ทั้งหมด OEM สามารถติดตั้งตัวอัปเดตฟอนต์เพิ่มเติมได้โดยใช้ขั้นตอนใน ข้อกำหนดเบื้องต้นของการประชุม เซ็นไฟล์ฟอนต์ และ อัปเดตฟอนต์รันไทม์
ข้อกำหนดเบื้องต้นในการประชุม
กลไกการอัพเดตฟอนต์ใช้คุณลักษณะเคอร์เนล fs-verity
Linux ตรวจสอบว่าอุปกรณ์ของคุณเป็นไปตามข้อกำหนด fs-verity
และรวมใบรับรองไว้ในอุปกรณ์ของคุณ
เซ็นชื่อไฟล์ฟอนต์
เนื่องจากไฟล์ฟอนต์เป็นทรัพยากรที่มีความเสี่ยง จึงต้องตรวจสอบด้วยคีย์ที่เชื่อถือได้ ตรวจสอบไฟล์ฟอนต์ทั้งหมดที่จะอัปเดตอย่างระมัดระวัง และเซ็นชื่อด้วยคีย์ส่วนตัวของคุณ ลายเซ็นต้องเข้ากันได้กับ fs-verity
อัปเดตฟอนต์รันไทม์
แอป FontManger
System ทำการอัปเดตแบบอักษร แอป FontManager
ให้สถานะแบบอักษรของระบบที่ติดตั้งล่าสุดและความสามารถในการอัปเดตไฟล์แบบอักษรด้วยลายเซ็น หากต้องการเรียกอัปเดตแอป ให้เพิ่ม UPDATE_FONT signature|privileged
ไปยังรายการที่อนุญาตของ แอป และ ในไฟล์ Manifest ของคุณ
ระบุ UPDATE_FONT signature|privileged
สำหรับฟังก์ชันตัวอัปเดตแอปของคุณ