اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
مساحات أسماء المكتبات الأصلية
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
طرح نظام التشغيل Android 7.0 نطاقات أسماء للمكتبات الأصلية من أجل الحد من مستوى رؤية واجهة برمجة التطبيقات
الداخلية وحلّ المشاكل التي تستخدم فيها التطبيقات عن طريق الخطأ مكتبات النظام الأساسي بدلاً من مكتباتها الخاصة. يُرجى الاطّلاع على مشاركة مدوّنة مطوّري تطبيقات Android تحسين
الثبات من خلال قيود الرموز الخاصة بلغة C/C++ في Android 7.0 للاطّلاع على التغييرات المتعلّقة بالتطبيقات.
هندسة معمارية
في الإصدار 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 الذي يتضمّن اسم المكتبة.
يجب عدم إتاحة المكتبات المجمّعة من رموز برمجية أصلية التي تشكّل جزءًا من 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 الخاص بالمورّد. عند تجميع المكتبات في حزمة APEX الخاصة بمورّد، يجب إدراجها
في ملف provideNativeLibs
في بيان APEX.
تعديل التطبيقات لمنع استخدام مكتبات برمجية أصلية غير علنية
لا يتم تفعيل هذه الميزة إلا للتطبيقات التي تستهدف الإصدار 24 من حزمة تطوير البرامج (SDK) أو الإصدارات الأحدث.
للتوافق مع الإصدارات الأقدم، يُرجى الاطّلاع على الجدول
1. النتائج المتوقّعة في حال كان تطبيقك يرتبط بمكتبات برمجية أصلية خاصة
يمكن العثور على قائمة المكتبات المجمّعة من الرموز البرمجية الأصلية لنظام التشغيل Android التي يمكن للتطبيقات الوصول إليها (المعروفة أيضًا باسم
المكتبات المجمّعة من الرموز البرمجية الأصلية المتاحة للجميع) في القسم 3.1.1 من CDD. يجب تحديث التطبيقات التي تستهدف الإصدار 24 أو
الإصدارات الأحدث وتستخدم أي مكتبات غير علنية. اطّلِع على NDK
ربط التطبيقات بمكتبات المنصة لمزيد من التفاصيل.
تحديث التطبيقات لتتوافق مع مكتباتها البرمجية الأصلية
على التطبيقات التي تستهدف الإصدار 31 من حزمة تطوير البرامج (SDK) (الإصدار 12 من نظام التشغيل Android) أو إصدارًا أحدث
تحديد تبعيات المكتبة المشترَكة الأصلية صراحةً باستخدام العلامة
<uses-native-library>
في ملف بيان التطبيق. إذا لم يكن أي جزء من مكتبة التطبيقات المطلوبة متوفّرًا على الجهاز، لن يتم تثبيت التطبيق. عند تثبيت التطبيقات، يتم تزويدها فقط بالمكتبات المشتركة الأصلية التي طلبتها. وهذا يعني أنّه
لا يمكن للتطبيقات الوصول إلى المكتبات المشتركة المدمجة التي لا تظهر في بيان التطبيق.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Namespaces for native libraries\n\nAndroid 7.0 introduced namespaces for native libraries to limit internal API\nvisibility and resolve situations where apps accidentally use platform\nlibraries instead of their own. See the [Improving\nStability with Private C/C++ Symbol Restrictions in Android 7.0](http://android-developers.blogspot.com/2016/06/improving-stability-with-private-cc.html) Android\nDevelopers blog post for app-specific changes.\n\nArchitecture\n------------\n\n\nIn Android 7.0 and higher, system libraries are separated from app libraries.\n\n\n**Figure 1.** Namespaces for native libraries.\n\n\nNamespaces for native libraries prevent apps from using private-platform native\nAPIs (as was done with OpenSSL). It also removes situations where apps\naccidentally use platform libraries instead of their own (as witnessed\nwith `libpng`). It's difficult for app libraries to use internal\nsystem libraries by accident (and vice versa).\n\nAdd additional native libraries\n-------------------------------\n\n\nIn addition to standard public native libraries, silicon vendors (starting from Android 7.0) and\ndevice manufacturers (starting from Android 9) may choose to provide additional native libraries\naccessible to apps by putting them under the respective library folders and explicitly listing them\nin .txt files.\n\nThe library folders are:\n\n- `/vendor/lib` (for 32-bit) and `/vendor/lib64` (for 64-bit) for libraries from silicon vendors\n- `/system/lib` (for 32-bit) and `/system/lib64` (for 64-bit) for libraries from device manufacturers\n\nThe .txt files are:\n\n- `/vendor/etc/public.libraries.txt` for libraries from silicon vendors\n- `/system/etc/public.libraries-COMPANYNAME.txt` for libraries from device manufacturers, where `COMPANYNAME` refers to a name of the manufacturer (such as `awesome.company`). `COMPANYNAME` must match with `[A-Za-z0-9_.-]+`; alphanumeric characters, _, . (dot) and -. It is possible to have multiple such .txt files in a device if some libraries are from external solution providers.\n\n\nNative libraries in the `system` partition that are made public by device manufacturers\n**MUST** be named `lib*COMPANYNAME.so`, for example, `libFoo.awesome.company.so`.\nIn other words, `libFoo.so` without the company name suffix MUST NOT be made public.\nThe `COMPANYNAME` in the library file name MUST match with the `COMPANYNAME` in the\ntxt file name in which the library name is listed.\n\n\nNative libraries that are part of AOSP MUST NOT be made public (except the standard\npublic native libraries which are public by default). Only the additional libraries added by\nsilicon vendors or device manufacturers can be made accessible to apps.\n\n\nStarting from Android 8.0, vendor public libraries have the following additional\nrestrictions and required setups:\n\n1. The native library in vendor must be properly labeled so it can be accessible to apps. If access is required by any apps (including third party apps), the library must be labeled as `same_process_hal_file` in a vendor-specific `file_contexts` file as follows: \n\n ```\n /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0\n ```\n where `libnative.so` is the name of the native library.\n2. The library, either directly or transitively through its dependencies, must not depend on system libraries other than VNDK-SP and LLNDK libraries. Locate the list of VNDK-SP and LLNDK libraries at `development/vndk/tools/definition/tool/datasets/eligible-list-\u003cversion\u003e-release.csv`.\n\n\nStarting from Android 15, vendor public libraries can be put in a\n[vendor APEX](/docs/core/ota/vendor-apex). When packaged in a vendor APEX, list the libraries\nin a `provideNativeLibs` property in the APEX manifest.\n\nUpdate apps to not use nonpublic native libraries\n-------------------------------------------------\n\n\nThis feature is enabled only for apps targeting SDK version 24 or later;\nfor backward compatibility, see [Table\n1. What to expect if your app is linking against private native libraries](http://android-developers.blogspot.com/2016/06/improving-stability-with-private-cc.html).\nThe list of Android native libraries accessible to apps (also know as\npublic native libraries) is listed in CDD section 3.1.1. Apps targeting 24 or\nlater and using any non-public libraries should be updated. See [NDK\nApps Linking to Platform Libraries](https://developer.android.com/about/versions/nougat/android-7.0-changes.html#ndk) for more details.\n\nUpdate apps for their native library dependencies\n-------------------------------------------------\n\nApps that target SDK version 31 (Android 12) or higher must\n*explicitly specify* their native shared library dependencies by using the\n`\u003cuses-native-library\u003e` tag in the app manifest. If any part of the requested\nlibrary doesn't exist on the device, the app isn't installed. When the apps are installed, they're\nprovided with *only* the native shared libraries that they've requested. This means that\napps can't access native shared libraries that don't appear in the app manifest."]]