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

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

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

في 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 تطبيقات ربط المكتبات منصة لمزيد من التفاصيل.

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

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