קובץ snapshot של VNDK הוא קבוצה של ספריות VNDK-core ו-VNDK-SP לגרסה של Android.
אפשר לשדרג רק את מחיצת המערכת אם system.img
כולל את קובץ ה-snapshot התואם של VNDK שנחוץ ל-vendor.img
.
קובצי snapshot רשמיים של VNDK נוצרים באופן אוטומטי בשרת ה-build של Android ומאוחסנים ב-/prebuilts/vndk
של עץ המקור של Android. למטרות פיתוח, אפשר ליצור קובצי snapshot של VNDK באופן מקומי. יש תמיכה ב-VNDK snapshots לגרסאות TARGET_ARCH
של arm, arm64, x86 ו-x86_64.
יצירת קובצי snapshot
שרת ה-build של Android יוצר ארטיפקטים של build וקובצי snapshot של 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
זהה לtarget archs (arm
, arm64
, x86
, x86_64
) של Generic System Image (GSI). TARGET_ARCH_VARIANT
. ב-snapshot מגרסה 28 (Android 9) ואילך, כולל הגדרות פופולריות שצוינו למעלה.
פקודות build
ב-Android 9 ואילך, קובצי snapshot רשמיים כוללים יעד לדוגמה (vndk
) ב-vndk.mk
שמייצר קובץ snapshot של 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
קובץ ה-snapshot של VNDK לגרסה של Android נוצר מההסתעפות של הגרסה הזו.
פיתוח גרסת build באופן מקומי
במהלך הפיתוח, אפשר ליצור קובצי snapshot של 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
קובץ 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 של קובץ snapshot של VNDK, android-vndk-$(TARGET_ARCH).zip
, הספריות המוכנות מראש של VNDK מקובצות בתיקיות נפרדות בשם arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
בהתאם ל-ABI של הביטים. לדוגמה, עבור android-vndk-arm64.zip
, הספריות של 64 ביט ממוקמות ב-arch-arm64-armv8-a
והספריות של 32 ביט ממוקמות ב-arch-arm-armv8-a
. הדוגמה הבאה מציגה את מבנה הספריות של קובץ ZIP של snapshot של VNDK (android-vndk-arm64.zip
) ב-arm64 (TARGET_ARCH=arm64
).

