הפעלת ה-VNDK

ה-VNDK דורש מספר שינויים בבסיס קוד כדי להפריד חששות בין ספק למערכת. השתמש במדריך הבא כדי להפעיל את VNDK בבסיס קוד של ספק/OEM.

בניית ספריות מערכת

מערכת ה-build מכילה מספר סוגים של אובייקטים כולל ספריות (משותפות, סטטיות או כותרות) וקבצים בינאריים.

בניית ספריות מערכת
איור 1. בניית ספריות מערכת
  • ספריות core משמשות את תמונת המערכת, על תמונת המערכת. ספריות אלו אינן יכולות לשמש את ספריות vendor , vendor_available , vndk , או vndk-sp .
    cc_library {
        name: "libThatIsCore",
        ...
    }
    
  • ספריות vendor-only (או proprietary ) משמשות את תמונת הספק, על תמונת הספק.
    cc_library {
        name: "libThatIsVendorOnly",
        proprietary: true,
        # or: vendor: true, # (for things in AOSP)
        ...
    }
    
  • ספריות vendor_available משמשות את תמונת הספק, בתמונת הספק (עשויה להכיל כפילויות של core ).
    cc_library {
        name: "libThatIsVendorAvailable",
        vendor_available: true,
        ...
    }
    
  • ספריות vndk משמשות את תמונת הספק, בתמונת המערכת.
    cc_library {
        name: "libThatIsVndk",
        vendor_available: true,
        vndk: {
            enabled: true,
        }
        ...
    }
    
  • ספריות vndk-sp משמשות את תמונת הספק, וגם את תמונת המערכת בעקיפין.
    cc_library {
        name: "libThatIsVndkSp",
        vendor_available: true,
        vndk: {
            enabled: true,
            support_system_process: true,
        }
        ...
    }
    
  • ספריות llndk משמשות הן את המערכת והן את תמונות הספק.
    cc_library {
        name: "libThatIsLlndk",
        llndk: {
            symbol_file: "libthatisllndk.map.txt"
        }
        ...
    }
    

כאשר lib מסומן בתור vendor_available:true , הוא נבנה פעמיים:

  • פעם אחת לפלטפורמה (וכך מותקן ב- /system/lib )
  • פעם אחת עבור הספק (וכך מותקן ב- /vendor/lib או VNDK APEX)

גרסאות הספק של libs בנויות עם -D__ANDROID_VNDK__ . רכיבי מערכת פרטיים שעשויים להשתנות באופן משמעותי בגרסאות עתידיות של אנדרואיד מושבתים עם הדגל הזה. בנוסף, ספריות שונות מייצאות קבוצה שונה של כותרות (כגון liblog ). ניתן לציין אפשרויות ספציפיות לגרסה של יעד של ספק בקובץ Android.bp ב:

target: { vendor: { … } }

הפעלת VNDK עבור בסיס קוד

כדי להפעיל את VNDK עבור בסיס קוד:

  1. קבע את הזכאות על ידי חישוב הגדלים הנדרשים של מחיצות vendor.img ו- system.img .
  2. אפשר BOARD_VNDK_VERSION=current . אתה יכול להוסיף ל- BoardConfig.mk או לבנות איתו רכיבים ישירות (לדוגמה, m -j BOARD_VNDK_VERSION=current MY-LIB ).

לאחר הפעלת BOARD_VNDK_VERSION=current , מערכת הבנייה אוכפת את דרישות התלות והכותרת הבאות.

ניהול תלות

יש לפתור אובייקט vendor שתלוי ברכיב core שאינו קיים ב- vndk או vendor ספק באמצעות אחת מהאפשרויות הבאות:

  • ניתן להסיר את התלות.
  • אם רכיב core נמצא בבעלות vendor , ניתן לסמן אותו vendor_available או vendor .
  • שינוי שהופך את אובייקט הליבה לחלק מה- vndk עשוי להיות משודר אל Google.

בנוסף, אם לרכיב core יש תלות ברכיב vendor , יש להפוך את רכיב vendor לרכיב core או שיש להסיר את התלות בדרך אחרת (לדוגמה, על ידי הסרת התלות או על ידי העברת התלות לרכיב vendor ).

ניהול כותרות

יש להסיר תלות כותרת גלובלית כדי לאפשר למערכת הבנייה לדעת אם לבנות את הכותרות עם או בלי -D__ANDROID_VNDK__ . לדוגמה, עדיין ניתן לגשת לכותרות libutils כגון utils/StrongPointer.h באמצעות ספריית הכותרות libutils_headers .

כותרות מסוימות (כגון unistd.h ) כבר לא יכולות להיכלל באופן טרנזיטיבי אלא ניתן לכלול אותן באופן מקומי.

לבסוף, החלק הציבורי של private/android_filesystem_config.h הועבר ל- cutils/android_filesystem_config.h . כדי לנהל את הכותרות האלה, בצע אחת מהפעולות הבאות:

  • הסר את התלות ב- private/android_filesystem_config.h על ידי החלפת כל פקודות המאקרו AID_* בקריאות getgrnam / getpwnam אם אפשר. לדוגמה:
    • (uid_t)AID_WIFI הופך להיות getpwnam("wifi")->pw_uid .
    • (gid_t)AID_SDCARD_R הופך getgrnam("sdcard_r")->gr_gid .
    לפרטים, עיין ב- private/android_filesystem_config.h .
  • עבור AIS עם קידוד קשיח, כלול cutils/android_filesystem_config.h .