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

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