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 |
|
product |
|
product (ממשקים נאכפים) |
|
לכן, מערכת 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
.