ספריות, כללים ומדיניות

בדף הזה מתוארת פריסת הספריות במכשירים שפועלת בהם גרסת Android 8.0 גבוהה יותר, כללי VNDK ומדיניות קשורה.

פריסת ספרייה

פריסת הספרייה שנוצרות מורכבת מהרכיבים הבאים ספריות:

  • /system/lib[64] מכיל את כל הספריות המשותפות של framework, כולל ספריות LL-NDK, VNDK וספריות framework בלבד (כולל LL-NDK-Private וספריות מסוימות עם שמות זהים לאלה של ב-VNDK-SP).
  • /system/lib[64]/vndk-sp מכיל ספריות VNDK-SP עבור דפי HAL באותו תהליך.
  • /vendor/lib[64] מכיל את ספריות ה-VNDK שהספק הרחיב ( ספריות DXUA או DXUX VNDK), הטמעת HAL באותו תהליך וספקים אחרים של ספריות משותפות.
  • /vendor/lib[64]/vndk-sp עשוי להכיל את ספריות VNDK-SP שהורחבו על ידי ספק.

המודולים של ספקים טוענים את ספריות ה-VNDK מ-/system/lib[64].

כללי VNDK

בקטע הזה מפורטת רשימה מקיפה של כללי VNDK:

  • תהליכי מסגרת לא יכולים לטעון ספריות משותפות שאינן SP-HAL מהספק מחיצות (אכיפה מחמירה החל מ-Android 8.1).
  • תהליכי ספקים לא יכולים לטעון קבצים שהם לא LL-NDK ו-VNDK-SP ספריות שאינן VNDK ממחיצת המערכת. (לא נאכף רק ב-Android O, אבל הוא יהיה בגרסה עתידית).
  • ספריות VNDK מותקנות חייבות להיות קבוצת משנה של VNDK כשיר בהגדרת Google של הספריות.
  • צריך להגביל את יחסי התלות החיצוניים של SP-HAL ו-SP-HAL-Dep ספריות LL-NDK או VNDK-SP בהגדרת Google.
    • יחסי התלות של ספרייה משותפת מסוג SP-HAL חייבים להיות מוגבלים ל-LL-NDK ספריות, ספריות VNDK-SP בהגדרת Google, ספריות SP-HAL אחרות ו/או ספריות משותפות אחרות של ספקים שאפשר לתייג כ-SP-HAL-Dep של הספריות.
    • אפשר לתייג ספרייה משותפת של ספק כספריית SP-HAL-Dep רק אם היא היא לא ספריית AOSP, וקשרי התלות שלה מוגבלים לספריות LL-NDK. ספריות VNDK-SP, ספריות SP-HAL ו/או ספריות SP-HAL-Dep אחרות שהוגדרו על ידי Google של הספריות.
  • VNDK-SP צריך להיות עצמאי. libRS_internal.so יש לך הזדמנות מיוחדת לטיפול ב-Android 8.0, אבל ייעשה בו שימוש חוזר בגרסה עתידית.
  • ללא תקשורת של ספק framework דרך ממשקים שאינם HIDL, כולל (בין היתר) קלסרים, שקעים, זיכרונות משותפים, קבצים וכו'.
  • גודל מחיצת המערכת חייב להיות גדול מספיק כדי להכיל שני עותקים של כל ספריות VNDK שעומדות בדרישות, ועותק של מסגרת לא כשירה ששותף של הספריות.

Sepolicy

תהליכי המסגרת שמתוארים בקטע הזה תואמים coredomain בסמדיניות, ואילו תהליכי הספק תואמים non-coredomain. לדוגמה, /dev/binder יכול להיות ניתן לגשת רק דרך coredomain ו-/dev/vndbinder בוצעה גישה רק בדומיין שאינו coredomain.

מדיניות דומה מגבילה את הגישה לספריות המשותפות במערכת מחיצות בין ספקים. בטבלה הבאה מוצגות הרשאות הגישה משותפות ספריות של קטגוריות שונות:

קטגוריה מחיצה נגיש מ-
דומיין ליבה
נגיש מ
שאינו דומיין ליבה
LL-NDK מערכת Y Y
LL-NDK-פרטי מערכת Y Y
VNDK-SP/VNDK-SP-פרטי מערכת Y Y
VNDK-SP-Ext ספק Y Y
VNDK מערכת Y Y
VNDK-Ext ספק לא Y
FWK בלבד מערכת Y לא
FWK-Only-RS מערכת Y לא
SP-HAL ספק Y Y
SP-HAL-Dep ספק Y Y
VND בלבד ספק לא Y

LL-NDK-Private ו-VNDK-SP-Private חייבים להיות נגיש משני הדומיינים כי מי שלא שייך ל-coredomain לגשת אליהם באופן עקיף. באופן דומה, ל-SP-HAL-Dep צריך להיות גישה דרך coredomain כי SP-HAL מסתמך עליו.

תווית זהה_תהליך_hal_file

הספריות הבאות קיימות במחיצת הספקים. להפוך את הספריות האלה לנגישות גם דרך האפליקציות coredomain וגם לא coredomain.

  • VNDK-SP-Ext ב/vendor/lib[64]/vndk-sp
  • SP-HAL ב-/vendor/lib[64] או ב-/vendor/lib[64]/hw
  • SP-HAL-Dep ב-/vendor/lib[64] או ב-/vendor/lib[64]/hw

יש להוסיף תווית מפורשת לקבצים האלה כ-same_process_hal_file, מפני שכל דבר ב-vendor, כברירת מחדל, המחיצה לא נגישה ל-coredomain. הוספת שורות דומות ל- את הפרטים הבאים לקובץ file_contexts הספציפי לספק.

/vendor/lib(64)?/hw/libMySpHal\.so        u:object_r:same_process_hal_file:s0
/vendor/lib(64)?/vndk-sp/libBase\.so      u:object_r:same_process_hal_file:s0
/vendor/lib(64)?/libBaseInternal\.so      u:object_r:same_process_hal_file:s0