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
จากแฟล็กinit_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