สแน็ปช็อต VNDK คือชุดของ VNDK-core และ VNDK-SP libs สำหรับรุ่น Android คุณสามารถอัปเกรดได้เฉพาะพาร์ติชันระบบหาก system.img
มีสแน็ปช็อต VNDK ที่เกี่ยวข้องซึ่ง vendor.img
ต้องการ
สแน็ปช็อต VNDK อย่างเป็นทางการถูกสร้างขึ้นโดยอัตโนมัติบนเซิร์ฟเวอร์บิลด์ของ Android และเช็คอินใน /prebuilts/vndk
ของแผนผังต้นทางของ Android เพื่อวัตถุประสงค์ในการพัฒนา คุณสามารถสร้างสแน็ปช็อต VNDK ในเครื่องได้ รองรับสแน็ปช็อต VNDK สำหรับรสชาติของ arm, arm64, x86 และ x86_64 TARGET_ARCH
การสร้างภาพรวม
เซิร์ฟเวอร์บิลด์ Android สร้างบิลด์อาร์ติแฟกต์และไฟล์สแนปช็อต VNDK โดยใช้พารามิเตอร์บิลด์และคำสั่งบิลด์ต่อไปนี้
สร้างพารามิเตอร์
ชื่อเป้าหมายการ build คือ 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) (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
- ไม่จำเป็นต้องใช้ libs ที่ใช้ร่วมกันของ LL-NDK เนื่องจากมีความเข้ากันได้แบบย้อนหลัง
- สำหรับเป้าหมาย 64 บิต ทั้งไลบรารี
TARGET_ARCH
และTARGET_2ND_ARCH
จะถูกสร้างขึ้นและรวมไว้ด้วย
- รายชื่อไลบรารีส่วนตัว VNDK-core, VNDK-SP, LL-NDK และ VNDK อยู่ที่
[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
libs 64 บิตจะอยู่ใต้ arch-arm64-armv8-a
และ libs 32 บิตจะอยู่ใต้ arch-arm-armv8-a
ตัวอย่างด้านล่างแสดงโครงสร้างไดเร็กทอรีสำหรับไฟล์ ZIP สแน็ปช็อต arm64 ( TARGET_ARCH=arm64
) VNDK ( android-vndk-arm64.zip
)
![โครงสร้างไดเรกทอรีสแน็ปช็อต VNDK](https://source.android.google.cn/static/docs/core/architecture/images/vndk_snapshot_directory.png?authuser=2&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/v VER
โดยที่ VER
เท่ากับเวอร์ชันของสแน็ปช็อต VNDK (ซึ่งตามหลังเวอร์ชัน SDK ของรุ่น Android ที่เกี่ยวข้อง) ตัวอย่างเช่น สแนปชอต Android 8.1 VNDK มีเวอร์ชัน 27
การใช้สคริปต์ update.py
สคริปต์ update.py
( /development/vndk/snapshot/update.py
) จะทำให้กระบวนการเพิ่ม VNDK snapshot ที่สร้างไว้ล่วงหน้าลงในแผนผังต้นทางเป็นไปโดยอัตโนมัติ โดยจะตรวจจับการสร้างสิ่งประดิษฐ์โดยอัตโนมัติและเติมคุณสมบัติที่เกี่ยวข้องใน Android.bp
ที่สร้างขึ้นอย่างเหมาะสม สคริปต์นี้ทำงานต่อไปนี้:
- ใน
/prebuilts/vndk/v VER
ใช้repo start
เพื่อสร้างสาขา Git ใหม่ - ดึงข้อมูลและแตกไฟล์อาร์ติแฟกต์การสร้างสแนปชอต VNDK
- รัน
gen_buildfiles.py
เพื่อสร้างไฟล์บิลด์อัตโนมัติ (Android.bp
) - รัน
check_gpl_license.py
เพื่อตรวจสอบว่าไลบรารีที่สร้างไว้ล่วงหน้าซึ่งได้รับอนุญาตภายใต้ General Public License (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 snapshot หนึ่งรายการสำหรับพาร์ติชันผู้จำหน่ายปัจจุบันก็เพียงพอแล้ว อย่างไรก็ตาม ในบางกรณี คุณอาจต้องรวมสแน็ปช็อตหลายภาพไว้ในอิมเมจระบบเดียว ตัวอย่างเช่น 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.v VER
เวอร์ชันที่ขาดหายไปจะสร้างข้อผิดพลาดของบิลด์
โมดูล 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.v VER
) โดยที่ 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.v CODE_NAME |
หลังจาก | SDK_VER | SDK_VER | /system/apex/com.android.vndk.v SDK_VER | ||
โมดูลสแน็ปช็อตที่สร้างไว้ล่วงหน้า | VNDK_VER สำหรับภาพรวม | ก่อนหรือหลัง | CODE_NAME หรือ SDK_VER | VNDK_VER | /system_ext/apex/com.android.vndk.v VNDK_VER |
- เวอร์ชันบอร์ด (
BOARD_VNDK_VERSION
) เวอร์ชัน VNDK ที่โมดูลผู้จำหน่ายจำเป็นต้องสร้าง ตั้งค่าเป็นcurrent
หากโมดูลผู้จำหน่ายสามารถเชื่อมโยงกับโมดูลระบบปัจจุบันได้ - เวอร์ชันแพลตฟอร์ม (
PLATFORM_VNDK_VERSION
) เวอร์ชัน VNDK ที่โมดูลระบบปัจจุบันกำลังสร้าง สร้างเฉพาะเมื่อBOARD_VNDK_VERSION
เท่ากับปัจจุบัน - คุณสมบัติเวอร์ชัน (
ro.vndk.version
) คุณสมบัติที่ระบุเวอร์ชัน VNDK ที่ไบนารีและ libs ใน vendor.img จำเป็นต้องเรียกใช้ เก็บไว้ในvendor.img
ที่/vendor/default.prop