תמונת מצב של VNDK היא קבוצה של ליבות VNDK ו-VNDK-SP עבור מהדורת אנדרואיד. אתה יכול לשדרג רק את מחיצת המערכת אם system.img
כולל את תמונת המצב המתאימה של VNDK הדרושה ל- vendor.img
.
תמונות VNDK רשמיות נבנות באופן אוטומטי בשרת ה-build של אנדרואיד ונכנסות ל- /prebuilts/vndk
של עץ המקור של אנדרואיד. למטרות פיתוח, אתה יכול לבנות צילומי VNDK באופן מקומי. תצלומי מצב של VNDK נתמכים עבור טעמי זרוע, arm64, x86 ו-x86_64 TARGET_ARCH
.
בניית צילומי מצב
שרת ה-build של אנדרואיד יוצר חפצי בנייה וקבצי תמונת מצב של VNDK באמצעות פרמטרי ה-build ופקודות ה-build הבאים.
בניית פרמטרים
שם יעד הבנייה הוא vndk
. תצורת יעד הבנייה מוצגת להלן.
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
. עבור תמונת מצב v28 (אנדרואיד 9) ומעלה, כולל תצורות פופולריות המפורטות למעלה.
בניית פקודות
עבור תמונות מצב רשמיות, אנדרואיד 9 ומעלה כולל יעד לדוגמה ( vndk
) ב- vndk.mk
שבונה ומוציא תמונת מצב של VNDK ל- $DIST_DIR
. קובץ ה-ZIP של תמונת המצב משתמש בפורמט 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 עבור גרסת אנדרואיד נוצרת מסניף ההפצה של אותה גרסה.
בנייה מקומית
במהלך הפיתוח, אתה יכול לבנות צילומי VNDK מעץ מקור מקומי עם הפקודות הבאות.
- כדי לבנות את כל הקשתות הנתמכות בבת אחת, בצע את סקריפט הבנייה הבא (
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
.
קבצי תמונת מצב
תמונת מצב של VNDK כוללת את הקבצים הבאים.
- גרסת ספק של ספריות משותפות VNDK-core ו-VNDK-SP.
- LL-NDK libs משותפות אינם נחוצים מכיוון שהם תואמים לאחור.
- עבור יעדי 64 סיביות, הן ספריות
TARGET_ARCH
והןTARGET_2ND_ARCH
בנויות ונכללות.
- רשימה של ספריות VNDK-core, VNDK-SP, LL-NDK ו-VNDK-פרטיות נמצאת בכתובת
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt
. - קבצי רישיון.
-
module_paths.txt
. מתעד את נתיבי המודול עבור כל ספריות ה-VNDK, הדרושות לבדיקה שלפרויקטי GPL יש מקורות שפורסמו בעץ מקור נתון של אנדרואיד.
עבור קובץ ZIP נתון של תמונת מצב של VNDK, android-vndk-$(TARGET_ARCH).zip
, הספריות המובנות מראש של VNDK מקובצות בספריות נפרדות בשם arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
לפי bitness של ABI. לדוגמה, עבור android-vndk-arm64.zip
, ה-libs של 64 סיביות ממוקמים תחת arch-arm64-armv8-a
וה-32 סיביות libs ממוקמות תחת arch-arm-armv8-a
. הדוגמה להלן מציגה את מבנה הספריות עבור קובץ ZIP של arm64 ( TARGET_ARCH=arm64
) VNDK תמונת מצב ( android-vndk-arm64.zip
).
בניין לצילומי מצב של ספקים
אנדרואיד 11 תומך בתמונות מצב של ספקים , המאפשרות לך לבנות vendor.img
ללא קשר לגרסת האנדרואיד בעץ המקור. תמונת מצב ברירת מחדל של 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 עם חפצי בנייה. הקבצים המודגשים הם קבצים שנוספו לאחרונה לתמונת מצב רגילה של 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/v VER
, כאשר VER
שווה לגרסה של תמונת ה-VNDK (העוקבת אחר גרסת ה-SDK של מהדורת Android המקבילה). לדוגמה, לצילום ה-Android 8.1 VNDK יש גרסה 27.
שימוש בסקריפט update.py
הסקריפט update.py
( /development/vndk/snapshot/update.py
) הופך את התהליך של הוספת תמונת מצב VNDK בנויה מראש לעץ המקור לאוטומטי. הוא מזהה אוטומטית חפצי בנייה וממלא כראוי את המאפיינים המשויכים ב- Android.bp
שנוצר. סקריפט זה מבצע את המשימות הבאות:
- ב-
/prebuilts/vndk/v VER
, משתמשrepo start
כדי ליצור סניף חדש של Git. - מאחזר ופותח חפצי בניית תמונת מצב של VNDK.
- מפעיל את
gen_buildfiles.py
כדי ליצור אוטומטית את קבצי ה-build (Android.bp
). - מפעיל את
check_gpl_license.py
כדי לוודא שלספריות המובנות מראש המורשות תחת הרישיון הציבורי הכללי (GPL) יש מקורות שפורסמו בעץ המקור הנוכחי. - משתמש ב-
git commit
כדי לבצע שינויים חדשים.
שימוש בתמונות VNDK שנבנו באופן מקומי
אתה יכול גם להשתמש בתמונות VNDK שנבנו באופן מקומי. כאשר האפשרות --local
מצוינת, הסקריפט update.py
מביא חפצי בנייה של תמונת מצב של 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
פקודה לדוגמה לעדכון תמונת המצב של Android 8.1 VNDK עם חפצי בנייה מקומיים ב- /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)חפצי בנייה מקומיים מתווספים אוטומטית אם חפצים נבנו עם
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true
.התקנת צילומי VNDK
תמונת המערכת מתקינה ספריות תמונת מצב של VNDK בזמן הבנייה באמצעות המידע ב- BOARD_VNDK_VERSION
, PRODUCT_EXTRA_VNDK_VERSIONS
ו- ro.vndk.version
. אתה יכול לשלוט אילו תמונות VNDK יותקנו מתוך ספריות תמונת ה-VNDK המובנות מראש (לדוגמה, /prebuilts/vndk/v29
או /prebuilts/vndk/v30
) באמצעות אחת מהאפשרויות הבאות.
- אפשרות 1:
BOARD_VNDK_VERSION
. השתמש במודולי תמונת המצב לבניית מודולי הספק הנוכחיים והתקן רק את מודולי תמונת המצב הנדרשים עבור מודולי הספק. - אפשרות 2:
PRODUCT_EXTRA_VNDK_VERSIONS
. התקן את מודולי תמונת המצב של VNDK ללא קשר למודולי הספק הנוכחיים. פעולה זו מתקינה את תצלומי ה-VNDK המובנים מראש המופיעים ב-PRODUCT_EXTRA_VNDK_VERSIONS
מבלי לקשר אותם למודולים אחרים כלשהם בזמן הבנייה.
הגדרת BOARD_VNDK_VERSION
BOARD_VNDK_VERSION
מציג את גרסת ה-VNDK שנדרש לבנות מודולי הספק הנוכחיים. אם BOARD_VNDK_VERSION
יש גרסת תמונת מצב זמינה של VNDK בספריית /prebuilts/vndk
, מותקנת תמונת המצב של VNDK המצוינת ב- BOARD_VNDK_VERSION
. אם תמונת המצב של VNDK אינה זמינה בספרייה, מתרחשת שגיאת בנייה.
הגדרת BOARD_VNDK_VERSION
מאפשרת גם להתקין את מודולי VNDK. מודולי ספק מקשרים לגרסת תמונת המצב של VNDK שהוגדרה ב- BOARD_VNDK_VERSION
בזמן הבנייה (זה לא בונה מודולי VNDK נוכחיים במקור המערכת). בעת הורדת עץ המקור המלא ממאגר, מקורות המערכת והספק מבוססים על אותה גרסת אנדרואיד.
הגדרת PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS
מפרט את גרסאות ה-VNDK הנוספות שיש להתקין. בדרך כלל זה מספיק כדי לקבל תמונת מצב אחת של VNDK עבור מחיצת הספק הנוכחית. עם זאת, במקרים מסוימים ייתכן שיהיה עליך לכלול מספר צילומי מצב בתמונת מערכת אחת. לדוגמה, ל-GSI יש מספר צילומי מצב לתמיכה במספר גרסאות של ספקים עם תמונת מערכת אחת. על ידי הגדרת PRODUCT_EXTRA_VNDK_VERSIONS
, תוכל להתקין את מודולי תמונת המצב של VNDK בנוסף לגרסת VNDK ב- BOARD_VNDK_VERSION
.
אם PRODUCT_EXTRA_VNDK_VERSIONS
יש רשימה ספציפית של גרסאות, מערכת ה-build מחפשת תמונות מצב מובנות מראש של רשימת הגרסאות בספריית prebuilts/vndk
. אם מערכת ה-build מאתרת את כל התמונות הרשומות, היא מתקינה את קבצי הצילום לכל APEX של VNDK ( out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.v VER
. גרסאות חסרות יוצרות שגיאת בנייה.
מודולי VNDK אינם מקשרים עם מודולי הספק בזמן הבנייה, אך ניתן להשתמש בהם בזמן ריצה אם מודולי הספק במחיצת הספק דורשים אחת מגרסאות 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
.
לאחר שחרור גרסת האנדרואיד, ספריות VNDK הנוכחיות מותקנות ב-VNDK APEX ( /system/apex/com.android.vndk.v VER
), כאשר 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 משמש עבור PLATFORM_VNDK_VERSION
.
סיכום הגדרות גרסת VNDK
הטבלה שלהלן מסכמת את הגדרות גרסת VNDK.
מוֹכֵר לִבנוֹת | גלשן גִרְסָה | SDK לְשַׁחְרֵר | פּלַטפוֹרמָה גִרְסָה | גִרְסָה תכונה | התקן ספרייה |
---|---|---|---|---|---|
מודולי VNDK נוכחיים | current | לפני | CODE_NAME | CODE_NAME | /system/apex/com.android.vndk.v CODE_NAME |
לאחר | SDK_VER | SDK_VER | /system/apex/com.android.vndk.v SDK_VER | ||
מודולי תמונת מצב בנויים מראש | VNDK_VER לתמונת מצב | לפני או אחרי | CODE_NAME או SDK_VER | VNDK_VER | /system_ext/apex/com.android.vndk.v VNDK_VER |
- גרסת לוח (
BOARD_VNDK_VERSION
). גרסת VNDK שמודולי הספק דורשים לבנות. הגדר למצבcurrent
אם מודולי הספק יכולים לקשר עם מודולי המערכת הנוכחיים. - גרסת הפלטפורמה (
PLATFORM_VNDK_VERSION
). גרסת VNDK שבונים מודולי המערכת הנוכחיים. נבנה רק כאשרBOARD_VNDK_VERSION
שווה לזרם. - נכס גרסה (
ro.vndk.version
). מאפיין המציין את גרסת ה-VNDK שהקבצים הבינאריים וה-libs ב-vendor.img דורשים לפעול. מאוחסן ב-vendor.img
ב-/vendor/default.prop
.