סעיף זה מתאר את מטריצות תאימות המסגרת וההתקנים ואת סכימת מטריצת התאימות . לכללי התאמה, ראה כללי התאמה .
מטריצת תאימות מסגרת (FCM)
מטריצת תאימות המסגרת (FCM) מתארת את הדרישות של המסגרת במכשיר שהיא פועלת עליו. מטריצת תאימות המסגרת מורכבת ממטריצת תאימות המערכת, מטריצת תאימות המוצר ומטריצת התאימות system_ext . דרישות ה-FCM חייבות להתקיים על ידי מניפסט המכשיר (דרישות נאכפות בזמן בנייה, זמן ריצה וב-VTS).
FCM system_ext וה-FCM של המוצר הם משלימים של FCM ספציפי למכשיר (מותקן במחיצת המערכת).
- התקן FCM צריך לשקף את הדרישות של מודולים במחיצת המערכת .
- FCM system_ext צריך לשקף את הדרישות לפי מודולים במחיצת system_ext.
- המוצר FCM צריך לשקף את הדרישות לפי מודולים במחיצת המוצר .
כל ה-FCMs צריכים להתיישר עם השינויים של OEM למסגרת במחיצות המערכת, המוצר וה-system_ext. לדוגמה, אם אפליקציה המותקנת במחיצת המוצר משתמשת בהרחבת ספק של ממשק HAL, יש להצהיר על דרישת ממשק HAL ב-FCM של המוצר.
קובץ מטריצת תאימות מערכת לדוגמה:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="framework" level="3"> <hal> <name>android.hardware.camera</name> <version>1.0</version> <version>3.1-4</version> <interface> <name>ICameraProvider</name> <instance>default</instance> <regex-instance>[a-z_]+/[0-9]+</regex-instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <version>1.0</version> <interface> <name>INfc</name> <instance>default</instance> </interface> </hal> <hal optional="true"> <name>android.hardware.graphics.composer</name> <version>2.1</version> <interface> <name>IComposer</name> <instance>default</instance> </interface> </hal> <hal format="aidl" optional="true"> <name>android.hardware.light</name> <version>1-2</version> <interface> <name>ILights</name> <instance>default</instance> </interface> </hal> <hal format="native"> <name>GL</name> <version>1.1</version> <version>3.0</version> </hal> <hal format="native"> <name>EGL</name> <version>1.1</version> </hal> <kernel version="3.18.51"> <!-- common configs --> </kernel> <kernel version="3.18.51"> <!-- arm specific configs --> <condition> <config> <key>CONFIG_ARM</key> <value type="tristate">y</value> </config> <condition> <config> <key>CONFIG_A</key> <value type="string"></value> </config> <config> <key>CONFIG_B</key> <value type="tristate">y</value> </config> </kernel> <kernel version="4.1.22"> <!-- common configs --> <config> <key>CONFIG_A</key> <value type="string">foo</value> </config> <config> <key>CONFIG_B2</key> <value type="int">1024</value> </config> </kernel> <sepolicy> <kernel-sepolicy-version>30</kernel-sepolicy-version> <sepolicy-version>25.0</sepolicy-version> <sepolicy-version>26.0-3</sepolicy-version> </sepolicy> <avb> <vbmeta-version>2.1</vbmeta-version> </avb> <xmlfile format="dtd"> <name>media_profile</name> <version>1.0</version> <path>/system/etc/media_profile_V1_0.dtd</path> </xmlfile> </compatibility-matrix>
לפרטים נוספים, ראה מחזור חיים של FCM .
מטריצת תאימות מוצרים
המוצר FCM הוא קובץ מטריצת תאימות למסגרת במחיצת המוצר. אובייקט VINTF מצטרף ל-FCM של המוצר עם FCMs במחיצות system ו-system_ext בזמן ריצה.
קובץ FCM למוצר לדוגמה:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="framework"> <hal> <name>vendor.foo.camera</name> <version>1.0</version> <interface> <name>IBetterCamera</name> <instance>default</instance> </interface> </hal> </compatibility-matrix>
מטריצת תאימות System_ext
FCM system_ext הוא קובץ מטריצת תאימות מסגרת במחיצת system_ext. אובייקט VINTF מצטרף ל- system_ext FCM עם FCMs במערכת ומחיצות המוצר בזמן ריצה. ראה מטריצת תאימות מוצרים עבור קובץ system_ext FCM לדוגמה.
מטריצת תאימות מכשירים (DCM)
מטריצת תאימות המכשיר מתארת סט של דרישות שהמכשיר מצפה מהמסגרת (דרישות נאכפות בזמן ההשקה וזמן OTA).
קובץ DCM לדוגמה:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="device"> <hal> <name>android.hidl.manager</name> <version>1.0</version> <interface> <name>IServiceManager</name> <instance>default</instance> </interface> </hal> <hal> <name>android.hidl.memory</name> <version>1.0</version> <interface> <name>IMemory</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.allocator</name> <version>1.0</version> <interface> <name>IAllocator</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.framework.sensor</name> <version>1.0</version> <interface> <name>ISensorManager</name> <instance>default</instance> </interface> </hal> <vendor-ndk> <version>27</version> </vendor-ndk> <system-sdk> <version>27</version> </system-sdk> </compatibility-matrix>
סכימת מטריצת תאימות
סעיף זה מתאר את המשמעות של תגי XML אלה. כמה תגים "נדרשים" עשויים להיות חסרים בקובץ המקור בעץ המקור של אנדרואיד ונכתבו על ידי assemble_vintf
בזמן הבנייה. תגיות "חובה" חייבות להיות בקבצים המתאימים במכשיר.
-
?xml
- אופציונאלי. הוא מספק מידע רק למנתח ה-XML.
-
compatibility-matrix.version
- נדרש. גרסת מטא של מטריצת תאימות זו. מתאר את האלמנטים הצפויים במטריצת התאימות. לא קשור לגרסת XML.
-
compatibility-matrix.type
- נדרש. סוג מטריצת תאימות זו:
-
"device"
: מטריצת תאימות מכשיר. -
"framework"
: מטריצת תאימות למסגרת.
-
-
manifest.level
- נדרש עבור מטריצת תאימות מסגרת. באנדרואיד 12 ומעלה, מותרים בקבצי מטריצות תאימות למסגרת במחיצות המוצר וה-system_ext. מציין את גרסת מטריצת תאימות המסגרת (גירסת FCM) של קובץ זה. אל תצהיר על כך במטריצת תאימות מסגרת ספציפית למכשיר (כלומר
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE
). -
compatibility-matrix.hal
- אופציונלי ויכול לחזור. מפרט HAL בודד (HIDL או מקורי) שנדרש על ידי הבעלים של מטריצת התאימות (מסגרת או מכשיר) להיות נוכח. ערכי HAL מובחנים על ידי אלמנט
<name>
; יכולים להיות מספר ערכי HAL עם אותו שם (מרמז על תנאי "ו"). -
compatibility-matrix.hal.format
- אופציונאלי. הערך יכול להיות אחד מ:
-
"hidl"
: HIDL HALs. זוהי ברירת המחדל. -
"aidl"
: AIDL HALs . תקף רק על מטא-גרסת מטריצת תאימות 2.0. -
"native"
: HALs ילידים.
-
-
compatibility-matrix.hal.optional
- התכונה היא אופציונלית וברירת המחדל היא false. מציין אם HAL זה הוא אופציונלי לבעלים של מטריצת התאימות (מסגרת או מכשיר). אם ערך
<hal>
מסומן כאופציונלי, זה אומר שהבעלים יכול לעבוד עם HAL זה, אם קיים, אך אינו מחייב את זה להיות נוכח. -
compatibility-matrix.hal.name
- נדרש. שם החבילה המלא של HAL זה. דוגמאות:
-
android.hardware.camera
(HIDL או AIDL HAL) -
GLES
(HAL מקורי, דורש שם בלבד)
-
-
compatibility-matrix.hal.version
- רשימה של טווחי גרסאות (ראה התאמות HAL ) המגדירה לאילו גרסאות הבעלים של מטריצת התאימות (מסגרת או מכשיר) מצפה.
עבור HIDL ו-HALs מקורי, נדרש, יכול לחזור ללא כפילויות. הפורמט הוא אחד מהאפשרויות הבאות:-
MAJOR . MINOR_MIN - MINOR_MAX
-
MAJOR . MINOR
(מקביל ל-MAJOR . MINOR - MINOR
)
עבור AIDL HALs, אסור להיות נוכח במכשירים עם אנדרואיד 11 ומטה. אופציונלי במכשירים עם גרסאות מאוחרות יותר. אם צוין, הפורמט הוא אחד מהבאים:-
VERSION_MIN - VERSION_MAX
-
VERSION
(שווה ערך ל-VERSION - VERSION
)
1
. -
-
compatibility-matrix.hal.interface
- אופציונלי, יכול לחזור. רשימה של ממשקים נדרשים של HAL זה.
-
compatibility-matrix.hal.interface.name
- נדרש. שם הממשק.
-
compatibility-matrix.hal.interface.instance
- אופציונלי, יכול לחזור. רשימה של מופעים נדרשים של ממשק זה.
-
compatibility-matrix.hal.interface.regex-instance
- אופציונלי, יכול לחזור. רשימה של דפוסי שם מופע נדרשים בממשק זה. השתמש בפורמט ביטוי רגיל מורחב .
-
compatibility-matrix.kernel
- אופציונלי, יכול לחזור. ציין רשימה של תצורות ליבה שהמסגרת דורשת בכל גרסת ליבה.
מספר<kernel>
עם אותה<version>
יכול להתקיים כדי לרמוז על קשר "ו". כל<kernel>
הוא "פרגמנט" מהדרישות המופעלות רק כאשר מתקיימים<conditions>
. -
compatibility-matrix.kernel.version
- נדרש. גרסת ליבה. הפורמט הוא
VERSION . MAJOR_REVISION . MINOR_REVISION
. הגרסה והגרסה העיקרית חייבים להתאים בדיוק. גרסה מינורית מגדירה את גרסת ה-LTS המינימלית של הליבה שהמסגרת מצפה לה. -
compatibility-matrix.kernel.condition
- אופציונאלי. לא חייב להתקיים עבור
<kernel>
הראשון של כל גרסה. מציין רשימה של תנאים. כאשר התנאים מתקיימים, הדרישות המצוינות בפרגמנט<kernel>
זה מופעלות. -
compatibility-matrix.kernel.config
- אופציונלי, יכול לחזור. מפרט את פריטי
CONFIG
שיש להתאים עבור גרסת ליבה זו. כל פריטCONFIG
הוא זוג מפתח-ערך; פריטי תצורה מובחנים על ידי מפתח. -
compatibility-matrix.kernel.config.key
- נדרש. שם המפתח של הפריט
CONFIG
. מתחיל עםCONFIG_
. -
compatibility-matrix.kernel.config.value
- נדרש. ערך הפריט
CONFIG
. הפורמט תלוי בסוג:-
string
. מרכאות נשמטות. -
int
. ערכים עשרוניים והקסדצימליים (חייבים להתחיל ב0x
או0X)
מתקבלים. מתפרש כמספר שלם של 64 סיביות; הצפות גורמות לקטיעה. (הנתח מקבל ערכים מ-2 64 + 1 עד 2 64 - 1, סיביות 65 קטועה; לפרטים עיין בדף האיש של strtoull .) -
range
. הפורמט הוא[int]-[int]
, למשל10-20
. ערכים הקסדצימליים מתקבלים וחייבים להתחיל ב0x
או0X
. שני גבולות חייבים להיות מספר שלם של 64 סיביות ללא סימן. -
tristate
. ערכים חוקיים הםy
,m
ו-n
.
-
-
compatibility-matrix.kernel.config.value.type
- נדרש. סוג הערך של פריט
CONFIG
, אחד מ:-
string
-
int
-
range
-
tristate
-
-
compatibility-matrix.sepolicy
- נדרש. מכיל את כל הערכים הקשורים למדיניות. משמש רק על ידי מטריצת תאימות המסגרת.
-
compatibility-matrix.sepolicy.sepolicy-version
- חובה, יכול לחזור. מתאר את הדרישה בגרסת sepolicy. מתאים ל-
manifest.sepolicy.version
. כל מופע של אלמנט מגדיר מגוון של גרסאות sepolicy. -
compatibility-matrix.sepolicy.kernel-sepolicy-version
- נדרש. מצהיר על גרסת
policydb
שאיתה המסגרת עובדת. -
compatibility-matrix.avb.vbmeta-version
- אופציונאלי; משמש רק על ידי מטריצת תאימות המסגרת. מצהיר על גרסת ה-AVB המשמשת לחתום על
system.img
. הוצא משימוש באנדרואיד 10. -
compatibility-matrix.vendor-ndk
- אופציונאלי; בשימוש רק על ידי מטריצת תאימות המכשיר. מצהיר על הדרישה של תמונת מצב של ספק VNDK. אם חסר, לא נדרשת דרישת VNDK בתמונת המערכת.
-
compatibility-matrix.vendor-ndk.version
- נדרש. מספר שלם חיובי המצהיר על גרסת VNDK הנדרשת על ידי תמונת הספק.
-
compatibility-matrix.vendor-ndk.library
- אופציונלי, יכול לחזור. מצהיר על קבוצה של ספריות VNDK הנדרשת על ידי תמונת הספק. אותה סמנטיקה כמו
manifest.vendor-ndk.library
. -
compatibility-matrix.system-sdk.version
- אופציונלי, יכול לחזור; בשימוש רק על ידי מטריצת תאימות המכשיר. מצהיר על הדרישה של אפליקציות הספק בגרסאות System SDK. אם חסר, לא נדרשת דרישה של System SDK בתמונת המערכת.