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

قدَّم نظام التشغيل Android 7.0 مساحات أسماء للمكتبات الأصلية بهدف الحدّ من إمكانية الوصول إلى واجهات برمجة التطبيقات الداخلية وحلّ الحالات التي تستخدم فيها التطبيقات مكتبات النظام الأساسي عن طريق الخطأ بدلاً من مكتباتها الخاصة. يمكنك الاطّلاع على مشاركة مدوّنة "مطوّرو تطبيقات Android" بعنوان تحسين الثبات من خلال قيود رموز C/C++ الخاصة في الإصدار 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_.-]+، ويجب أن يتضمّن أحرفًا أبجدية رقمية ورموز _ و. (نقطة) و-. من الممكن أن يتضمّن الجهاز عدة ملفات txt .من هذا النوع إذا كانت بعض المكتبات من موفّري حلول خارجيين.

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

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

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

  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، يمكن وضع المكتبات العامة الخاصة بالمورِّدين في حزمة APEX خاصة بالمورِّدين. عند تجميعها في حزمة APEX خاصة بمورّد، يجب إدراج المكتبات في السمة provideNativeLibs في بيان APEX.

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

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

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

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