Vendor Native Development Kit (VNDK) ต้องมีการเปลี่ยนแปลงหลายอย่างกับ Codebase เพื่อแยก ข้อกังวลระหว่างผู้ให้บริการและระบบ ใช้คำแนะนำต่อไปนี้เพื่อเปิดใช้ VNDK ในผู้ให้บริการ/OEM ฐานของโค้ด
สร้างไลบรารีระบบ
ระบบบิลด์มีออบเจ็กต์หลายประเภท รวมถึงไลบรารี (แชร์ คงที่ หรือส่วนหัว) และไบนารี
รูปที่ 1 สร้างไลบรารีระบบ
- อิมเมจระบบใช้ไลบรารี
core
ในอิมเมจของระบบ เหล่านี้vendor
,vendor_available
ใช้ไลบรารีไม่ได้vndk
หรือvndk-sp
ไลบรารีcc_library { name: "libThatIsCore", ... }
- ไลบรารีใช้ไลบรารี
vendor-only
(หรือproprietary
) รูปภาพผู้ให้บริการ ในรูปภาพผู้ให้บริการcc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
- อิมเมจผู้ให้บริการใช้ไลบรารี
vendor_available
รายการจากผู้ให้บริการ รูปภาพ (อาจมีcore
ที่ซ้ำกัน)cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
- อิมเมจผู้ให้บริการใช้ไลบรารี
vndk
ในอิมเมจของระบบcc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
- ไลบรารี
vndk-sp
รายการมีการใช้งานโดยอิมเมจผู้ให้บริการ และโดยอิมเมจของระบบ โดยอ้อมcc_library { name: "libThatIsVndkSp", vendor_available: true, vndk: { enabled: true, support_system_process: true, } ... }
- ไลบรารี
llndk
รายการมีการใช้งานโดยทั้งอิมเมจระบบและอิมเมจของผู้ให้บริการcc_library { name: "libThatIsLlndk", llndk: { symbol_file: "libthatisllndk.map.txt" } ... }
เมื่อทำเครื่องหมาย lib เป็น vendor_available:true
ระบบจะถือว่ารูปนั้นสร้างขึ้น
2 ครั้ง:
- ครั้งเดียวสำหรับแพลตฟอร์ม (จึงติดตั้งใน
/system/lib
) - ครั้งเดียวสำหรับผู้ให้บริการ (และจึงติดตั้งใน
/vendor/lib
หรือ VNDK APEX)
ไลบรารีเวอร์ชันของผู้ให้บริการสร้างขึ้นด้วย -D__ANDROID_VNDK__
คอมโพเนนต์ระบบส่วนตัวที่อาจมีการเปลี่ยนแปลงอย่างมากในเวอร์ชันต่อๆ ไปของ
Android ถูกปิดใช้ด้วยการแจ้งว่าไม่เหมาะสมนี้ นอกจากนี้ ไลบรารีต่างๆ ยังส่งออก
ชุดส่วนหัวต่างๆ (เช่น liblog
) ตัวเลือกเฉพาะสำหรับ
สามารถระบุรูปแบบผู้ให้บริการของเป้าหมายในไฟล์ Android.bp
ได้
ใน:
target: { vendor: { … } }
เปิดใช้ VNDK สำหรับฐานของโค้ด
วิธีเปิดใช้ VNDK สำหรับฐานของโค้ด
- กําหนดการมีสิทธิ์โดยคํานวณขนาดที่จําเป็นของ
พาร์ติชัน
vendor.img
และsystem.img
- เปิดใช้
BOARD_VNDK_VERSION=current
คุณสามารถเพิ่มBoardConfig.mk
หรือสร้างคอมโพเนนต์โดยใช้ URL ดังกล่าวโดยตรง (เช่นm -j BOARD_VNDK_VERSION=current MY-LIB
)
หลังจากเปิดใช้ BOARD_VNDK_VERSION=current
ระบบบิลด์
บังคับใช้ข้อกำหนดด้านทรัพยากร Dependency และส่วนหัวต่อไปนี้
จัดการทรัพยากร Dependency
ออบเจ็กต์ vendor
ที่ขึ้นอยู่กับคอมโพเนนต์ core
ที่ไม่มีอยู่ใน vndk
หรือเป็นออบเจ็กต์ vendor
ต้องแก้ไขปัญหาโดยใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
- นำทรัพยากร Dependency ออกได้
- หาก
vendor
เป็นเจ้าของคอมโพเนนต์core
ก็จะสามารถ ทำเครื่องหมายเป็นvendor_available
หรือvendor
- การเปลี่ยนแปลงที่ทำให้ออบเจ็กต์หลักของ
vndk
อาจจะเป็น เป็น Google
นอกจากนี้ หากคอมโพเนนต์ core
มีทรัพยากร Dependency ใน
คอมโพเนนต์ vendor
ต้องสร้างคอมโพเนนต์ vendor
ลงในคอมโพเนนต์ core
หรือทรัพยากร Dependency ต้องเป็น
ด้วยวิธีการอื่น (เช่น การนำทรัพยากร Dependency ออกหรือการย้ายข้อมูล
ที่พึ่งพิงในคอมโพเนนต์ vendor
)
จัดการส่วนหัว
ต้องนำการพึ่งพาส่วนหัวร่วมออกเพื่อให้ระบบของบิลด์ทราบ
สร้างส่วนหัวโดยมีหรือไม่มี -D__ANDROID_VNDK__
ตัวอย่างเช่น ส่วนหัว libutils เช่น utils/StrongPointer.h
สามารถ
ยังคงเข้าถึงได้โดยใช้ไลบรารีส่วนหัว
libutils_headers
ส่วนหัวบางรายการ (เช่น unistd.h
) ไม่สามารถรวมแบบทางอ้อมได้อีกต่อไป
แต่สามารถใส่ลงในเครื่องได้
สุดท้ายนี้ ส่วนสาธารณะของ private/android_filesystem_config.h
ถูกย้ายไปที่ cutils/android_filesystem_config.h
แล้ว เพื่อจัดการ
ส่วนหัวเหล่านี้ โปรดดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้
- นำการอ้างอิงกับ
private/android_filesystem_config.h
โดยแทนที่ทั้งหมด มาโครAID_*
รายการที่มีgetgrnam
/getpwnam
สายหากเป็นไปได้ ดังตัวอย่างต่อไปนี้(uid_t)AID_WIFI
เปลี่ยนเป็นgetpwnam("wifi")->pw_uid
(gid_t)AID_SDCARD_R
เปลี่ยนเป็นgetgrnam("sdcard_r")->gr_gid
private/android_filesystem_config.h
- สําหรับ AIS แบบฮาร์ดโค้ด ให้ใส่ข้อมูลต่อไปนี้
cutils/android_filesystem_config.h