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