אנדרואיד 11 תומך בחפצי בניית תמונת מצב של VNDK ותמונות מצב של ספקים, שבהם אתה יכול להשתמש כדי לבנות vendor.img
ללא קשר לגרסת האנדרואיד בעץ המקור. זה מאפשר גרסאות מעורבות של תמונות, כגון ספק ישן יותר ותמונת מערכת חדשה יותר.
גרסאות תמונה מעורבות אינן נתמכות עבור הבאות.
Android.mk.
מכיוון ש-Soong יוצר את תמונת המצב של הספק, מודולים המוגדרים ב-Android.mk
אינם נלכדים כתמונת מצב של הספק (גם מודולים קנייניים של SoC ב-Android.mk
לא מובטחים שיעבדו).מחטא. תמונות מצב של ספק ו-VNDK אינן תומכות בחומר חיטוי מכיוון שצריך לבנות בנפרד גרסאות של חומרי חיטוי.
לגבי צילומי ספק
תמונת מצב של ספק היא תמונת מצב בבעלות OEM. זוהי קבוצה של מודולי C++ מובנים מראש שמותקנים ב- /vendor
אך מתוחזקים ב-AOSP. ללא לכידת תמונת מצב של ספק של גרסת אנדרואיד הקודמת, שדרוג לגרסת אנדרואיד חדשה עלול לשבור את מחיצת הספק מכיוון שניתן להסיר או לשנות מודולים של תמונת מצב של ספק ללא תאימות API או ABI.
תמונת מצב של ספק מכילה את המודולים הבאים ב-AOSP.
- ספריות משותפות, סטטיות וכותרות עם
vendor: true
אוvendor_available: true
- ספריות סטטיות של VNDK עם
vendor_available: true
- קבצי הפעלה ואובייקטים עם
vendor: true
אוvendor_available: true
מודולים תחת הספריות הבאות נחשבים לקוד חומרה בבעלות SoC ומתעלמים מהם.
-
device/
-
vendor/
-
hardware/
, למעט-
hardware/interfaces
-
hardware/libhardware
-
hardware/libhardware_legacy
-
קודי חומרה בבעלות SoC עשויים להתקיים גם בספריות אחרות. בשלב זה, תמונות מצב של ספקים אינן תומכות בתצורות כאלה.
בניית תמונות מצב של ספקים
בנו תמונת מצב של ספק באמצעות הפקודות הבאות.
. build/envsetup.sh
lunch target
m dist vendor-snapshot
פקודות אלו יוצרות קובץ vendor-$(TARGET_DEVICE).zip
ב- $DIST_DIR
. הדוגמה למטה מציגה קובץ ZIP של הספק.
vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│ ├── binary -> binary files, *.json files
│ ├── header -> *.json files
│ ├── object -> *.o files, *.json files
│ ├── shared -> *.so files, *.json files
│ └── static -> *.a files, *.json files
├── arch-arm-armv8-a -> (arch-arm64-armv8-a)
├── configs -> *.rc files, *.xml files
├── include -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES -> license txt files
- קבצי ה-JSON מכילים דגלים כגון שם מודול, ספריות מיוצאות, קבצי
init_rc
וקבציvintf_fragments
. - ספריית
configs
מכילה קבצי.rc
ו-.xml
מהדגליםinit_rc
ו-vintf_fragments
.
התקנת צילומי ספק
כדי להתקין תמונת מצב של ספק, נווט אל ספריית היעד והשתמש בפקודות הבאות.
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VER
פקודה זו יוצרת /vendor/ vendor name /vendor_snapshot/v VER /$(TARGET_ARCH)/Android.bp
. הדוגמה הבאה מציגה את מבנה הספריות של תמונת מצב של ספק.
vendor/vendor name/vendor_snapshot/
├── v30
│ ├── arm64
│ │ ├── arch-arm64-armv8-a
│ │ │ ├── binary -> (prebuilt libs)
│ │ │ ├── object -> (prebuilt libs)
│ │ │ ├── shared -> (prebuilt libs)
│ │ │ └── static -> (prebuilt libs)
│ │ ├── arch-arm-armv8-a -> (same as above)
│ │ ├── configs -> (config files)
│ │ ├── include -> (exported header files)
│ │ ├── NOTICE_FILES -> (license files)
│ │ └── Android.bp -> (snapshot modules)
│ ├── arm -> (same as above)
│ ├── x86_64 -> (same as above)
│ └── x86 -> (same as above)
└── (other vendor versions) -> (same as above)
בניית תמונות של ספקים
באמצעות חפצי בניית תמונת מצב של VNDK ותמונת מצב של ספק, אתה יכול לבנות vendor.img
ללא קשר לגרסת האנדרואיד בעץ המקור, מה שמאפשר ליצור גרסאות מעורבות של תמונות. לאחר התקנת גם תמונת המצב של VNDK וגם תמונת המצב של הספק, הגדר BOARD_VNDK_VERSION
לגרסת הספק. לדוגמה:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
כאשר BOARD_VNDK_VERSION
מוגדר לערך שאינו current
, מערכת הבנייה:
- מאפשר מודולי תמונת מצב של VNDK ומודולי תמונת מצב של ספק של
BOARD_VNDK_VERSION
. כל מודול תמונת מצב עוקף מודול מקור C++ בעל אותו שם. - מגדיר את
ro.vndk.version
ל-BOARD_VNDK_VERSION
. - מתקין מודולי תמונת מצב של VNDK של
BOARD_VNDK_VERSION
ל-system_ext
.