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

תמונת מצב של 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 ).

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

בניין לצילומי מצב של ספקים

אנדרואיד 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 שנוצר. סקריפט זה מבצע את המשימות הבאות:

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