อิมเมจระบบสามารถใช้สแนปชอต VNDK ได้เพื่อระบุ VNDK ที่ถูกต้อง ไลบรารีไปยังอิมเมจของผู้ให้บริการแม้ว่าอิมเมจของระบบและของผู้ให้บริการจะสร้างจาก Android เวอร์ชันต่างๆ การสร้างสแนปชอต VNDK ต้องมีการจับภาพ ไลบรารี VNDK เป็นสแนปชอต และทำเครื่องหมายด้วยหมายเลขเวอร์ชัน รูปภาพผู้ให้บริการอาจลิงก์กับ VNDK เวอร์ชันเฉพาะที่ระบุ ABI ที่จำเป็น สำหรับโมดูลในรูปภาพของผู้ให้บริการ อย่างไรก็ตาม ภายใน VNDK เวอร์ชันเดียวกัน ไลบรารี VNDK ต้องเป็น ABI เสถียร
การออกแบบภาพรวมของ VNDK รวมวิธีการสำหรับ กำลังสร้าง ที่สร้างล่วงหน้าของสแนปชอต VNDK จากอิมเมจระบบปัจจุบันและ การติดตั้ง ไลบรารีที่สร้างไว้ล่วงหน้าเหล่านั้นลงในพาร์ติชันระบบของ Android เวอร์ชันใหม่
เกี่ยวกับไลบรารี VNDK
HIDL-HAL เปิดตัวใน Android 8.0 ให้คุณอัปเกรดแยกกันสำหรับพาร์ติชันระบบและผู้ให้บริการ ดองเวียดนาม กำหนดชุดไลบรารี (VNDK-core, VNDK-SP และ LL-NDK) ที่โค้ดของผู้ให้บริการสามารถ ลิงก์และบล็อกผู้ให้บริการไม่ให้ใช้ไลบรารีที่ไม่ได้อยู่ใน VNDK ตั้งค่า ด้วยเหตุนี้ คุณจึงสร้างและเรียกใช้อิมเมจผู้ให้บริการได้ หาก VNDK ที่เหมาะสม ชุดบนอิมเมจของระบบจะมีให้กับอิมเมจผู้ให้บริการ
แกน VNDK
ติดตั้งชุดไลบรารี VNDK-core ใน
/system/lib[64]/vndk-${VER}
และว่าง
เฉพาะสำหรับกระบวนการของผู้ให้บริการที่มีระดับ API เท่ากับ
${VER}
กระบวนการของระบบไม่สามารถใช้ไลบรารีเหล่านี้และจะต้อง
ใช้ไลบรารีที่ติดตั้งใน /system/lib[64]
แทน เพราะ
ของข้อจำกัดเนมสเปซที่เข้มงวดสำหรับแต่ละกระบวนการ ไลบรารีแกน VNDK
ปลอดภัยจากการโหลดแบบคู่
หากต้องการรวมไลบรารีไว้ใน VNDK-core ให้เพิ่มรายการต่อไปนี้ลงใน
Android.bp
:
vendor_available: true, vndk: { enabled: true, },
VNDK-SP
ติดตั้งไลบรารี VNDK-SP ใน /system/lib[64]/vndk-sp-${VER}
แล้ว
และพร้อมใช้งานสำหรับกระบวนการของผู้ให้บริการและกระบวนการของระบบ (ผ่าน SP-HAL
ที่ติดตั้งในพาร์ติชันผู้ให้บริการ) ไลบรารี VNDK-SP อาจเป็น
แบบโหลดคู่
หากต้องการรวมคลังใน VNDK-SP ให้เพิ่มรายการต่อไปนี้ลงใน Android.bp
vendor_available: true, vndk: { enabled: true, support_system_process: true, },
LL-NDK
ติดตั้งไลบรารี LL-NDK ใน /system/lib[64]
โมดูลของผู้ให้บริการ
สามารถใช้ไลบรารีต้นขั้ว LL-NDK เพื่อเข้าถึงสัญลักษณ์ที่เลือกไว้ล่วงหน้าของ LL-NDK
ห้องสมุด ไลบรารี LL-NDK ต้องเข้ากันได้แบบย้อนหลังและมี ABI แบบเสถียรเพื่อ
ช่วยให้โมดูลผู้ให้บริการเวอร์ชันเก่าใช้ไลบรารี LL-NDK เวอร์ชันใหม่ได้
เนื่องด้วยลักษณะความมั่นคงของ ABI ของ LL-NDK ภาพรวม VNDK จึง
ไม่จำเป็นต้องใส่ไลบรารี LL-NDK สำหรับรูปภาพเก่าของผู้ให้บริการ
เกี่ยวกับภาพรวม VNDK
Android 8.1 รวม VNDK ไลบรารีที่สร้างขึ้นจากซอร์สโค้ด อย่างไรก็ตาม สำหรับเวอร์ชันที่ใหม่กว่า Android จะต้องบันทึกเวอร์ชัน VNDK แต่ละเวอร์ชันเป็นภาพรวม และระบุเป็น สร้างล่วงหน้าเพื่อเปิดใช้การลิงก์ไปยังอิมเมจผู้ให้บริการเวอร์ชันเก่า
ตั้งแต่ Android 9 เป็นต้นไป Android เวอร์ชันใหม่จะ
รวมสแนปชอตของไดเรกทอรี VNDK-core และ VNDK-SP อย่างน้อย 1 รายการสำหรับเวอร์ชันเก่า
ในซอร์สโค้ด Android ในเวลาสร้าง สแนปชอตที่จําเป็นจะ
ติดตั้งลงใน /system/lib[64]/vndk-${VER}
และ
/system/lib[64]/vndk-sp-${VER}
(ไดเรกทอรีที่ใช้ได้โดย
พาร์ติชันผู้ให้บริการ) โดยที่ ${VER}
คือตัวแปรสตริงที่
แสดงชื่อเวอร์ชันของสแนปชอต VNDK
เนื่องจากไลบรารีสแนปชอต VNDK อาจแตกต่างกันไปในแต่ละเวอร์ชัน VNDK ดังนั้น VNDK
สแนปชอตยังมีการกำหนดค่าเนมสเปซ Linker ที่ติดตั้งเป็น
etc/ld.config.${VER}.txt
,
/etc/llndk.libraries.${VER}.txt
และ
/etc/vndksp.libraries.${VER}.txt
ตัวอย่าง: อัปเกรดระบบและผู้ให้บริการ รูปภาพ
ไม่ต้องมีสแนปชอต สิ่งที่สร้างโดยไม่มีการกำหนดค่าเพิ่มเติมสำหรับ VNDK
ตัวอย่าง: อัปเกรดอิมเมจระบบเท่านั้น
ต้องมีสแนปชอต VNDK และไฟล์การกำหนดค่าเนมสเปซ Linker สำหรับ
อิมเมจผู้ให้บริการในอิมเมจระบบ ไฟล์การกำหนดค่าเนมสเปซ Linker
มีการกำหนดค่าโดยอัตโนมัติเพื่อค้นหาไลบรารี VNDK ใน
/system/lib[64]/vndk-${VER}
และ
/system/lib[64]/vndk-sp-${VER}
![](https://source.android.com/static/docs/core/architecture/images/vndk_snapshot_system_only.png?authuser=0&hl=th)
ตัวอย่าง: อัปเกรดอิมเมจระบบ การเปลี่ยนแปลงอิมเมจผู้ให้บริการเล็กน้อย
ระบบยังไม่รองรับการสร้างอิมเมจผู้ให้บริการในภาพรวม VNDK คุณจึง ต้องสร้างอิมเมจผู้ให้บริการแยกต่างหากด้วยซอร์สโค้ดเดิม อัปเกรดอิมเมจระบบตามที่อธิบายไว้ในตัวอย่างก่อนหน้านี้
สถาปัตยกรรมสแนปชอต VNDK
หากต้องการให้อิมเมจระบบ Android 9 ใช้งานได้กับ รูปภาพผู้ให้บริการ Android 8.1, สแนปชอต VNDK ที่ตรงกับ Android 8.1 ต้องมีรูปภาพผู้ให้บริการมาพร้อมกับ Android 9 อิมเมจระบบดังที่แสดงด้านล่าง
![](https://source.android.com/static/docs/core/architecture/images/vndk_snapshot_arch.png?authuser=0&hl=th)
การออกแบบภาพรวม VNDK มีวิธีดังต่อไปนี้
- การสร้างภาพรวมสำหรับ VNDK-core และ VNDK-SP
ห้องสมุด Android 9 มีสคริปต์
สามารถใช้สร้างภาพรวมของบิลด์ VNDK ปัจจุบัน สคริปต์นี้รวมกลุ่มทั้งหมด
ห้องสมุดใน
/system/lib[64]/vndk-28
และ/system/lib[64]/vndk-sp-28
ที่สร้างขึ้นด้วย เป็นภาพรวม VNDK โดยที่28
คือ VNDK Android 9 สแนปชอตยังมี Linker ไฟล์การกำหนดค่าเนมสเปซ/etc/ld.config.28.txt
/etc/llndk.libraries.28.txt
และ/etc/vndksp.libraries.28.txt
ระบบจะใช้สแนปชอตที่สร้างขึ้น ที่มี Android เวอร์ชันใหม่กว่า (เวอร์ชันสูงกว่า Android 9) - การติดตั้งไลบรารี VNDK-core และ VNDK-SP ที่สร้างไว้ล่วงหน้าจาก
ภาพรวม ใน Android 9 สแนปชอต VNDK มี
ชุดห้องสมุดที่ใช้ VNDK-core ที่สร้างไว้ล่วงหน้าและชุดของห้องสมุด VNDK-SP รวมทั้ง
เป็นไฟล์การกำหนดค่าเนมสเปซของ Linker เมื่อคุณแสดงรายการ VNDK
เวอร์ชันสแนปชอตที่จะติดตั้ง ณ เวลาที่สร้างการติดตั้งอิมเมจของระบบ
ไลบรารีสแนปชอต VNDK ไปยัง
/system/lib[64]/vndk-${VER}
และ ไดเรกทอรี/system/lib[64]/vndk-sp-${VER}
และ Linker ไฟล์การกำหนดค่าเนมสเปซสำหรับสแนปชอต VNDK เหล่านั้น ไดเรกทอรี/etc
การกำหนดเวอร์ชัน VNDK
Android แต่ละรุ่นมีสแนปชอต VNDK เพียงรายการเดียว และใช้เวอร์ชัน SDK เป็น
เวอร์ชัน VNDK (ซึ่งหมายความว่าเวอร์ชัน VNDK มีจำนวนเต็ม เช่น 27
สำหรับ Android 8.1) เวอร์ชัน VNDK จะได้รับการแก้ไขเมื่อเวอร์ชัน Android คือ
เผยแพร่แล้ว จัดเก็บเวอร์ชัน VNDK ที่พาร์ติชันผู้ให้บริการใช้
โดยอัตโนมัติในพร็อพเพอร์ตี้ ro.vndk.version
ซึ่งอ่านได้
ในรันไทม์ จากนั้นระบบจะใช้เวอร์ชันนี้ในการระบุเวอร์ชัน VNDK ของผู้ให้บริการ
สำหรับไลบรารีบางรายการและระบุเวอร์ชันสแนปชอต VNDK สำหรับเนมสเปซ
การกำหนดค่า
สร้างไลบรารี VNDK
คำสั่ง make vndk
จะสร้างไลบรารีที่มี vndk:
{ enabled: true, … }
รวมถึงทรัพยากร Dependency และเนมสเปซ
ใหม่ หากตั้งค่า BOARD_VNDK_VERSION := current
ไว้
ไลบรารีเหล่านี้สร้างขึ้นด้วยคำสั่ง make
เนื่องจากบิลด์นี้ไม่ได้ติดตั้งไลบรารี VNDK จากสแนปชอต ไลบรารี VNDK ที่ติดตั้งไว้ไม่เสถียร ABI แต่ในกรณีที่เวอร์ชัน Android มีการเผยแพร่ ABI สำหรับ VNDK เวอร์ชันปัจจุบันได้รับการแก้ไขแล้ว ในจุดนี้ คุณสามารถ ความเสียหาย ABI เป็นข้อผิดพลาดของรุ่น ดังนั้นแพตช์สำหรับเวอร์ชัน Android ต้องไม่ เปลี่ยน ABI สำหรับห้องสมุด VNDK