طرح نظام التشغيل Android 7.0 نطاقات أسماء للمكتبات الأصلية من أجل الحد من مستوى رؤية واجهة برمجة التطبيقات الداخلية وحلّ المشاكل التي تستخدم فيها التطبيقات عن طريق الخطأ مكتبات النظام الأساسي بدلاً من مكتباتها الخاصة. يمكنك الاطّلاع على مشاركة تحسين الثبات باستخدام قيود الرموز الخاصة بلغة C/C++ في الإصدار 7.0 من نظام التشغيل Android على مدونة "مطوّرو تطبيقات Android" لمعرفة التغييرات الخاصة بالتطبيق.
هندسة معمارية
في الإصدار 7.0 من Android والإصدارات الأحدث، يتم فصل مكتبات النظام عن مكتبات التطبيقات.
تمنع مساحات أسماء المكتبات الأصلية التطبيقات من استخدام واجهة برمجة التطبيقات
الأصلية للأنظمة الأساسية الخاصة (كما حدث مع OpenSSL). ويزيل هذا الإجراء أيضًا الحالات التي تستخدم فيها التطبيقات
مكتبات النظام عن طريق الخطأ بدلاً من مكتباتها الخاصة (كما حدث
مع libpng
). ومن الصعب أن تستخدم مكتبات التطبيقات
مكتبات النظام الداخلية عن طريق الخطأ (والعكس صحيح).
إضافة مكتبات أصلية إضافية
بالإضافة إلى المكتبات الأصلية العامة العادية، قد يختار مورّدو السيليكون (بدءًا من Android 7.0) وصنّاع الأجهزة (بدءًا من Android 9) توفير مكتبات أصلية إضافية يمكن للتطبيقات الوصول إليها من خلال وضعها ضمن مجلدات المكتبة ذات الصلة وإدراجها صراحةً في ملفات txt.
مجلدات المكتبة هي:
/vendor/lib
(للإصدار 32 بت) و/vendor/lib64
(للإصدار 64 بت) لمكتبات مورّدي silicon/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_.-]+
، أي الأحرف الأبجدية الرقمية والشرطة المائلة والنقطة. (dot) و-. يمكن أن يكون لديك عدة ملفات .txt من هذا النوع في أحد الأجهزة إذا كانت بعض المكتبات من موفّري حلول خارجيين.
بالنسبة إلى المكتبات المجمّعة من رموز برمجية أصلية في قسم system
التي تُعلن عنها الشركات المصنّعة للأجهزة،يجب أن يكون اسمها lib*COMPANYNAME.so
، على سبيل المثال، libFoo.awesome.company.so
.
بعبارة أخرى، يجب عدم نشر libFoo.so
بدون إضافة اسم الشركة.
يجب أن يتطابق الرمز COMPANYNAME
في اسم ملف المكتبة مع الرمز COMPANYNAME
في اسم ملف
txt الذي يتضمّن اسم المكتبة.
"يجب ألا تكون المكتبات الأصلية التي تكون جزءًا من AOSP متاحة للجميع (باستثناء المكتبات العامة العادية والعامة التي تكون علنية بشكل تلقائي). يمكن للتطبيقات الوصول إلى المكتبات الإضافية التي أضافها مورّدو السيليكون أو المصنّعون فقط.
بدءًا من الإصدار 8.0 من نظام التشغيل Android، تفرض المكتبات العامة الخاصة بالمورّدين القيدَين التاليَين والإعدادات المطلوبة:
- يجب تصنيف المكتبة المجمّعة من رموز برمجية أصلية في المورّد بشكلٍ صحيح لكي تتمكّن التطبيقات من
الوصول إليها. إذا كان الوصول مطلوبًا من خلال أي تطبيقات (بما في ذلك التطبيقات
التابعة لجهات خارجية)، يجب تصنيف المكتبة على أنّها
same_process_hal_file
في ملفfile_contexts
خاص بالمورّد على النحو التالي: حيث يكون/vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
libnative.so
هو اسم المكتبة المدمجة مع المحتوى. - يجب ألّا تعتمد المكتبة، سواء بشكل مباشر أو غير مباشر من خلال تبعياتها،
على مكتبات النظام غير مكتبتَي VNDK-SP وLLNDK. حدِّد موقع قائمة مكتبتَي
VNDK-SP وLLNDK على الرابط
development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv
.
بدءًا من نظام التشغيل Android 15، يمكن وضع المكتبات العامة للمورّدين في واجهة برمجة تطبيقات مورِّدين. عند تجميع المكتبات في حزمة APEX الخاصة بأحد المورّدين، يجب إدراجها
في ملف provideNativeLibs
في بيان APEX.
تحديث التطبيقات لعدم استخدام المكتبات الأصلية غير العامة
لا يتم تفعيل هذه الميزة إلا للتطبيقات التي تستهدف الإصدار 24 من حزمة تطوير البرامج (SDK) أو الإصدارات الأحدث. للتوافق مع الإصدارات الأقدم، يُرجى الاطّلاع على الجدول 1. النتائج المتوقّعة في حال كان تطبيقك يرتبط بمكتبات برمجية أصلية خاصة يمكن العثور على قائمة المكتبات المجمّعة من الرموز البرمجية الأصلية لنظام التشغيل Android التي يمكن للتطبيقات الوصول إليها (المعروفة أيضًا باسم المكتبات المجمّعة من الرموز البرمجية الأصلية المتاحة للجميع) في القسم 3.1.1 من CDD. يجب تحديث التطبيقات التي تستهدف الإصدار 24 أو الإصدارات الأحدث وتستخدم أي مكتبات غير علنية. اطّلِع على NDK ربط التطبيقات بمكتبات المنصة لمزيد من التفاصيل.
تحديث التطبيقات لتتوافق مع مكتباتها المجمّعة من رموز برمجية أصلية
على التطبيقات التي تستهدف الإصدار 31 من حزمة تطوير البرامج (SDK) (Android 12) أو الإصدارات الأحدث
أن تحدّد بشكل صريح ملحقات المكتبة المشتركة الأصلية باستخدام
العلامة <uses-native-library>
في بيان التطبيق. إذا لم يكن أي جزء من مكتبة التطبيقات المطلوبة متوفّرًا على الجهاز، لن يتم تثبيت التطبيق. عند تثبيت التطبيقات، يتم تزويدها فقط بالمكتبات المشتركة الأصلية التي طلبتها. وهذا يعني أنّه
لا يمكن للتطبيقات الوصول إلى المكتبات المشتركة الأصلية التي لا تظهر في بيان التطبيق.