ใช้แบบอักษรที่กำหนดเอง

ตั้งแต่ 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 ตัวแปรที่ได้รับการปรับปรุง และ buildVariableFamily

ปรับแต่งแบบอักษร

OEM บางรายจะติดตั้งหรือแทนที่ไฟล์แบบอักษรใน AOSP เพื่อแสดงแบรนด์ของตน Android 12 รองรับฟังก์ชันนี้ แต่เพิ่ม ข้อกำหนดอื่นๆ เพื่ออัปเดตแบบอักษรอีโมจิในอุปกรณ์อยู่เสมอ OEM ที่ไม่ดัดแปลงหรือ อัปเดตไฟล์แบบอักษรอีโมจิไม่จำเป็นต้องใช้ฟีเจอร์นี้

Google อัปเดตไฟล์แบบอักษร โดยเฉพาะไฟล์ NotoColorEmoji ผ่าน GMS หลัก ดังนั้นห้ามแก้ไขหรือนำไฟล์ NotoColorEmoji.ttf ออกจาก /system พาร์ติชัน และอย่านําออก /frameworks/base/data/fonts/fonts.xml ดูวิธีปรับแต่งแบบอักษรได้ 3 วิธีต่อไปนี้

  1. แทนที่ไฟล์ NotoColorEmoji.ttf ด้วยแบบอักษรอีโมจิแบรนด์ OEM
  2. แก้ไขไฟล์ NotoColorEmoji.ttf ตามความต้องการของตลาดท้องถิ่น
  3. แทนที่หรือแก้ไขไฟล์แบบอักษรอื่นๆ

หากคุณไม่ได้แก้ไขแบบอักษรอีโมจิใน AOSP คุณก็ไม่ต้องดำเนินการใดๆ ถ้า ที่ต้องการปรับแต่งแบบอักษรอีโมจิ โปรดใช้วิธีการดังต่อไปนี้

แทนที่ NotoColorEmoji.ttf ด้วยแบบอักษรอีโมจิที่เป็นแบรนด์ OEM

หากต้องการแทนที่ไฟล์ NotoColorEmoji.ttf ด้วยไฟล์แบบอักษรอีโมจิของแบรนด์ OEM ใส่แบบอักษรอีโมจิไว้หน้าชุดแบบอักษรสำรอง

  1. วางแบบอักษรของคุณเองซึ่งเรียกว่า OEMCustomEmoji.ttf ในพาร์ติชัน /system
  2. แก้ไข /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 เพื่อตอบสนองความต้องการของตลาดท้องถิ่น

ทำตามขั้นตอนต่อไปนี้เพื่อปรับแต่งตามความต้องการของตลาดในพื้นที่

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

ข้อกำหนดเบื้องต้นของ Meet

กลไกการอัปเดตแบบอักษรจะใช้ฟีเจอร์เคอร์เนลของ fs-verity ของ Linux โปรดยืนยันว่า อุปกรณ์ของคุณเป็นไปตามข้อกำหนดของfs-verityและมีใบรับรองอยู่ในอุปกรณ์

เซ็นชื่อในไฟล์แบบอักษร

เนื่องจากไฟล์แบบอักษรเป็นทรัพยากรที่มีความเสี่ยง จึงต้องยืนยันด้วยคีย์ที่เชื่อถือได้ ตรวจสอบไฟล์แบบอักษรทั้งหมดที่จะอัปเดตอย่างละเอียด และลงชื่อเข้าใช้ คีย์ส่วนตัว ลายเซ็นต้องเข้ากันได้กับ fs-verity

อัปเดตแบบอักษรแบบรันไทม์

แอประบบ FontManager จะอัปเดตแบบอักษร แอป FontManager มอบสถานะแบบอักษรของระบบที่ติดตั้งล่าสุดและความสามารถในการอัปเดตแบบอักษร ไฟล์ที่มีลายเซ็น หากต้องการเรียกใช้แอปอัปเดตแอป ให้เพิ่ม สิทธิ์UPDATE_FONT signature|privilegedสำหรับ รายการแอปที่อนุญาต และ ลงในไฟล์ Manifest

ให้สิทธิ์ UPDATE_FONT signature|privileged แก่โปรแกรมอัปเดตของแอป