إنشاء لقطات للمورّدين

يتيح نظام التشغيل Android 11 استخدام عناصر إنشاء لقطة VNDK ولقطات المصنّعين، والتي يمكنك استخدامها لإنشاء vendor.img بغض النظر عن إصدار Android في شجرة المصدر. يتيح ذلك استخدام إصدارات مختلطة من الصور، مثل صورة نظام أقدم من موفِّر قديم وصورة نظام أحدث.

لا تتوفّر إصدارات الصور المختلطة في ما يلي:

  • Android.mk. بما أنّ تطبيق Sayg ينشئ نبذة عن المورِّدين، فإنّ الوحدات المحدّدة في Android.mk لا يتم تسجيلها كنبذة عن المورّدين (لا يمكن أيضًا ضمان عمل الوحدات الخاصة بأنظمة المنظومة على الرقاقة (SoC) في Android.mk).

  • المعقّم: لا تتوافق لقطات المورّد ومجموعة تطوير البرامج (VNDK) مع أداة التعقيم، لأنّه يجب إنشاء الصيغ المتعلّقة بأداة التعقيم بشكل منفصل.

لمحة عن نبذات المورّدين

نبذة المورّد هي نبذة يملكها المصنّع الأصلي للجهاز. وهي مجموعة من وحدات C++ المُنشأة مسبقًا التي تم تثبيتها في /vendor ولكن يتم الاحتفاظ بها في AOSP. في حال عدم التقاط لقطة شاشة للجهة المصنّعة لإصدار Android السابق، قد يؤدي الترقية إلى إصدار Android جديد إلى إيقاف قسم الجهة المصنّعة لأنّه يمكن إزالة وحدات لقطة الشاشة الخاصة بالجهة المصنّعة أو تغييرها بدون توافق مع واجهة برمجة التطبيقات أو 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. يعرض المثال التالي ملفًا مضغوطًا للقطة شاشة المورّد:

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/vVER/$(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 بغض النظر عن إصدار Android في شجرة المصدر، ما يتيح إنشاء إصدارات مختلطة من الصور. بعد تثبيت كل من لقطة 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.