יצירת תמונות מצב של VNDK

תמונת מצב של VNDK היא קבוצה של ליבת VNDK ו-VNDK-SP לגרסת Android. אפשר לשדרג את מחיצת המערכת רק אם system.img כולל את תמונת המצב של ה-VNDK התואם שנדרש על ידי vendor.img.

תמונות מצב רשמיות של VNDK נוצרות באופן אוטומטי בשרת ה-build של Android והתבצעה צ'ק-אין ל-/prebuilts/vndk של עץ המקור של Android. עבור למטרות פיתוח, ניתן ליצור תמונות מצב של VNDK באופן מקומי. תמונות מצב של VNDK נתמך לטעמים של TARGET_ARCH, arm64 , x86 ו-x86_64.

יצירת קובצי snapshot

שרת ה-build של Android יוצר ארטיפקטים של build וקובצי תמונת מצב של VNDK באמצעות הפרמטרים הבאים של build ופקודות build.

פרמטרים של build

השם של יעד ה-build הוא vndk. הגדרת היעד של ה-build מוצגת למטה.

TARGET_PRODUCT TARGET_ARCH TARGET_ARCH_VARIANT
aosp_arm arm armv7-a-neon
aosp_arm64 arm64 armv8-a
aosp_x86 x86 x86
aosp_x86_64 x86_64 x86_64
  • TARGET_PRODUCT=aosp_$(TARGET_ARCH)
  • TARGET_BUILD_VARIANT=user
  • TARGET_ARCH זהה לתמונת מערכת גנרית (GSI) קשות מטרה (arm, arm64, x86, x86_64).
  • TARGET_ARCH_VARIANT ב-snapshot 28 (Android 9) ואילך, כוללת את התצורות הפופולריות שצוינו למעלה.

פקודות Build

לתמונות מצב רשמיות, Android 9 ואילך כולל דוגמת יעד (vndk) ב- vndk.mk שיוצר ומפיק VNDK תמונת מצב אל $DIST_DIR. קובץ ה-ZIP של קובץ ה-snapshot מבוסס על הפורמט android-vndk-$(TARGET_ARCH).zip לדוגמה:

lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]

שרת ה-build של Android משתמש ברכיב סקריפט build.sh לבניית כל הקשת הנתמכת באמצעות הפקודה הבאה.

DIST_DIR=dist_dir development/vndk/snapshot/build.sh

תמונת המצב של VNDK לגרסת Android נוצרת הסתעפות.

פיתוח גרסת build מקומית

במהלך הפיתוח, ניתן ליצור תמונות מצב של VNDK מעץ מקור מקומי עם את הפקודות הבאות.

  • כדי ליצור את כל הקשתות הנתמכות בבת אחת, מריצים את סקריפט ה-build הבא (build.sh).
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
    
  • כדי ליצור TARGET_ARCH ספציפי, מריצים את הפקודה הבאה פקודות.
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist
    

נוצר קובץ android-vndk-$(TARGET_ARCH).zip התואם מתחת ל-$DIST_DIR.

קובצי snapshot

תמונת מצב של VNDK כוללת את הקבצים הבאים.

  • גרסת הספק של ספריות משותפות של VNDK-core ו-VNDK-SP.
    • אין צורך בפריטי קישור משותפים ב-LL-NDK כי הם תואמים לאחור.
    • ליעדים של 64 ביט, גם TARGET_ARCH וגם ספריות TARGET_2ND_ARCH נוצרות ונספרות.
  • רשימה של ספריות VNDK-core, VNDK-SP, LL-NDK ו-VNDK-private זמינה [vndkcore|vndksp|llndk|vndkprivate].libraries.txt
  • קובצי רישיון.
  • module_paths.txt תיעוד נתיבי המודול של כל ה-VNDK ספריות, שנדרשות כדי לבדוק שלפרויקטים של GPL יש מקורות שהושקו בעץ מקור נתון של Android.

