מחיצות מוצר

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

לגבי מחיצות מוצרים

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

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

מחיצות מוצר והרשאות

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

מדור קודם /oem לעומת /מוצר

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

חֲלוּקָה תכונות
oem
  • לא ניתן לעדכון; בדרך כלל הבזיק פעם אחת במפעל.
  • נבנה לפי וריאציות קטנות, כגון מיתוג וצבע. תוכן מחיצת oem שונה לא אומר שתוכנת המוצר שונה.
  • מחיצת system אינה תלויה במחיצת ה- oem . (הוא משתמש במחיצת oem רק כאשר נמצא שם קובץ ספציפי).
  • משתמש רק ב-API ציבורי במחיצת system .
product
  • ניתן לעדכון
  • יחד עם תמונת המערכת (הם מתעדכנים ביחד)
  • נבנה לפי מוצר או משפחות מוצרים.
  • מחיצת המערכת יכולה להיות תלויה במחיצת product .
  • יכול להשתמש בממשקי API שאינם ציבוריים מכיוון שהם מתעדכנים בו-זמנית.
product (ממשקים נכפים)
  • ניתן לעדכון
  • מנותקת עם תמונת המערכת.
  • נבנה לפי מוצר או משפחות מוצרים.
  • מחיצת system אינה תלויה במחיצת product .
  • לא ניתן להשתמש בממשקי API מוסתרים, אלא משתמש רק בממשקי API ציבוריים ומערכתיים במחיצת system .

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

/רכיבי מוצר

מחיצת product מכילה את הרכיבים הבאים:

  • מאפייני מערכת ספציפיים למוצר ( /product/build.prop )
  • RROs ספציפיים למוצר ( /product/overlay/*.apk )
  • אפליקציות ספציפיות למוצר ( /product/app/*.apk )
  • אפליקציות פרטיות ספציפיות למוצר ( /product/priv-app/*.apk )
  • ספריות ספציפיות למוצר ( /product/lib/* )
  • ספריות ג'אווה ספציפיות למוצר ( /product/framework/*.jar )
  • תצורות מערכת Android Framework ספציפיות למוצר ( /product/etc/sysconfig/* ו- /product/etc/permissions/* )
  • קובצי מדיה ספציפיים למוצר ( /product/media/audio/* )
  • קבצי bootanimation ספציפיים למוצר

אין תמונות_מותאם אישית

אינך יכול להשתמש custom_images . אין להם תמיכה לדברים הבאים:

  • התקנת מודולים למטרה ספציפית . custom_images תומכים בהעתקת חפצים לתמונה אך לא יכולים להתקין מודול במחיצה ספציפית על ידי ציון מחיצת היעד שלו כחלק מכלל בנייה.
  • תמיכה בקרוב . לא ניתן לבנות custom_images באמצעות מערכת הבנייה Soong.
  • תמיכה בעדכוני OTA . custom_images משמשות כתמונות ROM של היצרן שאינן יכולות לקבל עדכוני OTA.

שמירה על ABI בין מחיצות

מחיצת product באנדרואיד 9 היא הרחבה של מחיצת system . יש ABI חלש בין מחיצות product system , כך ששתיהן חייבות להיות משודרגות בו-זמנית, וה-ABI צריך להיות מבוסס SDK של המערכת. אם ה-SDK של המערכת אינו מכסה את כל משטחי ה-API בין product system , יצרני OEM חייבים לשמור על 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 .

התקנת מודול למחיצת המוצר

השתמש בדגלי הבנייה הבאים כדי להתקין מודול למחיצת 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 .