พาร์ติชันผลิตภัณฑ์

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
  • อัปเดตไม่ได้ มักกะพริบ 1 ครั้งตอนมาจากโรงงาน
  • สร้างตามรายละเอียดปลีกย่อยเล็กๆ น้อยๆ เช่น การสร้างแบรนด์และสี กำลังมี เนื้อหาการแบ่งพาร์ติชัน oem ที่แตกต่างกันไม่ได้หมายความว่าผลิตภัณฑ์ดังกล่าว ซอฟต์แวร์จะต่างออกไป
  • พาร์ติชัน system ไม่ขึ้นอยู่กับ พาร์ติชัน oem (โดยใช้ oem พาร์ติชันเฉพาะเมื่อพบไฟล์ที่ต้องการ)
  • ใช้ API สาธารณะบนพาร์ติชัน system เท่านั้น
product
  • อัปเดตได้
  • ทำงานร่วมกับอิมเมจของระบบ (อัปเดตร่วมกัน)
  • สร้างขึ้นตามผลิตภัณฑ์หรือตระกูลผลิตภัณฑ์
  • พาร์ติชันระบบขึ้นอยู่กับพาร์ติชัน product ได้
  • ใช้ API ที่ไม่ใช่แบบสาธารณะได้เนื่องจากมีการอัปเดตพร้อมกัน
product (อินเทอร์เฟซที่บังคับ)
  • อัปเดตได้
  • แยกส่วนกับอิมเมจระบบ
  • สร้างขึ้นตามผลิตภัณฑ์หรือตระกูลผลิตภัณฑ์
  • พาร์ติชัน system ไม่ขึ้นอยู่กับ product พาร์ติชัน
  • ใช้ API ที่ซ่อนอยู่ไม่ได้ แต่จะใช้เฉพาะ API สาธารณะและ API ของระบบใน พาร์ติชัน system

ด้วยเหตุนี้ 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.