ส่วนขยาย VNDK

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

ผู้ผลิตอุปกรณ์ Android เปลี่ยนซอร์สโค้ดของไลบรารี AOSP ด้วยเหตุผลหลายประการ ผู้จำหน่ายบางรายนำฟังก์ชันมาใช้ใหม่ในไลบรารี AOSP เพื่อเพิ่มประสิทธิภาพในขณะที่ผู้ขายรายอื่นเพิ่ม hooks ใหม่ API ใหม่ หรือฟังก์ชันใหม่ให้กับไลบรารี AOSP ส่วนนี้ให้แนวทางสำหรับการขยายไลบรารี AOSP ในลักษณะที่ไม่ทำลาย CTS/VTS

แทนที่ดรอปอิน

ไลบรารีที่แบ่งใช้ที่แก้ไขทั้งหมดจะต้อง เข้ากันได้กับไบนารี แทนที่ดรอปอิน ของคู่ AOSP ผู้ใช้ AOSP ที่มีอยู่ทั้งหมดจะต้องสามารถใช้ไลบรารีที่ใช้ร่วมกันที่แก้ไขโดยไม่ต้องคอมไพล์ใหม่ ข้อกำหนดนี้หมายความถึงสิ่งต่อไปนี้:

  • ฟังก์ชัน AOSP จะต้องไม่ถูกลบออก
  • ต้องไม่เปลี่ยนแปลงโครงสร้างหากโครงสร้างดังกล่าวเปิดเผยต่อผู้ใช้
  • เงื่อนไขเบื้องต้นของฟังก์ชันต้องไม่เสริมความแข็งแกร่ง
  • ฟังก์ชันต้องมีฟังก์ชันที่เทียบเท่ากัน
  • เงื่อนไขหลังการทำงานต้องไม่ลดลง

การจำแนกโมดูลเพิ่มเติม

จำแนกโมดูลตามฟังก์ชันที่ กำหนด และ ใช้งาน

หมายเหตุ : มีการใช้ ฟังก์ชัน การทำงานที่นี่แทน API/ABI เนื่องจากคุณสามารถเพิ่มฟังก์ชันการทำงานได้โดยไม่ต้องเปลี่ยนแปลง API/ABI ใดๆ

ขึ้นอยู่กับฟังก์ชันที่กำหนดไว้ในโมดูล โมดูลสามารถจำแนกได้เป็น DA-Module และ DX-Module :

  • Defining-only-AOSP Modules (DA-Module) ไม่ได้กำหนดฟังก์ชันการทำงานใหม่ที่ไม่ได้อยู่ในคู่ของ AOSP
    • ตัวอย่างที่ 1 ไลบรารี AOSP ที่ไม่มีการแก้ไขที่ไม่เสียหายคือ DA-Module
    • ตัวอย่างที่ 2 หากผู้ขายเขียนฟังก์ชันใน libcrypto.so ด้วยคำสั่ง SIMD (โดยไม่ต้องเพิ่มฟังก์ชันใหม่) libcrypto.so ที่แก้ไขแล้วจะเป็น DA-Module
  • Defining-Extension Modules (DX-Module) กำหนดฟังก์ชันการทำงานใหม่หรือไม่มี AOSP ที่เทียบเท่ากัน
    • ตัวอย่างที่ 1 หากผู้ขายเพิ่มฟังก์ชันตัวช่วยใน libjpeg.so เพื่อเข้าถึงข้อมูลภายใน libjpeg.so ที่แก้ไขแล้วจะเป็น DX-Lib และฟังก์ชันที่เพิ่มเข้ามาใหม่จะเป็นส่วนที่ขยายเพิ่มเติมของไลบรารี
    • ตัวอย่างที่ 2 หากผู้ขายกำหนดไลบรารีที่ไม่ใช่ AOSP ชื่อ libfoo.so ดังนั้น libfoo.so จะเป็น DX-Lib

