กำลังสร้างสแนปชอตผู้ขาย

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/v VER /$(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 snapshot และ vendor snapshot ให้ตั้งค่า 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