עבור קובץ ZIP נתון של תמונת מצב של VNDK, android-vndk-$(TARGET_ARCH).zip, הספריות המוכנות מראש של VNDK מקובצות בספריות נפרדות עם שם arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) לפי ממשק ABI ביטנטיות. לדוגמה, עבור android-vndk-arm64.zip, השדות 'libs' בגרסת 64 ביט ממוקמים מתחת ל-arch-arm64-armv8-a וה-lib של 32 סיביות שהוצב במסגרת arch-arm-armv8-a. הדוגמה הבאה מראה מבנה הספריות של Arm64 (TARGET_ARCH=arm64) VNDK קובץ ZIP בפורמט snapshot (android-vndk-arm64.zip).

המבנה של ספריית תמונת המצב של VNDK
איור 1. מבנה ספריות תמונת המצב של VNDK (דוגמה)

פיתוח קובצי snapshot של ספקים

יש תמיכה ב-Android 11 ספק קובצי snapshot, שמאפשרים לכם ליצור vendor.img את גרסת Android בעץ המקור. תמונת מצב של VNDK שמוגדרת כברירת מחדל מכילה את את קובצי הספרייה המשותפת (.so) שאפשר להתקין במכשירים וגם ואז הוא קושר בקבצים הבינאריים של C++ של הספק בזמן הריצה. כדי לבנות מול את תמונת המצב של ה-VNDK, צריך ארטיפקטים נוספים כמו קובצי כותרות דגלים שיוצאו.

ליצור פריטים כאלה (יחד עם תמונת המצב של ה-VNDK) ממקור מקומי עץ, משתמשים בפקודה הבאה.

VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh

הפקודה הזו יוצרת קבצים מסוג android-vndk-$(TARGET_ARCH).zip במסגרת $DIST_DIR. הדוגמה הבאה היא קובץ ZIP מסוג תמונת מצב של Arm64 VNDK עם ארטיפקטים של build. הקבצים המודגשים הם קבצים שנוספו לאחרונה ל-VNDK רגיל תמונת מצב (מוצגת באיור 1) וכוללים קובצי JSON (שמאחסנים cflags מכל ספרייה) וכל קובצי הכותרת שיוצאו.

android-vndk-arm64.zip
├── arch-arm64-armv8-a
│   └── shared
│       ├── vndk-core  -> *.so files, *.json files
│       └── vndk-sp    -> *.so files, *.json files
├── arch-arm-armv8-a   -> (same as arch-arm64-armv8-a)
├── configs            -> *.libraries.txt, module_paths.txt, module_names.txt
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files

העלאת תמונות מצב של VNDK

תמונות VNDK נבדקות בעץ המקור תחת /prebuilts/vndk/vVER, כאשר VER שווה לגרסה של תמונת המצב של VNDK (שמבוססת על גרסת ה-SDK של גרסת Android המתאימה). עבור לדוגמה, תמונת המצב של Android 8.1 VNDK היא בגרסה 27.

שימוש בסקריפט update.py

הסקריפט update.py (/development/vndk/snapshot/update.py) הופך את התהליך של להוסיף לעץ המקור תמונת מצב מוגדרת מראש של VNDK. הוא מזהה באופן אוטומטי ליצור ארטיפקטים ולמלא כראוי את המאפיינים המשויכים שנוצר ב-Android.bp. הסקריפט מבצע את המשימות הבאות:

  1. ב-/prebuilts/vndk/vVER, נעשה שימוש ב-repo start כדי ליצור הסתעפות חדשה של Git.
  2. מאחזר ומחלץ פריטי ZIP של תמונת מצב של ה-build של VNDK.
  3. מריצה את gen_buildfiles.py כדי ליצור באופן אוטומטי את קובצי ה-build (Android.bp).
  4. מריץ את check_gpl_license.py כדי לאמת את הספריות המוכנות מראש ברישיון במסגרת הרישיון הציבורי הכללי (GPL) יש מקורות שפורסמו עץ המקור הנוכחי.
  5. נעשה שימוש ב-git commit כדי לשמור שינויים חדשים.

שימוש בתמונות מצב מקומיות של VNDK

