במסמך הזה מתואר גיבוב (hashing) של ממשק HIDL, מנגנון למניעת שינויים מקריים בממשק ולוודא ששינויים בממשק נבדקים בקפידה. המנגנון הזה נדרש כי יש גרסאות של ממשקי HIDL, שלאחר השקת הממשק, אין לשנות אותו אלא אופן השמירה של ממשק בינארי של אפליקציה (ABI) (כמו תגובה ).
פריסה
כל ספריית שורש של חבילה (כלומר android.hardware
שממפה אל
מתבצע מיפוי של hardware/interfaces
או vendor.foo
אל
vendor/foo/hardware/interfaces
) חייב להכיל
קובץ current.txt
שמפרט את כל קובצי הממשק של HIDL שפורסמו.
# current.txt files support comments starting with a '#' character # this file, for instance, would be vendor/foo/hardware/interfaces/current.txt # Each line has a SHA-256 hash followed by the name of an interface. # They have been shortened in this doc for brevity but they are # 64 characters in length in an actual current.txt file. d4ed2f0e...995f9ec4 vendor.awesome.foo@1.0::IFoo # comments can also go here # types.hal files are also noted in current.txt files c84da9f5...f8ea2648 vendor.awesome.foo@1.0::types # Multiple hashes can be in the file for the same interface. This can be used # to note how ABI sustaining changes were made to the interface. # For instance, here is another hash for IFoo: # Fixes type where "FooCallback" was misspelled in comment on "FooStruct" 822998d7...74d63b8c vendor.awesome.foo@1.0::IFoo
הערה: כדי לעקוב אחר הגיבובים שמתקבלים
שממנו Google מפרידה קובצי current.txt
HIDL
קטעים: הקטע הראשון הוא הושק ב-Android 8. הקטע הבא
יושק ב-Android 8 MR1. מומלץ מאוד להשתמש
פריסה דומה בקובץ current.txt
שלך.
גיבוב (hash) עם hidl-gen
אפשר להוסיף גיבוב לקובץ current.txt
באופן ידני או באמצעות
באמצעות hidl-gen
. קטע הקוד הבא מספק דוגמאות
פקודות שבהן אפשר להשתמש עם hidl-gen
כדי לנהל
קובץ current.txt
(גיבובים קוצרו):
hidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::types
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::typeshidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::INfc
07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfchidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::types 07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc f2fe5442...72655de6 vendor.awesome.nfc@1.0::INfcClientCallbackhidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0 >> vendor/awesome/hardware/interfaces/current.txt
אזהרה: אין להחליף גיבוב (hash) של
ממשק שהופץ בעבר. כשמשנים ממשק כזה, צריך להוסיף גיבוב חדש
עד לסוף הקובץ current.txt
. פרטים נוספים זמינים במאמר
היציבות של ממשק ה-ABI.
כל ספריית הגדרה של ממשק שנוצרה על ידי hidl-gen
כולל גיבובים, שניתן לאחזר באמצעות קריאה
IBase::getHashChain
. כש-hidl-gen
מחבר
הוא בודק את הקובץ current.txt
בתיקיית השורש של
חבילת ה-HAL כדי לראות אם ה-HAL השתנה:
- אם לא נמצא גיבוב (hash) של HAL, הממשק נחשב ללא פרסום (בגרסה של ).
- אם נמצאו גיבובים, הם נבדקים מול הממשק הנוכחי:
- אם הממשק תואם לגיבוב, ההידור ימשיך.
- אם הממשק לא תואם גיבוב, ההידור מופסק כי המשמעות היא שממשק שפורסם בעבר משתנה.
- לשינוי לשמירה על ה-ABI (מידע נוסף זמין כאן:
יציבות ABI), הקובץ
current.txt
כדי שההידור ימשיך לפעול, חייבים לשנות אותו. - את כל שאר השינויים יש לבצע בשדרוג גרסה משנית או גרסה ראשית של גרפי.
- לשינוי לשמירה על ה-ABI (מידע נוסף זמין כאן:
יציבות ABI), הקובץ
יציבות ABI
ה-ABI כולל את הקובץ הבינארי
קישורים/מוסכמות לשיחות וכו' אם ה-ABI או ה-API משתנים, הממשק לא
פועל יותר עם system.img
כללי שהורכב
ממשקים רשמיים.
לוודא שהממשקים הם בעלי גרסאות ושה-ABI יציב חיוני מכמה סיבות:
- הוא מבטיח שההטמעה תעבור בהצלחה את חבילת הבדיקה של הספק (VTS), בדרך כלל תוכלו לבצע פעולות OTA עם מסגרות בלבד.
- כיצרן ציוד מקורי, הוא מאפשר לך לספק חבילת תמיכה של מועצת מנהלים (BSP) קל לשימוש ועקבי.
- כך תוכלו לעקוב אחרי הממשקים שאתם יכולים להשיק. נקודות שכדאי להעלות
current.txt
מפה של ספריית ממשקים שמאפשרת לך לראות ההיסטוריה והמצב של כל הממשקים שמסופקים ברמה הבסיסית (root) של חבילה.
כשמוסיפים גיבוב חדש לממשק שכבר כולל ערך
current.txt
, חשוב להוסיף רק את הגיבובים שמייצגים
ממשקים ששומרים על יציבות ABI. אלה סוגי השינויים:
השינויים מותרים |
|
---|---|
לא ניתן לבצע שינויים |
|