פיתוח גרסאות build לתמונות מצב של ספקים
ב-Android 11 יש תמיכה בקובצי snapshot של ספקים, שמאפשרים ליצור את vendor.img
ללא קשר לגרסה של Android בעץ המקור. קובץ snapshot שמוגדר כברירת מחדל ב-VNDK מכיל את קובצי הספרייה המשותפת (.so
) שאפשר להתקין במכשירים, ואז לקשר אותם מקובצי ה-binary של C++ של הספק בסביבת זמן הריצה. כדי לבצע פיתוח לצד קובץ ה-snapshot של VNDK, נדרשים פריטים נוספים כמו קובצי כותרות ודגלים שיוצאו.
כדי ליצור ארטיפקטים כאלה (יחד עם קובץ snapshot של VNDK) מעץ מקומי של מקורות, משתמשים בפקודה הבאה.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
הפקודה הזו יוצרת קבצים מסוג android-vndk-$(TARGET_ARCH).zip
בתיקייה $DIST_DIR
. הדוגמה הבאה היא קובץ ZIP של snapshot של VNDK ב-arm64 עם ארטיפקטים של build. הקבצים המודגשים הם קבצים שנוספו לאחרונה ל-snapshot הרגיל של 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
העלאת קובצי snapshot של VNDK
קובצי snapshot של VNDK נבדקים בעץ המקור בקטע /prebuilts/vndk/vVER
, כאשר VER
שווה לגרסה של קובץ ה-snapshot של VNDK (שנקבעת לפי גרסת ה-SDK של גרסת Android המתאימה). לדוגמה, קובץ snapshot של VNDK ב-Android 8.1 הוא בגרסה 27.
שימוש בסקריפט update.py
הסקריפט update.py
(/development/vndk/snapshot/update.py
) מאפשר להוסיף באופן אוטומטי קובץ snapshot של VNDK שנוצר מראש לעץ המקור. הוא מזהה באופן אוטומטי ארטיפקטים של גרסאות build וממלא בצורה מתאימה את המאפיינים המשויכים ב-Android.bp
שנוצר. הסקריפט הזה מבצע את המשימות הבאות:
- ב-
/prebuilts/vndk/vVER
, משתמשים ב-repo start
כדי ליצור הסתעפות Git חדשה. - אחזור ופתיחת קובצי ארכיון של פריטי מידע שנוצרו בתהליך פיתוח (artifacts) של קובץ snapshot של VNDK.
- הפקודה
gen_buildfiles.py
מפעילה את היצירה האוטומטית של קובצי ה-build (Android.bp
). - הפקודה
check_gpl_license.py
מופעלת כדי לוודא שלספריות שנוצרו מראש ברישיון General Public License (GPL) יש מקורות שפורסמו בעץ המקורות הנוכחי. - משתמשים ב-
git commit
כדי לבצע השינויים החדשים.
שימוש ב-snapshots של VNDK שנוצרו באופן מקומי
אפשר גם להשתמש ב-snapshots של VNDK שנוצרו באופן מקומי. כשמציינים את האפשרות --local
, הסקריפט update.py
מאחזר את ארטיפקטי ה-build של קובץ ה-snapshot של VNDK מהספרייה המקומית שצוינה (במקום משרת ה-build של Android), שבה נמצאים הקבצים android-vndk-$(TARGET_ARCH).zip
שנוצרו מהקובץ development/vndk/snapshot/build.sh
. כשמשתמשים באפשרות --local
, הסקריפט update.py
מדלג על בדיקת הרישיון של GPL ועל השלבים git commit
.
תחביר:
python update.py VER --local local_path
דוגמה לפקודה לעדכון קובץ ה-snapshot של VNDK בגרסה 8.1 של Android באמצעות ארטיפקטים מקומיים של build ב-/path/to/local/dir
:
python update.py 27 --local /path/to/local/dir
דוגמה למבנה ספרייה של קובץ snapshot של 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)
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true
.
התקנה של קובצי snapshot של VNDK
קובץ האימג' של המערכת מתקין ספריות של קובצי snapshot של VNDK בזמן ה-build באמצעות המידע שמופיע ב-BOARD_VNDK_VERSION
, ב-PRODUCT_EXTRA_VNDK_VERSIONS
וב-ro.vndk.version
.
אתם יכולים לקבוע אילו קובצי snapshot של VNDK יותקנו מהספריות של קובצי ה-snapshot של VNDK שנוצרו מראש (לדוגמה, /prebuilts/vndk/v29
או /prebuilts/vndk/v30
) באמצעות אחת מהאפשרויות הבאות.
- אפשרות 1:
BOARD_VNDK_VERSION
. משתמשים במודולים של קובצי snapshot כדי ליצור את המודולים הנוכחיים של הספק, ומתקינים רק את המודולים של קובצי snapshot שנדרשים למודולים של הספק. - אפשרות 2:
PRODUCT_EXTRA_VNDK_VERSIONS
. התקנת המודולים של קובצי snapshot של VNDK ללא קשר למודולים הנוכחיים של הספק. הפקודה הזו מתקינה את קובצי ה-snapshot של VNDK שנוצרו מראש ומפורטים בקובץPRODUCT_EXTRA_VNDK_VERSIONS
, בלי לקשר אותם למודולים אחרים בזמן ה-build.
הגדרת BOARD_VNDK_VERSION
BOARD_VNDK_VERSION
מציג את גרסת VNDK שנדרשת ליצירת מודולים של ספקים קיימים. אם ב-BOARD_VNDK_VERSION
יש גרסה זמינה של קובץ snapshot של VNDK בספרייה /prebuilts/vndk
, קובץ ה-snapshot של VNDK שצוין ב-BOARD_VNDK_VERSION
מותקן. אם קובץ snapshot של VNDK לא זמין בספרייה, מתרחשת שגיאה ב-build.
הגדרת BOARD_VNDK_VERSION
מאפשרת גם להתקין את המודולים של VNDK. מודולים של ספקים מקושרים לגרסה של קובץ ה-snapshot של VNDK שמוגדרת ב-BOARD_VNDK_VERSION
בזמן ה-build (הפעולה הזו לא יוצרת את המודולים הנוכחיים של VNDK במקור המערכת). כשמורידים את עץ המקור המלא ממאגר, גם מקורות המערכת וגם מקורות הספק מבוססים על אותה גרסה של Android.
הגדרת PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS
מציג את הגרסאות הנוספות של VNDK שצריך להתקין. בדרך כלל מספיק קובץ snapshot אחד של VNDK למחיצה הנוכחית של הספק. עם זאת, במקרים מסוימים יכול להיות שתצטרכו לכלול כמה קובצי snapshot בתמונת מערכת אחת. לדוגמה, ל-GSI יש כמה קובצי snapshot כדי לתמוך בכמה גרסאות של ספקים באמצעות קובץ אימג' מערכת אחד. כשמגדירים את PRODUCT_EXTRA_VNDK_VERSIONS
, אפשר להתקין את המודולים של קובץ ה-snapshot של VNDK בנוסף לגרסה של VNDK ב-BOARD_VNDK_VERSION
.
אם ב-PRODUCT_EXTRA_VNDK_VERSIONS
יש רשימה ספציפית של גרסאות, מערכת ה-build מחפשת קובצי snapshot מוכנים מראש של רשימת הגרסאות בתיקייה prebuilts/vndk
. אם מערכת ה-build מאתרת את כל קובצי ה-snapshot שרשומים, היא מתקינה את קובצי ה-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.
Vendor Build |
Board Version |
SDK Release |
גרסת הפלטפורמה |
מאפיין Version |
ספריית ההתקנות |
---|---|---|---|---|---|
המודולים הנוכחיים של VNDK | current |
לפני | CODE_NAME |
CODE_NAME |
/system/apex/com.android.vndk.vCODE_NAME |
אחרי | SDK_VER |
SDK_VER |
/system/apex/com.android.vndk.vSDK_VER |
||
מודולים מוכנים מראש של קובצי snapshot | VNDK_VER לתמונת מצב |
לפני או אחרי | CODE_NAME או SDK_VER |
VNDK_VER |
/system_ext/apex/com.android.vndk.vVNDK_VER |
- Board Version (
BOARD_VNDK_VERSION
). גרסת VNDK שנדרשת למודולים של הספק לצורך פיתוח. מגדירים את הערךcurrent
אם אפשר לקשר בין מודולים של ספקים לבין מודולים קיימים במערכת. - Platform Version (
PLATFORM_VNDK_VERSION
). גרסת VNDK שבה נוצרים מודולי המערכת הנוכחיים. ה-build נוצר רק כאשרBOARD_VNDK_VERSION
שווה ל-current. - Version Property (
ro.vndk.version
). נכס שמציין את גרסת VNDK שנדרשת כדי להריץ את הקבצים הבינאריים והספריות ב-vendor.img. מאוחסן ב-vendor.img
ב-/vendor/default.prop
.