אפשר גם להשתמש בקובצי snapshot של VNDK שנוצרו באופן מקומי. כשה--local צוינה האפשרות, הסקריפט update.py מאחזר תמונת מצב של VNDK ליצור פריטי מידע מהספרייה המקומית שצוינה (במקום מ-Android build) שבו יש את הקבצים android-vndk-$(TARGET_ARCH).zip נוצר מ-development/vndk/snapshot/build.sh. עם אפשרות --local, הסקריפט update.py מדלג על GPL בדיקת רישיון ו-git commit שלבים.

תחביר:

python update.py VER --local local_path

פקודה לדוגמה לעדכון תמונת המצב של Android 8.1 VNDK ב-build מקומי פריטי מידע שנוצרו בתהליך פיתוח (Artifact) ב-/path/to/local/dir:

python update.py 27 --local /path/to/local/dir

דוגמה למבנה ספרייה של תמונת מצב של VNDK מקומית:

prebuilts/vndk
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (prebuilt libs)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   └── Android.bp         -> (VNDK modules with cflags)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   ├── x86                    -> (same as above)
│   ├── common
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (license file modules)
│   └── Android.bp             -> (*.libraries.30.txt modules)
└── (other VNDK versions)      -> (same as above)
פריטי מידע שנוצרו בתהליך פיתוח (Artifact) של build מקומי מתווספים באופן אוטומטי אם קיימים פריטי מידע שנוצרו בתהליך הפיתוח (Artifact) VNDK_SNAPSHOT_BUILD_ARTIFACTS=true.

התקנת תמונות מצב של VNDK

תמונת המערכת מתקינה ספריות תמונת מצב של VNDK בזמן ה-build באמצעות מידע בBOARD_VNDK_VERSION, PRODUCT_EXTRA_VNDK_VERSIONS ו-ro.vndk.version. אתם יכולים לקבוע אילו תמונות מצב של VNDK יותקנו מה-VNDK המובנה מראש ספריות תמונת מצב (לדוגמה, /prebuilts/vndk/v29 או /prebuilts/vndk/v30) באמצעות אחת מהאפשרויות הבאות.

  • אפשרות 1: BOARD_VNDK_VERSION. משתמשים ב את המודולים של קובצי snapshot לבניית המודולים הנוכחיים של הספקים ותתקינו רק את המודולים המודולים של קובצי snapshot שנדרשים למודולים של הספקים.
  • אפשרות 2: PRODUCT_EXTRA_VNDK_VERSIONS. התקנת המודולים של תמונת המצב של VNDK ללא קשר למודולים הנוכחיים של הספקים. הפעולה הזו מתקינה את תמונות המצב של VNDK מוכנות מראש ומפורטות PRODUCT_EXTRA_VNDK_VERSIONS בלי לקשר אותו לאף חשבון אחר בזמן ה-build.

הגדרת board_VNDK_VERSION

BOARD_VNDK_VERSION מציגה את גרסת ה-VNDK של הספק הנוכחי כדי לבנות מודולים נדרשים. אם BOARD_VNDK_VERSION כולל גרסה זמינה של תמונת מצב של VNDK בספרייה /prebuilts/vndk, תמונת המצב של VNDK שצוינה ב-BOARD_VNDK_VERSION מותקנת. אם המיקום תמונת המצב של ה-VNDK לא זמינה בספרייה, מתרחשת שגיאת build.

ההגדרה של BOARD_VNDK_VERSION מאפשרת גם למודולים של VNDK מותקנת. קישור למודולים של ספק עם גרסת תמונת המצב של VNDK שהוגדרה BOARD_VNDK_VERSION בזמן ה-build (הפעולה הזו לא יוצרת את הגרסה הנוכחית VNDK במקור המערכת). כשמורידים את עץ המקור המלא מ- מאגר מסוים, גם מקורות המערכת וגם מקורות הספקים מבוססים על אותו מאגר Android גרסה חדשה.

הגדרת PRODUCT_BRAND_VNDK_VERSIONS

