Android 11 รองรับอาร์ติแฟกต์การสร้างสแนปชอต VNDK
และสแนปชอตของผู้ให้บริการ ซึ่งคุณใช้สร้าง vendor.img
ได้โดยไม่คำนึงถึง
เวอร์ชัน Android ในโครงสร้างแหล่งที่มา ซึ่งจะช่วยให้ใช้รูปภาพเวอร์ชันผสมได้ เช่น รูปภาพของผู้ให้บริการเวอร์ชันเก่าและรูปภาพของระบบเวอร์ชันใหม่
ระบบไม่รองรับเวอร์ชันอิมเมจแบบผสมสำหรับรายการต่อไปนี้
Android.mk.
เนื่องจาก Soong สร้างสแนปชอตของผู้ให้บริการ โมดูลที่กำหนดไว้ในAndroid.mk
จึงไม่ได้บันทึกเป็นสแนปชอตของผู้ให้บริการ (โมดูลที่เป็นกรรมสิทธิ์ของ SoC ในAndroid.mk
ก็ไม่รับประกันว่าจะใช้งานได้เช่นกัน)เครื่องฆ่าเชื้อ สแนปชอตของผู้ให้บริการและ VNDK ไม่รองรับ Sanitizer เนื่องจากต้องสร้างตัวแปร Sanitizer แยกต่างหาก
เกี่ยวกับภาพรวมผู้ให้บริการ
สแนปชอตของผู้ให้บริการคือสแนปชอตที่ 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
ติดตั้งสแนปชอตของผู้ให้บริการ
หากต้องการติดตั้ง Snapshot ของผู้ให้บริการ ให้ไปที่ไดเรกทอรีปลายทางและใช้ คำสั่งต่อไปนี้
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