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