สแนปชอต VNDK คือชุดไลบรารี VNDK-core และ VNDK-SP สำหรับรุ่น Android
คุณจะอัปเกรดได้เฉพาะพาร์ติชันระบบหาก system.img
มีสแนปชอต VNDK ที่เกี่ยวข้องซึ่ง vendor.img
ต้องใช้
ระบบจะสร้างสแนปชอต VNDK อย่างเป็นทางการโดยอัตโนมัติในเซิร์ฟเวอร์บิลด์ Android และเช็คอินใน /prebuilts/vndk
ของซอร์สทรี Android คุณสร้างสแนปชอต VNDK ได้ในเครื่องเพื่อวัตถุประสงค์ในการพัฒนา ระบบรองรับสแนปชอต VNDK สำหรับ TARGET_ARCH
เวอร์ชัน arm, arm64, x86 และ x86_64
สร้างสแนปชอต
เซิร์ฟเวอร์บิลด์ Android จะสร้างอาร์ติแฟกต์การสร้างและไฟล์สแนปชอต VNDK โดยใช้พารามิเตอร์การสร้างและคำสั่งบิลด์ต่อไปนี้
พารามิเตอร์การสร้าง
ชื่อเป้าหมายการสร้างคือ vndk
การกำหนดค่าเป้าหมายการสร้างจะแสดงอยู่ด้านล่าง
TARGET_PRODUCT |
TARGET_ARCH |
TARGET_ARCH_VARIANT |
---|---|---|
aosp_arm |
arm |
armv7-a-neon |
aosp_arm64 |
arm64 |
armv8-a |
aosp_x86 |
x86 |
x86 |
aosp_x86_64 |
x86_64 |
x86_64 |
TARGET_PRODUCT=aosp_$(TARGET_ARCH)
TARGET_BUILD_VARIANT=user
TARGET_ARCH
เหมือนกับ Generic System Image (GSI) target archs (arm
,arm64
,x86
,x86_64
)TARGET_ARCH_VARIANT
. สำหรับสแนปชอต v28 (Android 9) ขึ้นไป จะมีการกำหนดค่ายอดนิยมที่ระบุไว้ข้างต้น
คำสั่งบิลด์
สำหรับสแนปชอตอย่างเป็นทางการ Android 9 ขึ้นไปจะมีเป้าหมายตัวอย่าง (vndk
) ใน vndk.mk
ที่จะสร้างและแสดงผลสแนปชอต VNDK ไปยัง $DIST_DIR
ไฟล์ ZIP ของภาพรวมใช้รูปแบบ
android-vndk-$(TARGET_ARCH).zip
เช่น
lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]
เซิร์ฟเวอร์บิลด์ Android ใช้สคริปต์ build.sh
เพื่อสร้างตัวแปรทั้งหมดที่รองรับสำหรับสถาปัตยกรรมด้วยคำสั่งต่อไปนี้
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
สแนปชอต VNDK สำหรับเวอร์ชัน Android จะสร้างขึ้นจากสาขารุ่นของเวอร์ชันนั้น
บิลด์ในเครื่อง
ในระหว่างการพัฒนา คุณสามารถสร้างภาพรวม VNDK จากซอร์สทรีในเครื่องโดยใช้คำสั่งต่อไปนี้
- หากต้องการสร้างสถาปัตยกรรมที่รองรับทั้งหมดพร้อมกัน ให้เรียกใช้สคริปต์การสร้างต่อไปนี้
(
build.sh
)cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- หากต้องการสร้าง
TARGET_ARCH
รายการใดรายการหนึ่งโดยเฉพาะ ให้เรียกใช้คำสั่งต่อไปนี้lunch aosp_TARGET_ARCH-user
m -j vndk dist
ระบบจะสร้างไฟล์ android-vndk-$(TARGET_ARCH).zip
ที่เกี่ยวข้องภายใต้ $DIST_DIR
ไฟล์สแนปชอต
ภาพรวม VNDK มีไฟล์ต่อไปนี้
- ตัวแปรของผู้ให้บริการสำหรับไลบรารีที่ใช้ร่วมกัน VNDK-core และ VNDK-SP
- คุณไม่จำเป็นต้องใช้ไลบรารีที่แชร์ของ LL-NDK เนื่องจากไลบรารีดังกล่าวใช้งานร่วมกันได้ย้อนหลัง
- สำหรับเป้าหมาย 64 บิต ระบบจะสร้างและรวมทั้งไลบรารี
TARGET_ARCH
และTARGET_2ND_ARCH
- รายการไลบรารี VNDK-core, VNDK-SP, LL-NDK และ VNDK-private ดูได้ที่
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt
- ไฟล์ใบอนุญาต
module_paths.txt
. บันทึกเส้นทางโมดูลสำหรับไลบรารี VNDK ทั้งหมด ซึ่งจำเป็นสำหรับการตรวจสอบว่าโปรเจ็กต์ GPL มีแหล่งที่มาที่เผยแพร่ในซอร์สทรี Android ที่ระบุ
สำหรับไฟล์ ZIP ของภาพรวม VNDK หนึ่งๆ android-vndk-$(TARGET_ARCH).zip
ระบบจะจัดกลุ่มไลบรารีที่สร้างไว้ล่วงหน้าของ VNDK ไว้ในไดเรกทอรีแยกต่างหากที่มีชื่อว่า arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
ตามจำนวนบิตของ ABI เช่น สำหรับ android-vndk-arm64.zip
ไลบรารี 64 บิตจะอยู่ใน arch-arm64-armv8-a
และไลบรารี 32 บิตจะอยู่ใน arch-arm-armv8-a
ตัวอย่างด้านล่างแสดงโครงสร้างไดเรกทอรีของไฟล์ ZIP สแนปชอต VNDK (android-vndk-arm64.zip
) สำหรับ arm64 (TARGET_ARCH=arm64
)

