Android 9 ขึ้นไปรองรับการสร้างพาร์ติชัน product
โดยใช้ระบบบิลด์ Android ก่อนหน้านี้ Android 8.x บังคับใช้การแยกส่วนประกอบเฉพาะ SoC จากพาร์ติชัน system
ไปยังพาร์ติชัน vendor
โดยไม่ต้องจัดสรรพื้นที่สำหรับส่วนประกอบเฉพาะของ OEM ที่สร้างขึ้นจากระบบ Android build Android 9 ขึ้นไปให้ สิทธิ์เพิ่มเติมและฟีเจอร์ไวท์ลิสต์ ที่ใช้กับแอปส่วนตัวในพาร์ติชั่นต่างๆ
เกี่ยวกับพาร์ติชันผลิตภัณฑ์
OEM หลายรายปรับแต่งอิมเมจระบบ AOSP เพื่อใช้คุณสมบัติของตนเอง รวมถึงข้อกำหนดของผู้ให้บริการ อย่างไรก็ตาม การปรับแต่งดังกล่าวทำให้ไม่สามารถใช้อิมเมจระบบเดียวสำหรับ SKU ของซอฟต์แวร์หลายรายการได้ รูปภาพแต่ละรูปจะต้องแตกต่างกันเพื่อรองรับการปรับแต่ง เช่น ด้วยสถานที่หรือผู้ให้บริการที่แตกต่างกัน การใช้พาร์ติชัน product
แยกต่างหากเพื่อให้มีการปรับแต่งทำให้สามารถใช้อิมเมจระบบเดียวสำหรับ SKU ของซอฟต์แวร์หลายรายการได้ (พาร์ติชัน system
โฮสต์รหัสทั่วไปที่สามารถแชร์ระหว่าง SKU ของซอฟต์แวร์จำนวนมากได้) พาร์ติชัน vendor
ยังคงโฮสต์โค้ด BSP เฉพาะ SoC ซึ่งสามารถแชร์ระหว่างอุปกรณ์หลายเครื่องโดยอิงตาม SoC ที่กำหนด
การใช้พาร์ติชั่นแยกกันมีข้อเสียบางประการ เช่น การจัดการพื้นที่ดิสก์ (พื้นที่ที่จำกัดต้องสงวนไว้สำหรับการเติบโตในอนาคต) และ การรักษา application binary interface (ABI) ที่เสถียร ระหว่างพาร์ติชั่น ก่อนที่จะตัดสินใจใช้พาร์ติชัน product
โปรดใช้เวลาพิจารณาการใช้งาน AOSP เฉพาะของคุณและกลยุทธ์การบรรเทาที่เป็นไปได้ (เช่น การแบ่งพาร์ติชันอุปกรณ์ระหว่าง การอัปเดตแบบ over-the-air (OTA) ซึ่งไม่ได้ดำเนินการโดย Google แต่ดำเนินการโดย OEM บางราย ). การแบ่งพาร์ติชันแบบไดนามิก จะเป็นทางออกที่ดีสำหรับสิ่งนี้
พาร์ติชันผลิตภัณฑ์และการอนุญาต
ใน Android 9 และสูงกว่า การเปลี่ยนแปลงในการอนุญาตและกระบวนการไวท์ลิสต์จะส่งผลต่อวิธีที่คุณให้สิทธิ์แก่แอปส่วนตัวบนพาร์ติชัน "ผลิตภัณฑ์" ของคุณ ไฟล์ permissions.xml
ต้องอยู่ในพาร์ติชันเดียวกับแอป priv การวางไฟล์ permissions.xml
ในพาร์ติชัน system
สำหรับแอป priv จะไม่ขยายสิทธิ์เหล่านั้นไปยังแอป priv ในพาร์ติชัน product
แม้ว่าไฟล์แรกจะเป็นส่วนขยายของไฟล์หลังก็ตาม สำหรับรายละเอียดเกี่ยวกับการอนุญาตและกระบวนการไวท์ลิสต์ โปรดดูที่ การอนุญาตสิทธิ์แบบมีสิทธิพิเศษ
มรดก /oem กับ /ผลิตภัณฑ์
เรามีแอตทริบิวต์สองประเภทของพาร์ติชัน product
ขึ้นอยู่กับ การบังคับใช้อินเทอร์เฟซผลิตภัณฑ์ นอกจากนี้ พาร์ติชัน product
ยังแตกต่างจากพาร์ติชัน oem
ดั้งเดิม:
ฉากกั้นห้อง | คุณลักษณะ |
---|---|
oem |
|
product |
|
product (อินเทอร์เฟซที่บังคับใช้) |
|
ด้วยเหตุผลเหล่านี้ Android 9 จึงรองรับพาร์ติชัน product
ในขณะที่ยังคงรองรับพาร์ติชัน oem
รุ่นเก่าสำหรับอุปกรณ์ที่ขึ้นอยู่กับพาร์ติชันนั้น หากต้องการแยกพาร์ติชัน product
ออกจากพาร์ติชัน system
Android 11 รองรับ การบังคับใช้อินเทอร์เฟซ product
/ส่วนประกอบของผลิตภัณฑ์
พาร์ติชัน product
ประกอบด้วยส่วนประกอบต่อไปนี้:
- คุณสมบัติระบบเฉพาะผลิตภัณฑ์ (
/product/build.prop
) - RRO เฉพาะผลิตภัณฑ์ (
/product/overlay/*.apk
) - แอพเฉพาะผลิตภัณฑ์ (
/product/app/*.apk
) - แอปส่วนตัวเฉพาะผลิตภัณฑ์ (
/product/priv-app/*.apk
) - ไลบรารีเฉพาะผลิตภัณฑ์ (
/product/lib/*
) - ไลบรารี Java เฉพาะผลิตภัณฑ์ (
/product/framework/*.jar
) - การกำหนดค่าระบบ Android Framework เฉพาะผลิตภัณฑ์ (
/product/etc/sysconfig/*
และ/product/etc/permissions/*
) - ไฟล์สื่อเฉพาะผลิตภัณฑ์ (
/product/media/audio/*
) - ไฟล์ภาพ
bootanimation
เฉพาะผลิตภัณฑ์
ไม่มี custom_images
คุณไม่สามารถใช้ custom_images
พวกเขาขาดการสนับสนุนดังต่อไปนี้:
- การติดตั้งโมดูลเข้าไปในเป้าหมายเฉพาะ
custom_images
รองรับการคัดลอกส่วนต่าง ๆ ลงในรูปภาพ แต่ไม่สามารถติดตั้งโมดูลลงในพาร์ติชันเฉพาะโดยการระบุพาร์ติชันเป้าหมายให้เป็นส่วนหนึ่งของกฎการสร้าง - ซองสนับสนุนครับ .
custom_images
ไม่สามารถสร้างได้โดยใช้ระบบ Soong build - รองรับการอัพเดต OTA
custom_images
ใช้เป็นอิมเมจ ROM จากโรงงานที่ไม่สามารถรับการอัปเดต OTA ได้
การรักษา ABIs ระหว่างพาร์ติชัน
พาร์ติชัน product
ใน Android 9 เป็นส่วนขยายของพาร์ติชัน system
มี ABI ที่อ่อนแอระหว่าง product
และพาร์ติชัน system
ดังนั้นทั้งสองจึงต้องอัปเกรดพร้อมกัน และ ABI ควรเป็นแบบ SDK ของระบบ หาก SDK ของระบบไม่ครอบคลุมพื้นผิว API ทั้งหมดระหว่าง product
และ system
OEM จะต้องรักษา ABI ของตนเองระหว่างทั้งสองพาร์ติชัน
พาร์ติชัน product
และพาร์ติชัน system
สามารถพึ่งพาซึ่งกันและกันได้ อย่างไรก็ตาม การทดสอบกับ Generic System Image (GSI) จะต้องทำงานอย่างถูกต้องหากไม่มีพาร์ติชัน product
เมื่อบังคับใช้อินเทอร์เฟซ product
พาร์ติชัน product
จะถูกแยกออกจากพาร์ติชัน system
พาร์ติชัน product
ใช้เฉพาะอินเทอร์เฟซที่ได้รับอนุญาตจากพาร์ติชัน system
เท่านั้น
พาร์ติชัน product
ต้องไม่มีการขึ้นต่อกันผ่านอินเทอร์เฟซที่ไม่เสถียรบนพาร์ติชัน vendor
ห้ามมีปฏิสัมพันธ์โดยตรงระหว่างพาร์ติชัน product
และ vendor
(สิ่งนี้บังคับใช้โดย SEpolicy)
การใช้พาร์ติชันผลิตภัณฑ์
ก่อนที่จะใช้พาร์ติชันผลิตภัณฑ์ใหม่ ให้ตรวจสอบ การเปลี่ยนแปลงพาร์ติชันผลิตภัณฑ์ที่เกี่ยวข้องใน AOSP จากนั้น ในการตั้งค่า product
ให้รวมบอร์ดหรือแฟล็ก product-build ต่อไปนี้:
-
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
การติดตั้งโมดูลในพาร์ติชันผลิตภัณฑ์
ใช้แฟล็ก build ต่อไปนี้เพื่อติดตั้งโมดูลลงในพาร์ติชัน product
-
product_specific: true
ในAndroid.bp
-
LOCAL_PRODUCT_MODULE := true
ในAndroid.mk
กำลังเปิดใช้งานการบูตที่ตรวจสอบแล้ว
เพื่อป้องกันไม่ให้พาร์ติชัน product
ถูกแก้ไขโดยซอฟต์แวร์ที่เป็นอันตราย ให้เปิดใช้งาน Android Verified Boot (AVB) สำหรับพาร์ติชันนั้น (เช่นเดียวกับที่คุณทำกับ vendor
และพาร์ติชัน system
) หากต้องการเปิดใช้งาน AVB ให้รวมแฟล็กบิลด์ต่อไปนี้: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS