מחיצות מוצרים

Android 9 ואילך כולל תמיכה בפיתוח product מחיצות באמצעות מערכת ה-build של Android. בעבר, מערכת Android 8.x אוכפת את ההפרדה בין רכיבים ספציפיים ל-SoC מהמחיצה system אל vendor אחרת ללא צורך במקום אחסון ייעודי לרכיבים ספציפיים ל-OEM (יצרן הציוד המקורי) מערכת ה-build של Android. ב-Android מגרסה 9 ואילך יש תכונות נוספות הרשאות ותכונות של הוספה לרשימת ההיתרים שחלות על האפליקציות של ההרשאות במחיצות שונות.

מידע על מחיצות מוצרים

יצרני ציוד מקורי רבים מתאימים אישית את תמונת מערכת ה-AOSP כדי להטמיע תכונות משלהם, וגם את הדרישות של הספק. אבל התאמות אישיות כאלה מאפשרות אין אפשרות להשתמש בתמונת מערכת אחת למספר מק"טים של תוכנות. כל אחד התמונה חייבת להיות שונה כדי לתמוך בהתאמות אישיות, למשל לוקאלים או ספקים שונים. באמצעות מחיצת product נפרדת כדי שתכיל התאמות אישיות, להשתמש בתמונת מערכת אחת עבור מספר מק"טים של תוכנות. (ה המחיצה של system מארחת קוד גנרי שאפשר לשתף ביניהם מק"טים רבים של תוכנות). המחיצה vendor ממשיכה לארח קוד BSP ספציפי ל-SoC שאפשר לשתף בין כמה על סמך ה-SoC הנתון.

לשימוש במחיצות נפרדות יש כמה חסרונות, למשל לניהול שטח הדיסק (יש להשאיר כמות מוגבלת של שטח פנוי לעתיד צמיחה) ו ממשק בינארי יציב של אפליקציה (ABI) בין מחיצות. לפני אם מחליטים להשתמש במחיצות ב-product, חשוב לקחת את הזמן הטמעת AOSP ייחודית ושיטות לצמצום הבעיה (כמו חלוקת המכשיר למחיצות (partitioning) במהלך שידור אלחוטי (OTA) עדכון, שלא נעשה על ידי Google אבל נעשה על ידי מספר יצרני ציוד מקורי). חלוקה דינמית למחיצות (partitioning) היא פתרון טוב לבעיה.

הרשאות וחלוקות של מוצרים

ב-Android 9 ואילך, שינוי בהרשאות ותהליך רשימת ההיתרים משפיע על האופן שבו מעניקים הרשאות לאפליקציות את מחיצות 'המוצרים'. הקובץ permissions.xml חייבות להימצא באותה מחיצה כמו האפליקציות הספריות. מיקום קובץ permissions.xml במחיצה system לאפליקציות priv-apps לא מרחיבות את ההרשאות האלו לאפליקציות פרטיות ב-product למרות שהראשונה היא הרחבה של השנייה. בסעיפים הבאים אפשר לקרוא מידע נוסף על ההרשאות ותהליכי ההוספה לרשימת ההיתרים רשימת היתרים של הרשאות.

Legacy /oem לעומת /product

יש שני סוגי מאפיינים של המחיצה 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)
  • RROs ספציפיים למוצר (/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 יש תמיכה בהעתקת פריטי מידע שנוצרו בתהליך פיתוח (Artifact) לתמונה, אבל לא יכול להתקין מודול במחיצה ספציפית על ידי ציון היעד שלו כחלק מכלל build.
  • תמיכה ב-Soong. custom_images לא יכול להיות שפותח באמצעות מערכת ה-build של Sog.
  • תמיכה בעדכון OTA. custom_images משמשים כ-ROM להגדרות המקוריות תמונות שלא יכולות לקבל עדכוני OTA.

תחזוקת ABI בין מחיצות

המחיצה product ב-Android 9 היא הרחבה של מחיצה system. יש ABI חלש בין product ו-system מחיצות, כך ששתיהן צריכות להיות בו-זמנית, וה-ABI צריך להיות מבוסס על SDK של המערכת. אם ערכת ה-SDK של המערכת לא מכסה את כל פלטפורמות ה-API בין product לבין system, יצרני ציוד מקורי חייבים לתחזק ממשקי ABI משלהם בין בין שתי המחיצות.

המחיצות product ו-system יכולות להכיל שתלויות ביניהם. אבל בדיקות עם תמונת מערכת גנרית (GSI) חייבת לפעול בצורה תקינה ללא המחיצה product.

כשמתבצעת אכיפה של ממשקי product, המדיניות product המחיצה מופרדת באמצעות המחיצה system. product המחיצה משתמשת רק בממשקים המורשים מהמחיצה system.

אסור שתהיה למחיצת product תלות דרך ממשקים לא יציבים מחיצה vendor. אינטראקציה ישירה בין מחיצות product ו-vendor אסורות. (נאכף על ידי SEpolicy.)

יישום של מחיצות מוצרים

לפני ההטמעה של קטגוריית מוצרים חדשה, כדאי לעיין קשורים שינויים במחיצות המוצרים ב-AOSP. לאחר מכן, כדי להגדיר את product, כוללים את הדגלים הבאים של לוחות או של רכיבי בניית מוצרים:

  • 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 הפעלה מאומתת (AVB) של המחיצה הזו (בדיוק כמו בשביל vendor ו-system מחיצות). כדי להפעיל AVB: כוללים את הדגלים הבאים של build: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.