תמונת מצב של 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
).
פיתוח קובצי 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
. הסקריפט מבצע את המשימות הבאות:
- ב-
/prebuilts/vndk/vVER
, נעשה שימוש ב-repo start
כדי ליצור הסתעפות חדשה של Git. - מאחזר ומחלץ פריטי ZIP של תמונת מצב של ה-build של VNDK.
- מריצה את
gen_buildfiles.py
כדי ליצור באופן אוטומטי את קובצי ה-build (Android.bp
). - מריץ את
check_gpl_license.py
כדי לאמת את הספריות המוכנות מראש ברישיון במסגרת הרישיון הציבורי הכללי (GPL) יש מקורות שפורסמו עץ המקור הנוכחי. - נעשה שימוש ב-
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
.