اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
أداة التحقّق من استخدامات واجهات ABI المُنشأة مسبقًا
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
تتطوّر مكتبات Android المشتركة من حين لآخر. يتطلّب الحفاظ على تحديث الثنائيات المُسبقة الإنشاء
جهدًا كبيرًا. في الإصدار 9 من Android
أو الإصدارات الأقدم، لا تتم عملية ربط الثنائيات المُسبقة الإنشاء التي تعتمد على المكتبات أو واجهات برمجة التطبيقات (ABI) التي تمّت إزالتها إلا عند التشغيل. على المطوّرين تتبُّع السجلات للعثور على الملفات الثنائية
المُنشأة مسبقًا والتي عفا عليها الزمن. في Android 10، تمّ تقديم أداة تحقّق من استخدامات ABI
المستندة إلى الرموز. يمكن لأداة التحقّق رصد الملفات الثنائية الجاهزة للاستخدام والتي عفا عليها الزمن
أثناء وقت الإنشاء، حتى يتمكّن مطوّرو المكتبة المشتركة من معرفة الملفات الثنائية الجاهزة للاستخدام التي قد تتعذّر تشغيلها بسبب التغيير الذي أجروه والملفات الثنائية الجاهزة للاستخدام التي يجب
إعادة إنشائها.
أداة التحقّق من استخدامات واجهات ABI المستندة إلى الرموز
يحاكي مدقّق استخدامات ABI المستنِد إلى الرموز الرابط الديناميكي لنظام التشغيل Android على المضيف.
يربط المدقّق الملف الثنائي المُنشئ مسبقًا بتبعيات الملف الثنائي المُنشئ مسبقًا ويتحقق مما إذا تم حلّ جميع الرموز غير المحدّدة.
أولاً، يتحقّق المدقّق من البنية المستهدفة للملف الثنائي المُنشئ مسبقًا. إذا كان ملف الثنائي
المُعدّ مسبقًا لا يستهدف بنية ARM أو AArch64 أو x86 أو x86-64، يتخطّى
أداة التحقّق ملف الثنائي المُعدّ مسبقًا.
ثانيًا، يجب إدراج تبعيات الملف الثنائي المُنشئ مسبقًا فيملف LOCAL_SHARED_LIBRARIES
أو shared_libs
. يحدِّد نظام الإنشاء أسماء
الوحدات إلى الصيغة المطابقة (أي core
مقابل vendor
) للمكتبات
المشترَكة.
ثالثًا، يقارن المدقّق إدخالات DT_NEEDED
بـ LOCAL_SHARED_LIBRARIES
أو shared_libs
. على وجه الخصوص، يستخرج المدقّق إدخال DT_SONAME
من
كل مكتبة مشترَكة ويقارن هذه الDT_SONAME
بإدخالات DT_NEEDED
المسجّلة في الملف الثنائي المُنشئ مسبقًا. في حال عدم التطابق، يتم عرض رسالة خطأ.
رابعًا، يحلّ المدقّق الرموز غير المحدّدة في الملف الثنائي المُنشئ مسبقًا. يجب تعريف هذه العلامات
غير المحدّدة في أحد التبعيات، ويجب أن يكون ربط العلامة
إما GLOBAL
أو WEAK
. إذا تعذّر حلّ رمز غير محدّد، يتم عرض رسالة خطأ.
سمات وحدة التصاميم الجاهزة
يجب تحديد تبعيات الملف الثنائي المُنشئ مسبقًا في أحد الإجراءَين التاليَين:
- Android.bp:
shared_libs: ["libc", "libdl", "libm"],
- Android.mk:
LOCAL_SHARED_LIBRARIES := libc libdl libm
إذا كان الملف الثنائي المُنشئ مسبقًا مصمّمًا ليحتوي على بعض رموزال غير محدّدة وغير قابلة للحل، حدِّد أحد الخيارَين التاليَين:
- Android.bp:
allow_undefined_symbols: true,
- Android.mk:
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
لتخطّي الفحص في ملف ELF من خلال الملف الثنائي المُنشئ مسبقًا، حدِّد أحد الخيارين التاليين:
- Android.bp:
check_elf_files: false,
- Android.mk:
LOCAL_CHECK_ELF_FILES := false
تشغيل المدقّق
يشمل المدقّق جميع وحدات ELF المُنشأة مسبقًا أثناء عملية إنشاء نظام التشغيل Android.
لتنفيذ مدقّق الأخطاء وحده لإنجاز المهام بشكل أسرع:
m check-elf-files
أداة إصلاح أخطاء ABI
يمكن أن يساعد "الإصلاح التلقائي" في حلّ أخطاء التحقّق من ABI. ما عليك سوى تشغيل أداة الإصلاح باستخدامملف Android.bp / Android.mk كمدخل، وستطبع أداة الإصلاح التعديل المقترَح في stdout. يمكنك اختياريًا تشغيل أداة الإصلاح باستخدام الخيار --in-place
لتعديل ملف Android.bp / Android.mk مباشرةً باستخدام الإصلاح المقترَح.
بالنسبة إلى Android.bp،
m fix_android_bp_prebuilt
# Print the fixed Android.bp to stdout.
fix_android_bp_prebuilt <path-to-Android.bp>
# Update the Android.bp in place.
fix_android_bp_prebuilt --in-place <path-to-Android.bp>
بالنسبة إلى Android.mk،
m fix_android_mk_prebuilt
# Print the fixed Android.mk to stdout.
fix_android_mk_prebuilt <path-to-Android.mk>
# Update the Android.mk in place.
fix_android_mk_prebuilt --in-place <path-to-Android.mk>
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ 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,["# Prebuilt ABI usages checker\n\nAndroid shared libraries evolve from time to time. Keeping prebuilt binaries\nup-to-date requires considerable effort. In Android 9\nor earlier, the prebuilt binaries that depend on removed libraries or ABIs only\nfail to link at run-time. Developers have to trace the logs to find the outdated\nprebuilt binaries. In Android 10, a symbol-based ABI\nusages checker is introduced. The checker can detect outdated prebuilt binaries\nat build-time, so that shared library developers can know which prebuilt\nbinaries might be broken by their change and which prebuilt binaries must be\nre-built.\n\nSymbol-based ABI usages checker\n-------------------------------\n\nThe symbol-based ABI usages checker emulates the Android dynamic linker on host.\nThe checker links the prebuilt binary with the dependencies of the prebuilt\nbinary and checks whether all undefined symbols are resolved.\n\nFirst, the checker checks the target architecture of the prebuilt binary. If the\nprebuilt binary does not target ARM, AArch64, x86, or x86-64 architecture, the\nchecker skips the prebuilt binary.\n\nSecond, the dependencies of the prebuilt binary must be listed in\n`LOCAL_SHARED_LIBRARIES` or `shared_libs`. The build system resolves the module\nnames to the matching variant (i.e. `core` vs. `vendor`) of the shared\nlibraries.\n\nThird, the checker compares the `DT_NEEDED` entries to `LOCAL_SHARED_LIBRARIES`\nor `shared_libs`. In particular, the checker extracts the `DT_SONAME` entry from\neach shared libraries and compares these `DT_SONAME` with the `DT_NEEDED`\nentries recorded in the prebuilt binary. If there is a mismatch, an error\nmessage is emitted.\n\nFourth, the checker resolves the undefined symbols in the prebuilt binary. Those\nundefined symbols must be defined in one of the dependencies and the symbol\nbinding must be either `GLOBAL` or `WEAK`. If an undefined symbol cannot be\nresolved, an error message is emitted.\n\nPrebuilts module properties\n---------------------------\n\nDependencies of the prebuilt binary must be specified in one of the following:\n\n- Android.bp: `shared_libs: [\"libc\", \"libdl\", \"libm\"],`\n- Android.mk: `LOCAL_SHARED_LIBRARIES := libc libdl libm`\n\nIf the prebuilt binary is designed to have some **unresolvable undefined\nsymbols**, specify one of the following:\n\n- Android.bp: `allow_undefined_symbols: true,`\n- Android.mk: `LOCAL_ALLOW_UNDEFINED_SYMBOLS := true`\n\nTo have the prebuilt binary skip the ELF file check, specify one of the\nfollowing:\n\n- Android.bp: `check_elf_files: false,`\n- Android.mk: `LOCAL_CHECK_ELF_FILES := false`\n\nRun the checker\n---------------\n\nThe checker covers all ELF prebuilt modules during the Android build process.\n\nTo run the checker alone for faster turnaround times: \n\n m check-elf-files\n\nABI error fixer\n---------------\n\nThe automatic fixer can help resolve ABI check errors. Simply run the fixer with\nthe Android.bp / Android.mk as input, and the fixer would print the suggested\nfix to stdout. Optionally, run the fixer with the `--in-place` option to\ndirectly update the Android.bp / Android.mk with the suggested fix.\n\nFor Android.bp, \n\n m fix_android_bp_prebuilt\n # Print the fixed Android.bp to stdout.\n fix_android_bp_prebuilt \u003cpath-to-Android.bp\u003e\n # Update the Android.bp in place.\n fix_android_bp_prebuilt --in-place \u003cpath-to-Android.bp\u003e\n\nFor Android.mk, \n\n m fix_android_mk_prebuilt\n # Print the fixed Android.mk to stdout.\n fix_android_mk_prebuilt \u003cpath-to-Android.mk\u003e\n # Update the Android.mk in place.\n fix_android_mk_prebuilt --in-place \u003cpath-to-Android.mk\u003e"]]