PRODUCT_EXTRA_VNDK_VERSIONS מפרטת את הגרסאות הנוספות של VNDK שיהיו מותקנת. בדרך כלל מספיק תמונת מצב אחת של VNDK אחד מחיצת ספקים. עם זאת, במקרים מסוימים ייתכן שתצטרכו לכלול כמה קובצי snapshot בתמונת מערכת אחת. לדוגמה, ל-GSI יש כמה קובצי snapshot כדי לתמוך בכמה גרסאות של ספקים עם תמונת מערכת אחת. לפי הגדרה PRODUCT_EXTRA_VNDK_VERSIONS, אפשר להתקין את תמונת המצב של VNDK בנוסף לגרסת VNDK ב-BOARD_VNDK_VERSION.

אם ב-PRODUCT_EXTRA_VNDK_VERSIONS יש רשימת גרסאות ספציפית, מערכת ה-build מחפשת תמונות מצב מוכנות מראש של רשימת הגרסאות הספרייה prebuilts/vndk. אם מערכת ה-build מאתרת את כל הוא מתקין את קובצי ה-snapshot בכל VNDK APEX (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER. גרסאות חסרות גורמות לשגיאת build.

המודולים של VNDK לא מקשרים למודולים של הספקים בזמן ה-build אבל הם יכולים להיות בזמן הריצה, אם המודולים של הספקים במחיצת הספק דורשים בגרסאות ה-VNDK המותקנות. PRODUCT_EXTRA_VNDK_VERSIONS חוקי רק אם מוגדר BOARD_VNDK_VERSION.

PLATFORM_VNDK_VERSION

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

  • לפני הפרסום, PLATFORM_VNDK_VERSION מוגדר כך: PLATFORM_VERSION_CODENAME.
  • בגרסת הגרסה, PLATFORM_SDK_VERSION מועתק אל PLATFORM_VNDK_VERSION.

לאחר ההשקה של גרסת Android, ספריות ה-VNDK הנוכחיות מותקנת ב-VNDK APEX (/system/apex/com.android.vndk.vVER), כאשר VER היא הגרסה ששמורה ב- PLATFORM_VNDK_VERSION.

כשהערך בשדה BOARD_VNDK_VERSION הוא current, PLATFORM_VNDK_VERSION שמור ב-ro.vndk.version, אחרת BOARD_VNDK_VERSION נשמר ב- ro.vndk.version PLATFORM_VNDK_VERSION מוגדר לערך גרסת SDK שמופיעה ב-Android. לפני ההשקה, מודל ה-Android האלפאנומרי שם הקוד משמש עבור PLATFORM_VNDK_VERSION.

סיכום הגדרות הגרסה של VNDK

הטבלה מסכמת את ההגדרות של גרסת VNDK.

גרסת
הספק
גרסת
לוח
גרסת
SDK
גרסת
פלטפורמה
גרסה
נכס
התקנת הספרייה
מודולים נוכחיים של VNDK current לפני CODE_NAME CODE_NAME /system/apex/com.android.vndk.vCODE_NAME
אחרי SDK_VER SDK_VER /system/apex/com.android.vndk.vSDK_VER
מודולים מוכנים מראש של תמונת מצב VNDK_VER
לתמונת מצב
לפני או אחרי CODE_NAME
או SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.vVNDK_VER
  • גרסת לוח (BOARD_VNDK_VERSION). VNDK את הגרסה שהמודולים של הספקים דורשים ליצור. יש להגדיר ל-current אם המודולים של הספקים יכולים לקשר למודולים הנוכחיים של המערכת.
  • גרסת פלטפורמה (PLATFORM_VNDK_VERSION). גרסת VNDK שהמודולים הנוכחיים של המערכת בונים. נוצר רק כאשר BOARD_VNDK_VERSION שווה לנוכחי.
  • הנכס בגרסה (ro.vndk.version). מאפיין (property) שמציין את גרסת ה-VNDK שנדרשים עבור הקבצים הבינאריים וה-libs ב-provider.img לרוץ. מאוחסן ב-vendor.img בכתובת /vendor/default.prop.