บิลด์สําหรับสแนปชอตของผู้ให้บริการ
Android 11 รองรับสแนปชอตของผู้ให้บริการ ซึ่งช่วยให้คุณสร้าง vendor.img
ได้โดยไม่คำนึงถึงเวอร์ชัน Android ในซอร์สทรี ภาพรวม VNDK เริ่มต้นจะมีไฟล์ไลบรารีที่ใช้ร่วมกัน (.so
) ซึ่งสามารถติดตั้งลงในอุปกรณ์ แล้วลิงก์จากไบนารี C++ ของผู้ให้บริการในรันไทม์ หากต้องการสร้างเทียบกับสแนปชอต VNDK ดังกล่าว คุณต้องมีอาร์ติแฟกต์เพิ่มเติม เช่น ไฟล์ส่วนหัวและ Flag ที่ส่งออก
หากต้องการสร้างอาร์ติแฟกต์ดังกล่าว (พร้อมกับสแนปชอต VNDK) จากซอร์สทรีในเครื่อง ให้ใช้คำสั่งต่อไปนี้
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
คำสั่งนี้จะสร้างไฟล์ android-vndk-$(TARGET_ARCH).zip
ไฟล์ใน $DIST_DIR
ตัวอย่างด้านล่างคือไฟล์ ZIP ของภาพรวม VNDK แบบ ARM64 ที่มีอาร์ติแฟกต์การสร้าง ไฟล์ที่ขีดหนาคือไฟล์ที่เพิ่มใหม่ลงในสแนปชอต VNDK ปกติ (แสดงในรูปที่ 1) และประกอบด้วยไฟล์ JSON (ซึ่งจัดเก็บ cflags
ของแต่ละไลบรารี) และไฟล์ส่วนหัวที่ส่งออกทั้งหมด
android-vndk-arm64.zip ├── arch-arm64-armv8-a │ └── shared │ ├── vndk-core -> *.so files, *.json files │ └── vndk-sp -> *.so files, *.json files ├── arch-arm-armv8-a -> (same as arch-arm64-armv8-a) ├── configs -> *.libraries.txt, module_paths.txt, module_names.txt ├── include -> exported header files (*.h, *.hh, etc.) └── NOTICE_FILES -> license txt files
อัปโหลดสแนปชอต VNDK
ระบบจะตรวจสอบภาพรวม VNDK ในซอร์สทรีในส่วน /prebuilts/vndk/vVER
โดยที่ VER
เท่ากับเวอร์ชันของภาพรวม VNDK (ซึ่งเป็นไปตามเวอร์ชัน SDK ของ Android รุ่นที่เกี่ยวข้อง) เช่น ภาพรวม VNDK ของ Android 8.1 มีเวอร์ชัน 27
ใช้สคริปต์ update.py
สคริปต์ update.py
(/development/vndk/snapshot/update.py
) จะทําให้ขั้นตอนการเพิ่มสแนปชอต VNDK ที่คอมไพล์ไว้ล่วงหน้าลงในสคีมาต้นทางเป็นไปโดยอัตโนมัติ โดยจะตรวจหาอาร์ติแฟกต์การสร้างโดยอัตโนมัติและป้อนพร็อพเพอร์ตี้ที่เกี่ยวข้องใน Android.bp
ที่สร้างขึ้นอย่างเหมาะสม สคริปต์นี้จะทํางานต่อไปนี้
- ใน
/prebuilts/vndk/vVER
ใช้repo start
เพื่อสร้างสาขา Git ใหม่ - ดึงข้อมูลและแตกไฟล์อาร์ติแฟกต์การสร้างสแนปชอต VNDK
- เรียกใช้
gen_buildfiles.py
เพื่อสร้างไฟล์บิลด์โดยอัตโนมัติ (Android.bp
) - เรียกใช้
check_gpl_license.py
เพื่อยืนยันว่าไลบรารีที่สร้างไว้ล่วงหน้าซึ่งได้รับอนุญาตภายใต้ใบอนุญาตสาธารณะทั่วไป (GPL) มีแหล่งที่มาที่เผยแพร่ในต้นไม้ซอร์สโค้ดปัจจุบัน - ใช้
git commit
เพื่อบันทึกการเปลี่ยนแปลงใหม่
ใช้สแนปชอต VNDK ที่คอมไพล์ในเครื่อง
นอกจากนี้ คุณยังใช้ภาพรวม VNDK ที่สร้างขึ้นในพื้นที่ได้ด้วย เมื่อระบุตัวเลือก --local
สคริปต์ update.py
จะดึงข้อมูลอาร์ติแฟกต์การสร้างภาพนิ่ง VNDK จากไดเรกทอรีในเครื่องที่ระบุ (แทนที่จะเป็นเซิร์ฟเวอร์การสร้างของ Android) ซึ่งมีไฟล์ android-vndk-$(TARGET_ARCH).zip
ที่สร้างขึ้นจาก development/vndk/snapshot/build.sh
เมื่อใช้ตัวเลือก --local
สคริปต์ update.py
จะข้ามการตรวจสอบใบอนุญาต GPL และขั้นตอน git commit
ไวยากรณ์:
python update.py VER --local local_path
ตัวอย่างคำสั่งสำหรับการอัปเดตสแนปชอต VNDK ของ Android 8.1 ด้วยอาร์ติแฟกต์บิลด์ในเครื่อง /path/to/local/dir
python update.py 27 --local /path/to/local/dir
ตัวอย่างโครงสร้างไดเรกทอรีของสแนปชอต VNDK ที่คอมไพล์ในเครื่อง
prebuilts/vndk ├── v30 │ ├── arm64 │ │ ├── arch-arm64-armv8-a -> (prebuilt libs) │ │ ├── arch-arm-armv8-a -> (prebuilt libs) │ │ ├── configs -> (config files) │ │ ├── include -> (exported header files) │ │ └── Android.bp -> (VNDK modules with cflags) │ ├── arm -> (same as above) │ ├── x86_64 -> (same as above) │ ├── x86 -> (same as above) │ ├── common │ │ ├── NOTICE_FILES -> (license files) │ │ └── Android.bp -> (license file modules) │ └── Android.bp -> (*.libraries.30.txt modules) └── (other VNDK versions) -> (same as above)
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true
ติดตั้งสแนปชอต VNDK
อิมเมจระบบจะติดตั้งไลบรารีสแนปชอต VNDK ในเวลาที่สร้างโดยใช้ข้อมูลใน BOARD_VNDK_VERSION
,
PRODUCT_EXTRA_VNDK_VERSIONS
และ ro.vndk.version
คุณควบคุมได้ว่าจะให้ติดตั้งสแนปชอต VNDK รายการใดจากไดเรกทอรีสแนปชอต VNDK ที่คอมไพล์ไว้ล่วงหน้า (เช่น /prebuilts/vndk/v29
หรือ /prebuilts/vndk/v30
) โดยใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
- ตัวเลือกที่ 1:
BOARD_VNDK_VERSION
ใช้โมดูลสแนปชอตในการสร้างโมดูลผู้ให้บริการปัจจุบัน และติดตั้งเฉพาะโมดูลสแนปชอตที่จําเป็นสําหรับโมดูลผู้ให้บริการ - ตัวเลือกที่ 2:
PRODUCT_EXTRA_VNDK_VERSIONS
ติดตั้งโมดูลสแนปชอต VNDK โดยไม่คำนึงถึงโมดูลผู้ให้บริการปัจจุบัน ซึ่งจะติดตั้งสแนปชอต VNDK ที่คอมไพล์ไว้ล่วงหน้าซึ่งแสดงในPRODUCT_EXTRA_VNDK_VERSIONS
โดยไม่ลิงก์กับโมดูลอื่นๆ ในเวลาที่สร้าง
ตั้งค่า BOARD_VNDK_VERSION
BOARD_VNDK_VERSION
แสดงเวอร์ชัน VNDK ที่โมดูลของผู้ให้บริการปัจจุบันต้องสร้าง หาก BOARD_VNDK_VERSION
มีเวอร์ชันสแนปชอต VNDK ที่พร้อมใช้งานในไดเรกทอรี /prebuilts/vndk
ระบบจะติดตั้งสแนปชอต VNDK ที่ระบุใน BOARD_VNDK_VERSION
หากสแนปชอต VNDK ไม่พร้อมใช้งานในไดเรกทอรี ระบบจะแสดงข้อผิดพลาดการสร้าง
การกําหนด BOARD_VNDK_VERSION
ยังเปิดใช้การติดตั้งโมดูล VNDK ด้วย โมดูลของผู้ให้บริการจะลิงก์กับเวอร์ชันสแนปชอต VNDK ที่กําหนดไว้ใน BOARD_VNDK_VERSION
ขณะสร้าง (การดำเนินการนี้จะไม่สร้างโมดูล VNDK ปัจจุบันในซอร์สโค้ดของระบบ) เมื่อดาวน์โหลดซอร์สโค้ดทั้งต้นจากที่เก็บข้อมูล แหล่งที่มาทั้งของระบบและผู้ให้บริการจะอิงตามรุ่น Android เดียวกัน
ตั้งค่า PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS
แสดงรายการ VNDK เวอร์ชันเพิ่มเติมที่จะติดตั้ง โดยทั่วไปแล้ว การมีสแนปชอต VNDK 1 รายการสำหรับพาร์ติชันผู้ให้บริการปัจจุบันก็เพียงพอแล้ว อย่างไรก็ตาม ในบางกรณี คุณอาจต้องรวมภาพรวมหลายรายการไว้ในอิมเมจระบบเดียว ตัวอย่างเช่น GSI มีสแนปชอตหลายรายการเพื่อรองรับเวอร์ชันของผู้ให้บริการหลายเวอร์ชันด้วยภาพระบบเดียว การตั้งค่า PRODUCT_EXTRA_VNDK_VERSIONS
จะช่วยให้คุณติดตั้งข้อบังคับ VNDK เพิ่มเติมจากเวอร์ชัน VNDK ใน BOARD_VNDK_VERSION
ได้
หาก PRODUCT_EXTRA_VNDK_VERSIONS
มีรายการเวอร์ชันที่เฉพาะเจาะจง ระบบบิลด์จะค้นหาสแนปชอตที่สร้างขึ้นล่วงหน้าของรายการเวอร์ชันในไดเรกทอรี prebuilts/vndk
หากระบบบิลด์พบสแนปชอตที่ระบุไว้ทั้งหมด ระบบจะติดตั้งไฟล์สแนปชอตเหล่านั้นลงใน VNDK APEX แต่ละรายการ (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER
)
หากไม่มีเวอร์ชันใด ระบบจะสร้างข้อผิดพลาดในการบิลด์
โมดูล VNDK จะไม่ลิงก์กับโมดูลของผู้ให้บริการ ณ เวลาที่สร้าง แต่จะใช้ได้เมื่อรันไทม์หากโมดูลของผู้ให้บริการในพาร์ติชันของผู้ให้บริการต้องใช้ VNDK เวอร์ชันใดเวอร์ชันหนึ่งที่ได้รับการติดตั้ง PRODUCT_EXTRA_VNDK_VERSIONS
จะใช้ได้ก็ต่อเมื่อมีการกำหนด BOARD_VNDK_VERSION
เท่านั้น
PLATFORM_VNDK_VERSION
PLATFORM_VNDK_VERSION
กำหนดเวอร์ชัน VNDK สำหรับโมดูล VNDK ปัจจุบันในแหล่งที่มาของระบบ ระบบจะตั้งค่าโดยอัตโนมัติดังนี้
- ก่อนเผยแพร่ ระบบจะตั้งค่า
PLATFORM_VNDK_VERSION
เป็นPLATFORM_VERSION_CODENAME
- เมื่อเผยแพร่ ระบบจะคัดลอก
PLATFORM_SDK_VERSION
ไปยังPLATFORM_VNDK_VERSION
หลังจากเผยแพร่เวอร์ชัน Android แล้ว ระบบจะติดตั้งไลบรารี VNDK เวอร์ชันปัจจุบันลงใน VNDK APEX (/system/apex/com.android.vndk.vVER
) โดยที่ VER
คือเวอร์ชันที่จัดเก็บไว้ใน PLATFORM_VNDK_VERSION
เมื่อตั้งค่า BOARD_VNDK_VERSION
เป็น current
ระบบจะจัดเก็บ PLATFORM_VNDK_VERSION
ไว้ใน ro.vndk.version
มิเช่นนั้น ระบบจะจัดเก็บ BOARD_VNDK_VERSION
ไว้ใน ro.vndk.version
PLATFORM_VNDK_VERSION
จะตั้งค่าเป็นเวอร์ชัน SDK เมื่อ Android เผยแพร่ โดยก่อนการเผยแพร่ ระบบจะใช้ชื่อโค้ดที่เป็นตัวอักษรและตัวเลขของ Android สำหรับ PLATFORM_VNDK_VERSION
สรุปการตั้งค่าเวอร์ชัน VNDK
ตารางจะสรุปการตั้งค่าเวอร์ชัน VNDK
ผู้ให้บริการ สร้าง |
Board Version |
SDK รุ่น |
แพลตฟอร์ม เวอร์ชัน |
เวอร์ชัน พร็อพเพอร์ตี้ |
ติดตั้งไดเรกทอรี |
---|---|---|---|---|---|
โมดูล VNDK ปัจจุบัน | current |
ก่อน | CODE_NAME |
CODE_NAME |
/system/apex/com.android.vndk.vCODE_NAME |
หลัง | SDK_VER |
SDK_VER |
/system/apex/com.android.vndk.vSDK_VER |
||
โมดูลสแนปชอตที่สร้างไว้ล่วงหน้า | VNDK_VER สำหรับสแนปชอต |
ก่อนหรือหลัง | CODE_NAME หรือ SDK_VER |
VNDK_VER |
/system_ext/apex/com.android.vndk.vVNDK_VER |
- เวอร์ชันบอร์ด (
BOARD_VNDK_VERSION
) เวอร์ชัน VNDK ที่โมดูลของผู้ให้บริการต้องใช้ในการสร้าง ตั้งค่าเป็นcurrent
หาก โมดูลของผู้ให้บริการลิงก์กับโมดูลของระบบปัจจุบันได้ - เวอร์ชันแพลตฟอร์ม (
PLATFORM_VNDK_VERSION
) เวอร์ชัน VNDK ที่โมดูลระบบปัจจุบันกำลังสร้าง สร้างขึ้นเฉพาะเมื่อBOARD_VNDK_VERSION
เท่ากับปัจจุบัน - พร็อพเพอร์ตี้เวอร์ชัน (
ro.vndk.version
) พร็อพเพอร์ตี้ที่ระบุเวอร์ชัน VNDK ที่ไบนารีและไลบรารีใน vendor.img ต้องใช้ในการทำงาน จัดเก็บไว้ในvendor.img
ที่/vendor/default.prop