ขึ้นอยู่กับฟังก์ชันที่ใช้โดยโมดูล โมดูลสามารถจำแนกได้เป็น UA-Module และ UX-Module

  • โมดูลที่ใช้เฉพาะ AOSP (UA-Module) ใช้ฟังก์ชัน AOSP ในการใช้งานเท่านั้น พวกเขาไม่พึ่งพาส่วนขยายที่ไม่ใช่ AOSP
    • ตัวอย่างที่ 1 ไลบรารี AOSP ที่ไม่มีการแก้ไขที่ไม่เสียหายคือ UA-Module
    • ตัวอย่างที่ 2 หากไลบรารีที่ใช้ร่วมกันที่แก้ไขแล้ว libjpeg.so ใช้ AOSP API อื่นเท่านั้น ไลบรารีนั้นจะเป็น UA-Module
  • โมดูลส่วนขยายการใช้ (UX-Module) อาศัยฟังก์ชันบางอย่างที่ไม่ใช่ AOSP ในการใช้งาน
    • ตัวอย่างที่ 1 หาก libjpeg.so ที่แก้ไขแล้วอาศัยไลบรารีอื่นที่ไม่ใช่ AOSP ชื่อ libjpeg_turbo2.so libjpeg.so แก้ไขแล้วจะเป็น UX-Module
    • ตัวอย่างที่ 2 หากผู้ขายเพิ่มฟังก์ชันใหม่ให้กับ libexif.so libjpeg.so แก้ไขแล้วใช้ฟังก์ชันที่เพิ่มใหม่จาก libexif.so ดังนั้น libjpeg.so ที่แก้ไขแล้วจะเป็น UX-Module

คำจำกัดความและการใช้งานเป็นอิสระจากกัน:

ฟังก์ชันที่ใช้
เฉพาะ AOSP (UA) ขยาย (UX)
ฟังก์ชันที่กำหนดไว้ เฉพาะ AOSP (DA) DUA DAUX
ขยาย (DX) DXUA DXUX

กลไกการขยาย VNDK

โมดูลผู้จำหน่ายที่ใช้ฟังก์ชันเสริมจะไม่ทำงานเนื่องจากไลบรารี AOSP ที่มีชื่อเดียวกันไม่มีฟังก์ชันเพิ่มเติม หากโมดูลของผู้ขายขึ้นอยู่กับฟังก์ชันเพิ่มเติมโดยตรงหรือโดยอ้อม ผู้ขายควรคัดลอกไลบรารีที่ใช้ร่วมกันของ DAUX, DXUA และ DXUX ไปยังพาร์ติชันของผู้ขาย (กระบวนการของผู้จำหน่ายจะมองหาไลบรารีที่ใช้ร่วมกันในพาร์ติชันของผู้ขายก่อนเสมอ) อย่างไรก็ตาม ไลบรารี LL-NDK จะต้องไม่ถูกคัดลอก ดังนั้นโมดูลผู้จัดจำหน่ายต้องไม่พึ่งพาฟังก์ชันการทำงานเพิ่มเติมที่กำหนดโดยไลบรารี LL-NDK ที่แก้ไข

ไลบรารีที่แบ่งใช้ของ DAUA สามารถคงอยู่บนพาร์ติชันระบบได้ ถ้าไลบรารี AOSP ที่เกี่ยวข้องสามารถให้ฟังก์ชันการทำงานเดียวกันได้ และโมดูลของผู้ขายยังคงทำงานต่อไปเมื่อพาร์ติชันระบบถูกเขียนทับโดย Generic System Image (GSI)

การแทนที่แบบดรอปอินมีความสำคัญเนื่องจากไลบรารี VNDK ที่ไม่ได้แก้ไขใน GSI จะเชื่อมโยงกับไลบรารีที่ใช้ร่วมกันที่แก้ไขแล้วในการชนกันของชื่อ หากไลบรารี AOSP ได้รับการแก้ไขในลักษณะที่เข้ากันไม่ได้ของ API/ABI ไลบรารี AOSP ใน GSI อาจล้มเหลวในการเชื่อมโยงหรือส่งผลให้เกิดการทำงานที่ไม่ได้กำหนดไว้