ส่วนขยาย 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) อาศัยฟังก์ชันที่ไม่ใช่ AOSP บางอย่างในการนำไปใช้งาน
    • ตัวอย่างเช่น 1. ถ้าแก้ไข libjpeg.so อาศัยห้องสมุดไม่ใช่ AOSP อีกคนหนึ่งชื่อ libjpeg_turbo2.so แล้วแก้ไข libjpeg.so จะเป็น UX-โมดูล
    • ตัวอย่างที่ 2 หากผู้ขายที่เพิ่มฟังก์ชั่นใหม่ที่จะมีการปรับเปลี่ยนของพวกเขา libexif.so และแก้ไขของพวกเขา libjpeg.so การใช้ฟังก์ชั่นที่เพิ่มใหม่จาก libexif.so แล้วการปรับเปลี่ยนของพวกเขา libjpeg.so จะเป็น UX-โมดูล

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

ฟังก์ชันที่ใช้
เฉพาะ AOSP (UA) ขยาย (UX)
ฟังก์ชันที่กำหนด เฉพาะ AOSP (DA) ดาว 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 อาจไม่สามารถเชื่อมโยงหรือส่งผลให้เกิดพฤติกรรมที่ไม่ได้กำหนดไว้