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

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

بنيان

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

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

الشكل 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 الذي تم إدراج اسم المكتبة فيه.

يجب ألا تكون المكتبات الأصلية التي تعد جزءًا من 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 .

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

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

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

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