Android 11 รองรับอาร์ติแฟกต์บิลด์ VNDK และสแนปชอตผู้ให้บริการ ซึ่งคุณใช้บิลด์ vendor.img
ได้ไม่ว่า Android ในแผนผังต้นทางจะเป็นเวอร์ชันใดก็ตาม ซึ่งจะช่วยให้ใช้ภาพเวอร์ชันต่างๆ ได้ เช่น เวนเดอร์รายเก่าและภาพระบบเวอร์ชันใหม่
ระบบไม่รองรับรูปภาพผสมเวอร์ชันต่อไปนี้
Android.mk.
เนื่องจาก Soong จะสร้างภาพรวมของผู้ให้บริการ ระบบจะไม่บันทึกโมดูลที่กําหนดไว้ในAndroid.mk
เป็นภาพรวมของผู้ให้บริการ (นอกจากนี้ ระบบยังไม่รับประกันว่าโมดูลที่เป็นกรรมสิทธิ์ของ SoC ในAndroid.mk
จะทํางานได้)เครื่องฆ่าเชื้อ สแน็ปชอตของผู้ให้บริการและ VNDK ไม่รองรับโปรแกรมตรวจสอบเนื่องจากต้องสร้างตัวแปรของโปรแกรมตรวจสอบแยกต่างหาก
เกี่ยวกับภาพรวมผู้ให้บริการ
สแนปชอตของผู้ให้บริการคือสแนปชอตที่เป็นของ OEM ซึ่งเป็นชุดโมดูล C++ ที่คอมไพล์ไว้ล่วงหน้าซึ่งติดตั้งใน /vendor
แต่ได้รับการดูแลรักษาใน AOSP หากไม่จับภาพสแนปชอตของผู้ให้บริการใน Android เวอร์ชันก่อนหน้า การอัปเกรดไปใช้ Android เวอร์ชันใหม่อาจทำให้พาร์ติชันผู้ให้บริการเสียหายได้ เนื่องจากอาจนำโมดูลสแนปชอตของผู้ให้บริการออกหรือเปลี่ยนแปลงได้โดยที่ไม่ต้องใช้ API หรือ ABI ร่วมกัน
สแนปชอตผู้ให้บริการมีโมดูลต่อไปนี้บน AOSP
- ไลบรารีที่ใช้ร่วมกัน คงที่ และส่วนหัวที่มี
vendor: true
หรือvendor_available: true
- ไลบรารีแบบคงที่ของ VNDK ที่มี
vendor_available: true
- ไฟล์ปฏิบัติการและไฟล์ออบเจ็กต์ที่มี
vendor: true
หรือvendor_available: true
ระบบจะถือว่าโมดูลที่อยู่ในไดเรกทอรีต่อไปนี้เป็นโค้ดฮาร์ดแวร์ของ SoC และจะไม่สนใจ
device/
vendor/
hardware/
ยกเว้นhardware/interfaces
hardware/libhardware
hardware/libhardware_legacy
รหัสฮาร์ดแวร์ของ SoC อาจอยู่ในไดเรกทอรีอื่นๆ ด้วย ขณะนี้ภาพรวมของผู้ให้บริการยังไม่รองรับการกำหนดค่าดังกล่าว
สร้างสแนปชอตผู้ให้บริการ
สร้างสแนปชอตผู้ให้บริการโดยใช้คำสั่งต่อไปนี้
. build/envsetup.sh
lunch target
m dist vendor-snapshot
คำสั่งเหล่านี้จะสร้างไฟล์ vendor-$(TARGET_DEVICE).zip
ใน $DIST_DIR
ตัวอย่างต่อไปนี้แสดงไฟล์ ZIP ของภาพรวมผู้ให้บริการ
vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│ ├── binary -> binary files, *.json files
│ ├── header -> *.json files
│ ├── object -> *.o files, *.json files
│ ├── shared -> *.so files, *.json files
│ └── static -> *.a files, *.json files
├── arch-arm-armv8-a -> (arch-arm64-armv8-a)
├── configs -> *.rc files, *.xml files
├── include -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES -> license txt files
- ไฟล์ JSON มีแฟล็ก เช่น ชื่อโมดูล ไดเรกทอรีที่ส่งออก ไฟล์
init_rc
และไฟล์vintf_fragments
- ไดเรกทอรี
configs
มีไฟล์.rc
และ.xml
จาก Flaginit_rc
และvintf_fragments
ติดตั้งสแนปชอตของผู้ให้บริการ
หากต้องการติดตั้งสแนปชอตของผู้ให้บริการ ให้ไปที่ไดเรกทอรีปลายทางและใช้คำสั่งต่อไปนี้
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VER
คำสั่งนี้จะสร้าง
/vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp
ตัวอย่างต่อไปนี้แสดงโครงสร้างไดเรกทอรีของภาพรวมผู้ให้บริการ
vendor/vendor name/vendor_snapshot/
├── v30
│ ├── arm64
│ │ ├── arch-arm64-armv8-a
│ │ │ ├── binary -> (prebuilt libs)
│ │ │ ├── object -> (prebuilt libs)
│ │ │ ├── shared -> (prebuilt libs)
│ │ │ └── static -> (prebuilt libs)
│ │ ├── arch-arm-armv8-a -> (same as above)
│ │ ├── configs -> (config files)
│ │ ├── include -> (exported header files)
│ │ ├── NOTICE_FILES -> (license files)
│ │ └── Android.bp -> (snapshot modules)
│ ├── arm -> (same as above)
│ ├── x86_64 -> (same as above)
│ └── x86 -> (same as above)
└── (other vendor versions) -> (same as above)
สร้างอิมเมจของผู้ให้บริการ
เมื่อใช้อาร์ติแฟกต์การสร้างสแนปชอต VNDK และภาพรวมของผู้ให้บริการ คุณจะสร้าง vendor.img
ได้โดยไม่คำนึงถึงเวอร์ชัน Android ในซอร์สทรี ซึ่งทำให้สร้างอิมเมจได้หลายเวอร์ชัน หลังจากติดตั้งทั้งสแนปชอต VNDK และสแนปชอตของผู้ให้บริการแล้ว ให้ตั้งค่า BOARD_VNDK_VERSION
เป็นเวอร์ชันของผู้ให้บริการ เช่น
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
เมื่อตั้งค่า BOARD_VNDK_VERSION
เป็นค่าอื่นที่ไม่ใช่ current
ระบบจะดำเนินการดังนี้
- เปิดใช้โมดูลสแนปชอต VNDK และโมดูลสแนปชอตของผู้ให้บริการของ
BOARD_VNDK_VERSION
โมดูลภาพรวมแต่ละรายการจะลบล้างโมดูลแหล่งที่มา C++ ที่มีชื่อเดียวกัน - ตั้งค่า
ro.vndk.version
เป็นBOARD_VNDK_VERSION
- ติดตั้งโมดูลสแนปชอต VNDK ของ
BOARD_VNDK_VERSION
ถึงsystem_ext