مساحات الاسم للمكتبات الأصلية

يوفّر الإصدار 7.0 من نظام التشغيل Android مساحات أسماء للمكتبات الأصلية للحدّ من واجهة برمجة التطبيقات الداخلية. إذن الوصول وحلّ المواقف التي تستخدم فيها التطبيقات النظام الأساسي عن طريق الخطأ المكتبات بدلاً من المكتبات الخاصة بها. شاهد تحسّن ثبات الأداء مع قيود الرموز الخاصة C/C++ في Android 7.0 Android مشاركة مدونة مطوّري البرامج عن التغييرات الخاصة بالتطبيقات

هندسة معمارية

في الإصدار 7.0 من Android والإصدارات الأحدث، يتم فصل مكتبات النظام عن مكتبات التطبيقات.

مساحات الاسم للمكتبات الأصلية

الشكل 1. مساحات الاسم للمكتبات الأصلية.

تمنع مساحات الاسم للمكتبات الأصلية التطبيقات من استخدام النسخة الأصلية على مستوى النظام الأساسي الخاص واجهات برمجة التطبيقات (كما تم مع OpenSSL). يزيل أيضًا الحالات التي تكون فيها التطبيقات يستخدمون عن طريق الخطأ مكتبات الأنظمة الأساسية بدلاً من مكتبات المنصات الخاصة بها (كما شهد مع libpng). يصعب على مكتبات التطبيقات استخدام العناصر الداخلية ومكتبات النظام عن طريق الصدفة (والعكس).

إضافة المزيد من المكتبات المجمّعة من رموز برمجية أصلية

بالإضافة إلى المكتبات العامة العادية الأصلية، يمكن لمورّدي سيليكون (بدءًا من Android 7.0) قد تختار الشركات المصنِّعة للأجهزة (بدءًا من Android 9) توفير مكتبات إضافية أصلية التطبيقات من خلال وضعها ضمن مجلدات المكتبة المعنية وإدراجها بشكل صريح في ملفات .txt.

مجلدات المكتبة هي:

  • /vendor/lib (لنظام التشغيل 32 بت) و/vendor/lib64 (لنظام التشغيل 64 بت) لمكتبات مورّدي السيليكون
  • /system/lib (لنظام التشغيل 32 بت) و/system/lib64 (لنظام التشغيل 64 بت) للمكتبات من الشركات المصنِّعة للأجهزة

ملفات .txt هي:

  • /vendor/etc/public.libraries.txt للمكتبات من مورّدي السيليكون
  • /system/etc/public.libraries-COMPANYNAME.txt للمكتبات من الشركات المصنّعة للأجهزة، حيث تشير السمة COMPANYNAME إلى اسم الشركة المصنّعة (مثل awesome.company). يجب أن يتطابق COMPANYNAME مع [A-Za-z0-9_.-]+؛ أحرف أبجدية رقمية، _، . (النقطة) و-. من الممكن ملفات متعددة من هذا النوع في أحد الأجهزة إذا كانت بعض المكتبات من حل خارجي التطبيقات.

المكتبات الأصلية في قسم system التي جعلتها الشركات المصنّعة للأجهزة متاحة للجميع. يجب تسميتها lib*COMPANYNAME.so، على سبيل المثال، libFoo.awesome.company.so. بعبارة أخرى، "يجب عدم نشر libFoo.so" بدون لاحقة اسم الشركة بشكل علني. يجب أن يتطابق COMPANYNAME في اسم ملف المكتبة مع COMPANYNAME في اسم ملف txt الذي تم إدراج اسم المكتبة فيه.

يجب عدم نشر المكتبات الأصلية التي تكون جزءًا من AOSP متاحة للجميع (باستثناء المكتبات العامة الأصلية التي تكون عامة بشكل افتراضي). المكتبات الإضافية التي أضافها فقط يمكن للتطبيقات استخدام مورّدي السيليكون أو الشركات المصنّعة للأجهزة.

بدءًا من Android 8.0، تشمل المكتبات العامة للمورّدين ما يلي: القيود وعمليات الإعداد المطلوبة:

  1. يجب تسمية المكتبة الأصلية في المورِّد بشكل صحيح بحيث يمكن سهل الوصول إليه من خلال التطبيقات. إذا كان الوصول مطلوبًا من قِبل أي من التطبيقات (بما في ذلك الجهات الخارجية تطبيقات تابعة لجهة خارجية)، يجب تصنيف المكتبة على أنّها same_process_hal_file. في ملف file_contexts خاص بالمورّد على النحو التالي:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    حيث يكون libnative.so هو اسم المكتبة الأصلية.
  2. يجب ألا تجري المكتبة، سواء بشكل مباشر أو متعدٍ، من خلال تبعياتها تعتمد على مكتبات النظام بخلاف مكتبات VNDK-SP وLLNDK. حدد قائمة مكتبات VNDK-SP وLLNDK على development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv

بدءًا من نظام التشغيل Android 15 (الإصدار التجريبي من AOSP)، يمكن وضع المكتبات العامة للمورّدين في المورِّد APEX. عند جمعها في ملف APEX للمورِّد، أدرِج المكتبات في السمة provideNativeLibs في بيان APEX.

تحديث التطبيقات لعدم استخدام المكتبات الأصلية غير العامة

لا يتم تفعيل هذه الميزة إلا للتطبيقات التي تستهدف الإصدار 24 من حزمة تطوير البرامج (SDK) أو الإصدارات الأحدث. للتوافق مع الأنظمة القديمة، راجع جدول 1-ما يمكن توقّعه إذا كان تطبيقك يرتبط بمكتبات خاصة أصلية. قائمة مكتبات Android الأصلية التي يمكن للتطبيقات الوصول إليها (وتُعرف أيضًا باسم المكتبات الأصلية العامة) في القسم 3.1.1 من CDD. التطبيقات التي تستهدف 24 أو لاحقًا، واستخدام أي مكتبات غير عامة. راجع NDK التطبيقات التي يتم ربطها بمكتبات النظام الأساسي للحصول على مزيد من التفاصيل

تحديث التطبيقات لتبعيات المكتبة الأصلية

يجب أن تستهدف التطبيقات التي تستهدف الإصدار 31 من حزمة تطوير البرامج (SDK) (Android 12) أو إصدارًا أحدث. التحديد الصريح لتبعيات المكتبة المشتركة الأصلية الخاصة بهم عن طريق استخدام <uses-native-library> في بيان التطبيق. إذا كان هناك أي جزء من الطلب المكتبة غير متاحة على الجهاز، لم يتم تثبيت التطبيق. عند تثبيت التطبيقات، يتم تزويدهم فقط بالمكتبات المشتركة الأصلية التي طلبوها. هذا يعني أنّ لا يمكن للتطبيقات الوصول إلى المكتبات المشتركة الأصلية التي لا تظهر في بيان التطبيق.