تفعيل VNDK

تتطلب مجموعة أدوات التطوير الأصلية للمورّدين (VNDK) إجراء عدة تغييرات على قاعدة الرموز لفصل المخاوف بين البائع والنظام. استخدِم الدليل التالي لتفعيل حزمة VNDK في المورّد أو المصنّع الأصلي للجهاز. أو قاعدة التعليمات البرمجية.

إنشاء مكتبات النظام

يتضمّن نظام التصميم أنواعًا عديدة من العناصر، بما في ذلك المكتبات. (مشتركة أو ثابتة أو ذات رأس) وثنائيات.

إنشاء مكتبات النظام

الشكل 1. إنشاء مكتبات النظام

  • تستخدم صورة النظام core مكتبات على صورة النظام. هذه لا يمكن استخدام المكتبات من خلال vendor أو vendor_available vndk أو vndk-sp مكتبات
    cc_library {
        name: "libThatIsCore",
        ...
    }
    
  • تُستخدم مكتبات vendor-only (أو proprietary) من قِبل صورة البائع، على صورة البائع.
    cc_library {
        name: "libThatIsVendorOnly",
        proprietary: true,
        # or: vendor: true, # (for things in AOSP)
        ...
    }
    
  • تستخدم صورة المورّد vendor_available مكتبات صورة (قد تحتوي على نسخ مكررة من core).
    cc_library {
        name: "libThatIsVendorAvailable",
        vendor_available: true,
        ...
    }
    
  • تستخدم صورة المورد vndk مكتبات على صورة النظام.
    cc_library {
        name: "libThatIsVndk",
        vendor_available: true,
        vndk: {
            enabled: true,
        }
        ...
    }
    
  • يتم استخدام vndk-sp مكتبات من خلال صورة البائع وأيضًا من خلال صورة النظام بطريقة غير مباشرة.
    cc_library {
        name: "libThatIsVndkSp",
        vendor_available: true,
        vndk: {
            enabled: true,
            support_system_process: true,
        }
        ...
    }
    
  • يستخدم كل من صور النظام والمورد llndk مكتبات.
    cc_library {
        name: "libThatIsLlndk",
        llndk: {
            symbol_file: "libthatisllndk.map.txt"
        }
        ...
    }
    

عندما يتم وضع علامة vendor_available:true على lib، يتم إنشاؤها مرتين:

  • مرة واحدة للنظام الأساسي (وبالتالي سيتم تثبيته على /system/lib)
  • مرة واحدة للمورّد (وبالتالي يتم تثبيته على /vendor/lib أو VNDK APEX)

تم إنشاء إصدارات المورّدين من libs باستخدام -D__ANDROID_VNDK__. مكونات النظام الخاصة التي قد تتغير بشكل كبير في الإصدارات المستقبلية من تم إيقاف Android عند استخدام هذه العلامة. بالإضافة إلى ذلك، تصدر المكتبات المختلفة مجموعة مختلفة من العناوين (مثل liblog). الخيارات المتعلقة بـ يمكن تحديد صيغة المورّد للهدف في ملف Android.bp في:

target: { vendor: { … } }

تفعيل VNDK لقاعدة رموز

لتفعيل VNDK لقاعدة رموز:

  1. تحديد الأهلية من خلال حساب المقاسات المطلوبة قسمان (vendor.img) وsystem.img.
  2. تفعيل ميزة BOARD_VNDK_VERSION=current يمكنك الإضافة إلى BoardConfig.mk أو إنشاء مكونات باستخدامه مباشرةً (على سبيل المثال، m -j BOARD_VNDK_VERSION=current MY-LIB).

بعد تفعيل BOARD_VNDK_VERSION=current، سيوفّر نظام التصميم. تتيح متطلبات التبعية والرأس التالية.

إدارة التبعيات

عنصر vendor يعتمد على مكوّن core غير موجود في vndk أو كعنصر vendor يجب حلها باستخدام أحد الخيارات التالية:

  • يمكن إزالة التبعية.
  • إذا كان المكوِّن core مملوكًا من قِبل vendor، يمكنه أن يتم وضع علامة vendor_available أو vendor عليها.
  • قد يكون أي تغيير يجعل الكائن الأساسي جزءًا من vndk إلى Google.

وبالإضافة إلى ذلك، إذا كان المكوِّن core يشتمل على تبعيات على المكوِّن vendor، يجب إنشاء المكوِّن vendor في مكون core أو يجب أن تكون التبعية بطريقة أخرى (على سبيل المثال، عن طريق إزالة التبعية أو نقل والتبعية إلى مكون vendor).

إدارة العناوين

يجب إزالة تبعيات العناوين العامة ليتمكّن نظام الإصدار من معرفة ما إذا كان سيتم إنشاء العناوين باستخدام السمة -D__ANDROID_VNDK__ أو بدونها. على سبيل المثال، يمكن استخدام عناوين libutils مثل utils/StrongPointer.h الوصول إليها باستخدام مكتبة العناوين libutils_headers

لم يعد من الممكن تضمين بعض العناوين (مثل unistd.h) بشكل متعدٍ. ولكن يمكن تضمينها محليًا.

أخيرًا، الجزء العام من private/android_filesystem_config.h تم نقل إلى cutils/android_filesystem_config.h. للإدارة هذه العناوين، يمكنك تنفيذ أحد الإجراءات التالية:

  • قم بإزالة التبعية إلى private/android_filesystem_config.h عن طريق استبدال الكل AID_* وحدة ماكرو مع getgrnam/ getpwnam مكالمة إن أمكن. مثل:
    • يصبح (uid_t)AID_WIFI getpwnam("wifi")->pw_uid
    • يصبح (gid_t)AID_SDCARD_R getgrnam("sdcard_r")->gr_gid
    للحصول على التفاصيل، يمكنك الرجوع إلى private/android_filesystem_config.h
  • بالنسبة إلى AIS غير المعدَّلة، يجب تضمين cutils/android_filesystem_config.h