สแนปชอต VNDK คือชุดของคลัง VNDK-core และ VNDK-SP สำหรับรุ่น Android
คุณจะอัปเกรดได้เฉพาะพาร์ติชันระบบหาก system.img
มีภาพรวม VNDK ที่เกี่ยวข้องตามที่
vendor.img
สแนปชอต VNDK อย่างเป็นทางการจะสร้างโดยอัตโนมัติบนเซิร์ฟเวอร์บิลด์ของ Android
และเช็คอิน /prebuilts/vndk
ของโครงสร้างแหล่งที่มาของ Android สำหรับ
เพื่อการพัฒนา คุณสามารถสร้างสแนปชอต VNDK ในเครื่องได้ ภาพรวม VNDK คือ
รองรับสำหรับ Arm, arm64, x86 และ x86_64 เวอร์ชัน TARGET_ARCH
สร้างสแนปชอต
เซิร์ฟเวอร์บิลด์ของ 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
เหมือนกับอิมเมจระบบทั่วไป (GSI) เป้าหมายเก็บถาวร (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
สำหรับสร้าง Arc ที่รองรับทั้งหมด
รสชาติ ด้วยคำสั่งต่อไปนี้
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
สแนปชอต VNDK สำหรับเวอร์ชัน Android สร้างขึ้นจาก ปล่อย Branch
สร้างในเครื่อง
ในระหว่างการพัฒนา คุณจะสร้างสแนปชอต VNDK จากโครงสร้างแหล่งที่มาในเครื่องได้ด้วย คำสั่งต่อไปนี้
- หากต้องการสร้างส่วนโค้งที่รองรับทั้งหมดพร้อมกัน ให้เรียกใช้สคริปต์บิลด์ต่อไปนี้
(
build.sh
) วันที่cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- หากต้องการสร้าง
TARGET_ARCH
ที่เฉพาะเจาะจง 1 รายการ ให้ดำเนินการต่อไปนี้ คำสั่ง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
ตัวอย่างด้านล่างแสดง
โครงสร้างไดเรกทอรีสำหรับ arm64 (TARGET_ARCH=arm64
) VNDK
ไฟล์สแนปชอต ZIP (android-vndk-arm64.zip
)
![โครงสร้างไดเรกทอรีสแนปชอต VNDK](https://source.android.com/static/docs/core/architecture/images/vndk_snapshot_directory.png?authuser=0&hl=th)
สร้างสำหรับสแนปชอตของผู้ให้บริการ
รองรับ Android 11
ผู้ให้บริการ
สแนปชอตซึ่งช่วยให้คุณสร้าง vendor.img
ได้โดยไม่ต้องคำนึงถึง
เวอร์ชัน Android ในโครงสร้างซอร์ส สแนปชอต VNDK เริ่มต้นจะมี
ไฟล์คลังภาพที่แชร์ (.so
) ซึ่งติดตั้งลงในอุปกรณ์ได้และ
จากนั้นจึงลิงก์จากไบนารี C++ ของผู้ให้บริการในรันไทม์ เพื่อสร้างสนามแข่ง
สแนปชอต VNDK นั้น คุณจำเป็นต้องมีอาร์ติแฟกต์เพิ่มเติม เช่น ไฟล์ส่วนหัวและ
แฟล็กที่ส่งออก
เพื่อสร้างอาร์ติแฟกต์ดังกล่าว (พร้อมกับสแนปชอต VNDK) จากแหล่งที่มาในเครื่อง ให้ใช้คำสั่งต่อไปนี้
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
คำสั่งนี้จะสร้างไฟล์ android-vndk-$(TARGET_ARCH).zip
ไฟล์ภายใต้
$DIST_DIR
ตัวอย่างด้านล่างเป็นไฟล์ ZIP ของสแนปชอต ARM64 VNDK
กับอาร์ติแฟกต์ของบิลด์ ไฟล์ตัวหนาคือไฟล์ที่เพิ่มเข้ามาใหม่ไปยัง 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 รุ่นที่เกี่ยวข้อง) สำหรับ
เช่น สแนปชอต Android 8.1 VNDK มีเวอร์ชัน 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
คำสั่งตัวอย่างสำหรับการอัปเดตสแนปชอต Android 8.1 VNDK ด้วยบิลด์ในเครื่อง
อาร์ติแฟกต์ใน /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
ไว้เท่านั้น
เวอร์ชันแพลตฟอร์ม_VNDK_
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
การสร้าง ผู้ให้บริการ |
เวอร์ชัน กระดาน |
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
) ดองเวียดนาม เวอร์ชันที่โมดูลผู้ให้บริการต้องใช้ในการสร้าง ตั้งค่าเป็นcurrent
หาก โมดูลของผู้ให้บริการสามารถลิงก์กับโมดูลระบบปัจจุบันได้ - เวอร์ชันแพลตฟอร์ม (
PLATFORM_VNDK_VERSION
) VNDK เวอร์ชันที่กำลังสร้างโมดูลระบบปัจจุบัน สร้างเฉพาะเมื่อBOARD_VNDK_VERSION
เท่ากับค่าปัจจุบัน - พร็อพเพอร์ตี้เวอร์ชัน (
ro.vndk.version
) พร็อพเพอร์ตี้ ที่ระบุเวอร์ชัน VNDK ที่ไบนารีและ lib ในVendor.img ต้องใช้ วิ่งได้ จัดเก็บไว้ในvendor.img
ที่/vendor/default.prop