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_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
PRODUCT_PRODUCT_PROPERTIES
สำหรับ/product/build.prop
โดยต้องอยู่ภายใน$(call inherit-product path/to/device.mk)
ดังตัวอย่างในPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
ติดตั้งโมดูลลงในพาร์ติชันผลิตภัณฑ์
ใช้ Flag การสร้างต่อไปนี้เพื่อติดตั้งโมดูลลงในพาร์ติชัน product
product_specific: true
ในAndroid.bp
LOCAL_PRODUCT_MODULE := true
ในAndroid.mk
เปิดใช้การเปิดเครื่องที่ได้รับการยืนยัน
หากต้องการป้องกันไม่ให้ซอฟต์แวร์ที่เป็นอันตรายแทรกแซงพาร์ติชัน product
ให้เปิดใช้การเปิดเครื่องที่ได้รับการยืนยัน (AVB) ของ Android สำหรับพาร์ติชันนั้น (เช่นเดียวกับพาร์ติชัน vendor
และ system
) หากต้องการเปิดใช้ AVB ให้ใส่ Flag การสร้างต่อไปนี้
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS