Android 9 ขึ้นไปรองรับการสร้างพาร์ติชัน product โดยใช้ระบบการสร้างของ Android ก่อนหน้านี้ Android 8.x บังคับให้แยกคอมโพเนนต์เฉพาะ SoC จากพาร์ติชัน system ไปยังพาร์ติชัน vendor โดยไม่จัดสรรพื้นที่สำหรับคอมโพเนนต์เฉพาะ OEM ที่สร้างขึ้นจากระบบการสร้างของ Android Android 9 ขึ้นไปมีสิทธิ์และฟีเจอร์รายการที่อนุญาตเพิ่มเติมที่ใช้กับ priv-app ในพาร์ติชันต่างๆ
เกี่ยวกับการแบ่งส่วนผลิตภัณฑ์
OEM จํานวนมากปรับแต่งภาพระบบ AOSP เพื่อใช้ฟีเจอร์ของตนเอง รวมถึงข้อกําหนดของผู้ให้บริการ อย่างไรก็ตาม การปรับแต่งดังกล่าวทำให้ใช้ภาพระบบเดียวกับ SKU ซอฟต์แวร์หลายรายการไม่ได้ รูปภาพแต่ละรูปต้องไม่ซ้ำกันเพื่อรองรับการปรับแต่ง เช่น กับภาษาหรือผู้ให้บริการที่แตกต่างกัน การใช้พาร์ติชัน product แยกต่างหากเพื่อเก็บข้อมูลการปรับแต่งช่วยให้คุณใช้อิมเมจระบบเดียวกับ SKU ซอฟต์แวร์หลายรายการได้ (พาร์ติชัน system โฮสต์โค้ดทั่วไปที่แชร์ได้กับ SKU ซอฟต์แวร์หลายรายการ) พาร์ติชัน vendor จะยังคงโฮสต์โค้ด BSP สำหรับ SoC โดยเฉพาะ ซึ่งแชร์กับอุปกรณ์หลายเครื่องตาม SoC ที่ระบุได้
การใช้พาร์ติชันแยกกันมีข้อเสียบางประการ เช่น การจัดการพื้นที่ว่างในดิสก์ (ต้องสำรองพื้นที่ไว้บางส่วนเพื่อการเติบโตในอนาคต) และการบำรุงรักษาอินเทอร์เฟซไบนารีของแอปพลิเคชัน (ABI) ที่เสถียรระหว่างพาร์ติชัน ก่อนตัดสินใจใช้พาร์ติชัน product ให้พิจารณาการติดตั้งใช้งาน AOSP ที่ไม่ซ้ำใครและกลยุทธ์การบรรเทาที่เป็นไปได้ (เช่น การแบ่งพาร์ติชันอุปกรณ์ใหม่ระหว่างการอัปเดตแบบ OTA ซึ่ง Google ไม่ได้เป็นผู้ดำเนินการ แต่ OEM บางรายเป็นผู้ดำเนินการ)
การแบ่งพาร์ติชันแบบไดนามิกเป็นโซลูชันที่ดีสำหรับปัญหานี้
การแบ่งส่วนผลิตภัณฑ์และสิทธิ์
ใน Android 9 ขึ้นไป การเปลี่ยนแปลงสิทธิ์และกระบวนการเพิ่มในรายการที่อนุญาตจะส่งผลต่อวิธีให้สิทธิ์ priv-apps ในพาร์ติชัน "product" ไฟล์ permissions.xml ต้องอยู่ในพาร์ติชันเดียวกับ priv-apps การวางไฟล์ permissions.xml ในพาร์ติชัน system สำหรับ priv-apps จะไม่ขยายสิทธิ์เหล่านั้นไปยัง priv-apps ในพาร์ติชัน product แม้ว่าพาร์ติชันแรกจะเป็นส่วนขยายของพาร์ติชันหลังก็ตาม
โปรดดูรายละเอียดเกี่ยวกับสิทธิ์และกระบวนการเพิ่มในรายการที่อนุญาตที่หัวข้อการเพิ่มสิทธิ์ที่มีสิทธิ์ในรายการที่อนุญาต
/oem เดิมเทียบกับ /product
เรามีแอตทริบิวต์ของพาร์ติชัน product 2 ประเภท โดยขึ้นอยู่กับการบังคับใช้อินเทอร์เฟซผลิตภัณฑ์ นอกจากนี้ พาร์ติชัน product ยังแตกต่างจากพาร์ติชัน oem เดิม ดังนี้
| พาร์ติชัน | แอตทริบิวต์ |
|---|---|
oem |
|
product |
|
product (อินเทอร์เฟซที่บังคับใช้) |
|
ด้วยเหตุนี้ Android 9 จึงรองรับพาร์ติชัน product ไปพร้อมกับการรองรับพาร์ติชัน oem แบบเดิมสำหรับอุปกรณ์ที่ต้องใช้พาร์ติชันดังกล่าว หากต้องการแยกพาร์ติชัน product ออกจากพาร์ติชัน system Android 11 รองรับการบังคับใช้อินเทอร์เฟซ product
/product components
พาร์ติชัน product ประกอบด้วยคอมโพเนนต์ต่อไปนี้
- พร็อพเพอร์ตี้ของระบบสำหรับผลิตภัณฑ์ที่เฉพาะเจาะจง (
/product/build.prop) - RRO สำหรับผลิตภัณฑ์ที่เฉพาะเจาะจง (
/product/overlay/*.apk) - แอปเฉพาะผลิตภัณฑ์ (
/product/app/*.apk) - priv-apps สำหรับผลิตภัณฑ์ที่เฉพาะเจาะจง (
/product/priv-app/*.apk) - คลังสำหรับผลิตภัณฑ์ที่เฉพาะเจาะจง (
/product/lib/*) - ไลบรารี Java สำหรับผลิตภัณฑ์โดยเฉพาะ (
/product/framework/*.jar) - การกําหนดค่าระบบเฟรมเวิร์ก Android สําหรับผลิตภัณฑ์โดยเฉพาะ (
/product/etc/sysconfig/*และ/product/etc/permissions/*) - ไฟล์สื่อสำหรับผลิตภัณฑ์ที่เฉพาะเจาะจง (
/product/media/audio/*) bootanimationไฟล์เฉพาะผลิตภัณฑ์
ไม่มี custom_images
คุณใช้ custom_images ไม่ได้ โดยไม่รองรับสิ่งต่อไปนี้
- การติดตั้งโมดูลลงในเป้าหมายที่เฉพาะเจาะจง
custom_imagesรองรับการคัดลอกอาร์ติแฟกต์ลงในอิมเมจ แต่ติดตั้งโมดูลลงในพาร์ติชันที่เฉพาะเจาะจงไม่ได้โดยระบุพาร์ติชันเป้าหมายเป็นส่วนหนึ่งของกฎการสร้าง - การสนับสนุน Soong ไม่สามารถสร้าง
custom_imagesโดยใช้ระบบการบิลด์ Soong - การรองรับการอัปเดต OTA
custom_imagesใช้เป็นรูปภาพ ROM ของโรงงานซึ่งรับการอัปเดต OTA ไม่ได้
รักษา ABI ระหว่างพาร์ติชัน
พาร์ติชัน product ใน Android 9 เป็นส่วนขยายของพาร์ติชัน system ABI ระหว่างพาร์ติชัน product กับ system นั้นไม่เสถียร จึงต้องอัปเกรดทั้ง 2 อย่างพร้อมกัน และ ABI ควรอิงตาม SDK ของระบบ หาก SDK ของระบบไม่ครอบคลุมแพลตฟอร์ม API ทั้งหมดระหว่าง product กับ system OEM จะต้องดูแล ABI ของตนเองระหว่าง 2 พาร์ติชันดังกล่าว
พาร์ติชัน product และ system อาจมีการขึ้นต่อกัน อย่างไรก็ตาม การทดสอบด้วยภาพระบบทั่วไป (GSI) ต้องทำงานอย่างถูกต้องโดยไม่ต้องมีพาร์ติชัน product
เมื่อบังคับใช้อินเทอร์เฟซ product ระบบจะแยกพาร์ติชัน productออกจากพาร์ติชัน system พาร์ติชัน product ใช้เฉพาะอินเทอร์เฟซที่ได้รับอนุญาตจากพาร์ติชัน system
พาร์ติชัน product ต้องไม่ใช้อินเทอร์เฟซที่ไม่เสถียรในพาร์ติชัน vendor ไม่อนุญาตให้มีการโต้ตอบโดยตรงระหว่างพาร์ติชัน product กับ vendor
(SEpolicy จะบังคับใช้)
ใช้การแบ่งส่วนผลิตภัณฑ์
ก่อนใช้พาร์ติชันผลิตภัณฑ์ใหม่ โปรดอ่านการเปลี่ยนแปลงพาร์ติชันผลิตภัณฑ์ที่เกี่ยวข้องใน AOSP จากนั้น หากต้องการตั้งค่า product ให้ใส่ Flag บอร์ดหรือบิลด์ผลิตภัณฑ์ต่อไปนี้
BOARD_USES_PRODUCTIMAGEBOARD_PRODUCTIMAGE_PARTITION_SIZEBOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPEPRODUCT_PRODUCT_PROPERTIESสำหรับ/product/build.propโดยต้องอยู่ภายใน$(call inherit-product path/to/device.mk)ดังตัวอย่างในPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
ติดตั้งโมดูลลงในพาร์ติชันผลิตภัณฑ์
ใช้ Flag การสร้างต่อไปนี้เพื่อติดตั้งโมดูลลงในพาร์ติชัน product
product_specific: trueในAndroid.bpLOCAL_PRODUCT_MODULE := trueในAndroid.mk
เปิดใช้การเปิดเครื่องที่ได้รับการยืนยัน
หากต้องการป้องกันไม่ให้ซอฟต์แวร์ที่เป็นอันตรายแทรกแซงพาร์ติชัน product ให้เปิดใช้การเปิดเครื่องที่ได้รับการยืนยัน (AVB) ของ Android สำหรับพาร์ติชันนั้น (เช่นเดียวกับพาร์ติชัน vendor และ system) หากต้องการเปิดใช้ AVB ให้ใส่ Flag การสร้างต่อไปนี้
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS