ใน 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
ต้นฉบับ เพื่อให้อุปกรณ์ของคุณได้รับการแก้ไขการออกแบบใดๆ ที่เกิดขึ้นในการเปิดตัวอีโมจิในอนาคต
ลบร่ายมนตร์: ในการลบร่ายมนตร์ออกจากไฟล์ NotoColorEmoji.ttf
ให้ทำตามขั้นตอนที่ 1 และ 2 และระบุ glyph ID = 0
ใน cmap ของคุณ
ใช้แฟล็กภูมิภาค: หากสัญลักษณ์เป้าหมายเป็นแฟล็กภูมิภาค ให้ระบุ ID สัญลักษณ์เป็นรหัสประเทศที่ไม่รู้จัก (ใช้ country code = "ZZ"
.)
สร้างสัญลักษณ์เต้าหู้: คุณสามารถระบุรหัสสัญลักษณ์เต้าหู้ได้อย่างชัดเจนหากต้องการใช้ เมื่อคุณระบุ glyphID = 0
แอปที่เกี่ยวข้องจะตีความว่าเป็น "สัญลักษณ์ไม่พร้อมใช้งาน" ตัวอย่างเช่น เมื่อคุณใช้แอตทริบิวต์นี้ แอป Paint#hasGlyph
จะส่งกลับ false
แทนที่หรือแก้ไขไฟล์ฟอนต์อื่นๆ
หากต้องการแทนที่หรือแก้ไขฟอนต์อื่นๆ การปรับแต่งจะคล้ายกับการแก้ไขไฟล์ TTF สำหรับความต้องการของตลาดในท้องถิ่น ไฟล์ฟอนต์ที่ไม่รู้จักซึ่งอัปเดตใน 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
สำหรับฟังก์ชันตัวอัปเดตแอปของคุณ