Android 9 ขึ้นไปมีการรองรับการสร้าง
product
พาร์ติชันโดยใช้ระบบบิลด์ของ Android ก่อนหน้านี้
Android 8.x บังคับใช้การแยกคอมโพเนนต์เฉพาะ SoC
จากพาร์ติชัน system
ไปยัง vendor
โดยไม่ต้องแบ่งพื้นที่สำหรับคอมโพเนนต์เฉพาะ OEM ที่สร้างขึ้นจาก
ระบบบิลด์ของ Android Android 9 ขึ้นไปมอบฟีเจอร์
สิทธิ์
และฟีเจอร์ที่อนุญาตพิเศษที่ใช้กับแอป Priv ในพาร์ติชันต่างๆ
เกี่ยวกับพาร์ติชันผลิตภัณฑ์
OEM หลายรายปรับแต่งอิมเมจระบบ AOSP เพื่อใช้ฟีเจอร์ของตนเอง
และข้อกำหนดของผู้ให้บริการ แต่การปรับแต่งดังกล่าวทำให้
เป็นไปไม่ได้ที่จะใช้อิมเมจระบบเดียวสำหรับ SKU ของซอฟต์แวร์หลายรายการ ชิ้น
ภาพจะต้องแตกต่างกันเพื่อรองรับการกำหนดค่า เช่น
สถานที่หรือผู้ให้บริการต่างๆ การใช้
พาร์ติชัน product
ที่แยกต่างหากเพื่อให้มีการปรับแต่ง
ที่จะใช้อิมเมจระบบเดียวสำหรับ SKU ของซอฟต์แวร์หลายรายการได้ (พารามิเตอร์
พาร์ติชัน system
โฮสต์โค้ดทั่วไปที่แชร์ได้ระหว่าง
SKU ของซอฟต์แวร์หลายรายการ) พาร์ติชัน vendor
ยังคงโฮสต์ต่อไป
รหัส BSP เฉพาะ SoC ที่แชร์ได้ระหว่าง
อุปกรณ์ตาม SoC ที่กำหนด
การใช้พาร์ติชันแยกกันมีข้อเสียบางอย่าง เช่น
การจัดการพื้นที่ในดิสก์ (ต้องสงวนพื้นที่ไว้อย่างจำกัดสำหรับอนาคต
การเติบโต) และการรักษา
อินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน (ABI) ที่เสถียรระหว่างพาร์ติชัน ก่อน
ตัดสินใจเลือกใช้พาร์ติชัน product
โปรดใช้เวลาพิจารณา
การใช้ AOSP เฉพาะและกลยุทธ์การบรรเทาปัญหาที่เป็นไปได้ (เช่น
การแบ่งพาร์ติชันของอุปกรณ์ใหม่ระหว่างการเชื่อมต่อผ่านอากาศ (OTA)
(OTA) ซึ่งไม่ใช่การดำเนินการโดย Google แต่ดำเนินการโดย OEM บางราย)
การแบ่งพาร์ติชันแบบไดนามิกคือ
วิธีแก้ปัญหาที่ดี
พาร์ติชันและสิทธิ์ของผลิตภัณฑ์
ใน Android 9 ขึ้นไป มีการเปลี่ยนแปลงสิทธิ์
และการอนุญาตพิเศษจะมีผลต่อวิธีที่คุณให้สิทธิ์แอปพิเศษใน
พาร์ติชัน "ผลิตภัณฑ์" ไฟล์ permissions.xml
ต้องอยู่ในพาร์ติชันเดียวกับแอป Priv การวาง
permissions.xml
ไฟล์ในพาร์ติชัน system
สำหรับแอป Priv จะไม่ขยายสิทธิ์เหล่านั้นไปยังแอป priv- ใน product
พาร์ติชัน แม้ว่าตัวเลือกแรกจะเป็นส่วนขยายของแบบหลังก็ตาม
สำหรับรายละเอียดเกี่ยวกับสิทธิ์และขั้นตอนการอนุญาตพิเศษ โปรดดูที่
รายการที่อนุญาตซึ่งเป็นกรรมสิทธิ์
/oem เดิมกับ /product
เรามีแอตทริบิวต์ 2 ประเภทของพาร์ติชัน 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
) - แอป priv- เฉพาะผลิตภัณฑ์ (
/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 - การรองรับการอัปเดต 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
ติดตั้งโมดูลลงในพาร์ติชันผลิตภัณฑ์
ใช้แฟล็กบิลด์ต่อไปนี้เพื่อติดตั้งโมดูลไปยังพาร์ติชัน product
product_specific: true
ในAndroid.bp
LOCAL_PRODUCT_MODULE := true
ในAndroid.mk
เปิดใช้การเปิดเครื่องที่ได้รับการยืนยัน
เพื่อป้องกันไม่ให้พาร์ติชัน product
ถูกงัดแงะโดย
ซอฟต์แวร์ที่เป็นอันตราย, เปิดใช้งาน
แอนดรอยด์
การเปิดเครื่องที่ได้รับการยืนยัน (AVB) สำหรับพาร์ติชันนั้น (เช่นเดียวกับที่คุณทำกับ
พาร์ติชัน vendor
และ system
) วิธีเปิดใช้ AVB
มีแฟล็กบิลด์ต่อไปนี้
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.