القيود المفروضة على الواجهات غير المتوفرة في حزمة SDK

اعتبارًا من الإصدار Android 9 (مستوى واجهة برمجة التطبيقات 28)، يفرض النظام الأساسي قيودًا على واجهات التطبيقات غير المستندة إلى حِزم تطوير البرامج (SDK) التي يمكن لتطبيقك استخدامها. تسري هذه القيود عندما يشير أحد التطبيقات إلى واجهة غير تابعة لحزمة تطوير البرامج (SDK) أو يحاول الحصول على مؤشرها باستخدام الانعكاس أو JNI. تم فرض هذه القيود للمساعدة في تحسين تجربة المستخدم والمطوّر والحدّ من مخاطر الأعطال التي يواجهها المستخدمون وعمليات الطرح الطارئة التي يجريها المطوّرون. لمزيد من المعلومات حول هذا القرار، يُرجى الاطّلاع على مقالة تحسين الثبات من خلال تقليل استخدام الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK).

التمييز بين واجهات حِزم تطوير البرامج (SDK) والواجهات غير التابعة لحِزم تطوير البرامج (SDK)

بشكل عام، واجهات SDK العامة هي تلك التي تم توثيقها في فهرس الحزم لإطار عمل Android. إنّ التعامل مع الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) هو تفصيل في عملية التنفيذ يتم إخفاؤه من خلال واجهة برمجة التطبيقات، لذا فإنّ هذه الواجهات عرضة للتغيير بدون إشعار.

لتجنُّب الأعطال والسلوك غير المتوقّع، يجب أن تستخدم التطبيقات فقط الأجزاء الموثَّقة رسميًا من الفئات في حزمة تطوير البرامج (SDK). ويعني هذا أيضًا أنّه لا يجب الوصول إلى الطرق أو الحقول غير المدرَجة في حزمة تطوير البرامج (SDK) عند التفاعل مع فئة باستخدام آليات مثل الانعكاس.

قوائم واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK)

مع كل إصدار من Android، يتم حظر واجهات إضافية غير متوفّرة في حزمة تطوير البرامج (SDK). ندرك أنّ هذه القيود قد تؤثر في سير عمل الإصدارات، ونريد التأكّد من توفّر الأدوات اللازمة لرصد استخدام واجهات غير تابعة لحزمة تطوير البرامج (SDK)، ومنحك فرصة لإرسال ملاحظاتك إلينا، ومنحك الوقت الكافي للتخطيط والتكيّف مع السياسات الجديدة.

للحدّ من تأثير القيود المفروضة على الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) في سير عمل التطوير، يتم تقسيم هذه الواجهات إلى قوائم تحدّد مدى صرامة القيود المفروضة على استخدامها، وذلك حسب مستوى واجهة برمجة التطبيقات المستهدَف. يوضح الجدول التالي كل قائمة من هذه القوائم:

قائمة علامات الرموز الوصف
قائمة الحظر
  • blocked
  • تم إيقافها نهائيًا: blacklist
واجهات غير متوفّرة في حزمة SDK ولا يمكنك استخدامها بغض النظر عن مستوى واجهة برمجة التطبيقات المستهدَف في تطبيقك. إذا حاول تطبيقك الوصول إلى إحدى هذه الواجهات، يعرض النظام رسالة خطأ.
محظور بشكل مشروط
  • max-target-x
  • تم إيقافها نهائيًا: greylist-max-x

بدءًا من الإصدار Android 9 (المستوى 28 لواجهة برمجة التطبيقات)، يتضمّن كل مستوى لواجهة برمجة التطبيقات واجهات غير تابعة لحزمة تطوير البرامج (SDK) يتم حظرها عندما يستهدف أحد التطبيقات هذا المستوى من واجهة برمجة التطبيقات.

يتم تصنيف هذه القوائم حسب الحد الأقصى لمستوى واجهة برمجة التطبيقات (max-target-x) الذي يمكن أن يستهدفه التطبيق قبل أن يفقد إمكانية الوصول إلى الواجهات غير المتوفّرة في حزمة SDK في تلك القائمة. على سبيل المثال، واجهة غير تابعة لحزمة تطوير البرامج (SDK) لم يتم حظرها في Android Pie ولكن تم حظرها الآن في Android 10 هي جزء من قائمة max-target-p (greylist-max-p)، حيث يرمز الحرف "p" إلى Pie أو Android 9 (مستوى واجهة برمجة التطبيقات 28).

إذا حاول تطبيقك الوصول إلى واجهة محظورة لمستوى واجهة برمجة التطبيقات المستهدف، سيتعامل النظام مع واجهة برمجة التطبيقات على أنّها جزء من القائمة المحظورة.

غير متوافقة
  • unsupported
  • تم إيقافها نهائيًا: greylist
واجهات غير تابعة لحزمة تطوير البرامج (SDK) غير مقيّدة ويمكن لتطبيقك استخدامها. ومع ذلك، يُرجى العِلم أنّ هذه الواجهات غير متاحة وتخضع للتغيير بدون إشعار. يُرجى توقُّع حظر هذه الواجهات بشكل مشروط في إصدارات Android المستقبلية في قائمة max-target-x.
SDK
  • ‫public-api وsdk
  • متوقّف نهائيًا: كل من public-api وwhitelist
الواجهات التي يمكن استخدامها بحرية وأصبحت متاحة الآن كجزء من فهرس الحِزم الموثَّق رسميًا لإطار عمل Android
واجهات برمجة التطبيقات الاختبارية
  • test-api
الواجهات التي تُستخدم لاختبار النظام الداخلي، مثل واجهات برمجة التطبيقات التي تسهّل الاختبار من خلال مجموعة أدوات اختبار التوافق (CTS). لا تُعدّ واجهات برمجة التطبيقات الاختبارية جزءًا من حزمة تطوير البرامج (SDK). اعتبارًا من الإصدار Android 11 (المستوى 30 من واجهة برمجة التطبيقات)، يتم تضمين واجهات برمجة التطبيقات الاختبارية في القائمة المحظورة، لذا لا يُسمح للتطبيقات باستخدامها بغض النظر عن مستوى واجهة برمجة التطبيقات المستهدف. جميع واجهات برمجة التطبيقات الاختبارية غير متوافقة وتخضع للتغيير بدون إشعار، بغض النظر عن مستوى واجهة برمجة التطبيقات للنظام الأساسي.

على الرغم من إمكانية استخدام بعض الواجهات غير المتوفّرة في حزمة SDK (حسب مستوى واجهة برمجة التطبيقات المستهدف في تطبيقك)، فإنّ استخدام أي طريقة أو حقل غير متوفّر في حزمة SDK ينطوي دائمًا على مخاطرة كبيرة بتعطُّل تطبيقك. إذا كان تطبيقك يعتمد على واجهات غير متوفّرة في حزمة SDK، عليك البدء في التخطيط لنقل البيانات إلى واجهات حزمة SDK أو بدائل أخرى. إذا لم تتمكّن من العثور على بديل لاستخدام واجهة غير متوفّرة في حزمة SDK لميزة في تطبيقك، عليك طلب واجهة برمجة تطبيقات عامة جديدة.

تحديد القائمة التي تنتمي إليها الواجهة

يتم إنشاء قوائم الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) كجزء من المنصة. يُرجى الاطّلاع على الأقسام التالية للحصول على معلومات عن كل إصدار من إصدارات Android.

Android 16

بالنسبة إلى الإصدار 16 من نظام التشغيل Android (المستوى 36 من واجهة برمجة التطبيقات)، يمكنك تنزيل الملف التالي الذي يصف جميع الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) والقوائم المقابلة لها:

الملف: hiddenapi-flags.csv

المجموع الاختباري لخوارزمية SHA-256: 9102af02fe6ab68b92464bdff5e5b09f3bd62c65d1130aaf85d3296f17d38074

لمزيد من المعلومات حول التغييرات في قائمة واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 16، يُرجى الاطّلاع على التعديلات على القيود المفروضة على الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 16.

Android 15

بالنسبة إلى الإصدار Android 15 (المستوى 35 من واجهة برمجة التطبيقات)، يمكنك تنزيل الملف التالي الذي يوضّح جميع الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) والقوائم المقابلة لها:

الملف: hiddenapi-flags.csv

المجموع الاختباري لخوارزمية SHA-256: 40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9

لمزيد من المعلومات حول التغييرات في قائمة واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 15، يُرجى الاطّلاع على التعديلات على القيود المفروضة على الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 15.

Android 14

بالنسبة إلى الإصدار Android 14 (مستوى واجهة برمجة التطبيقات 34)، يمكنك تنزيل الملف التالي الذي يصف جميع الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) والقوائم المقابلة لها:

الملف: hiddenapi-flags.csv

المجموع الاختباري لخوارزمية SHA-256: 7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f

لمزيد من المعلومات عن التغييرات في قائمة واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 14، يُرجى الاطّلاع على التعديلات على القيود المفروضة على الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 14.

Android 13

بالنسبة إلى الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات)، يمكنك تنزيل الملف التالي الذي يصف جميع الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) والقوائم المقابلة لها:

الملف: hiddenapi-flags.csv

المجموع الاختباري لخوارزمية SHA-256: 233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3

لمزيد من المعلومات حول التغييرات في قائمة واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 13، بما في ذلك البدائل المقترَحة لواجهات برمجة التطبيقات المتاحة للجميع والتي تم حظرها بشكل مشروط في Android 13، يُرجى الاطّلاع على التعديلات على القيود المفروضة على الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 13.

Android 12

بالنسبة إلى الإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات)، يمكنك تنزيل الملف التالي الذي يصف جميع الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) والقوائم المقابلة لها:

الملف: hiddenapi-flags.csv

المجموع الاختباري لخوارزمية SHA-256: 40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761

لمزيد من المعلومات حول التغييرات في قائمة واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 12، بما في ذلك البدائل المقترَحة لواجهات برمجة التطبيقات المتاحة للجميع والمحظورة بشكل مشروط في Android 12، يُرجى الاطّلاع على التغييرات في القائمة لنظام التشغيل Android 12.

Android 11

بالنسبة إلى الإصدار Android 11 (مستوى واجهة برمجة التطبيقات 30)، يمكنك تنزيل الملف التالي الذي يصف جميع الواجهات غير المتوفّرة في حزمة تطوير البرامج (SDK) والقوائم المقابلة لها:

الملف: hiddenapi-flags.csv

المجموع الاختباري لخوارزمية SHA-256: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

لمزيد من المعلومات حول تغييرات قائمة واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 11، بما في ذلك بدائل واجهات برمجة التطبيقات العامة المقترَحة لواجهات برمجة التطبيقات المحظورة بشكل مشروط في Android 11، يُرجى الاطّلاع على تغييرات القائمة في Android 11.

Android 10

بالنسبة إلى الإصدار Android 10 (المستوى 29 من واجهة برمجة التطبيقات)، يمكنك تنزيل الملف التالي الذي يصف جميع الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) والقوائم المقابلة لها:

الملف: hiddenapi-flags.csv

المجموع الاختباري لخوارزمية SHA-256: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

لمزيد من المعلومات حول التغييرات في قائمة واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 10، بما في ذلك البدائل المقترَحة لواجهات برمجة التطبيقات المتاحة للجميع والتي يتم حظرها بشكل مشروط في Android 10، يُرجى الاطّلاع على التغييرات في القائمة لنظام التشغيل Android 10.

Android 9

بالنسبة إلى الإصدار Android 9 (مستوى واجهة برمجة التطبيقات 28)، يحتوي الملف النصي التالي على قائمة بواجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) وغير المحظورة (المُدرَجة في القائمة الرمادية): hiddenapi-light-greylist.txt.

يتم اشتقاق القائمة المحظورة (blacklist) وقائمة واجهات برمجة التطبيقات المحظورة بشروط (القائمة الرمادية الداكنة) في وقت الإنشاء.

إنشاء قوائم من مشروع Android المفتوح المصدر (AOSP)

عند العمل مع مشروع Android المفتوح المصدر (AOSP)، يمكنك إنشاء ملف hiddenapi-flags.csv يحتوي على جميع الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) والقوائم المقابلة لها. لإجراء ذلك، نزِّل رمز مصدر AOSP ثم شغِّل الأمر التالي:

m out/soong/hiddenapi/hiddenapi-flags.csv

يمكنك بعد ذلك العثور على الملف في الموقع التالي:

out/soong/hiddenapi/hiddenapi-flags.csv

السلوك المتوقّع عند الوصول إلى واجهات غير SDK محظورة

يوضّح الجدول التالي السلوك المتوقّع إذا حاول تطبيقك الوصول إلى واجهة غير تابعة لحزمة تطوير البرامج (SDK) ومُدرَجة في القائمة المحظورة.

طريقة الوصول النتيجة
تعليمات Dalvik تشير إلى حقل تم رمي NoSuchFieldError
تعليمات Dalvik تشير إلى طريقة تم رمي NoSuchMethodError
الانعكاس باستخدام Class.getDeclaredField() أو Class.getField() تم رمي NoSuchFieldException
الانعكاس باستخدام Class.getDeclaredMethod() وClass.getMethod() تم رمي NoSuchMethodException
الانعكاس باستخدام Class.getDeclaredFields() وClass.getFields() لا تظهر في النتائج الأعضاء غير التابعين لحزمة SDK
الانعكاس باستخدام Class.getDeclaredMethods() وClass.getMethods() لا تظهر في النتائج العناصر التي لا تنتمي إلى حزمة SDK
‫JNI باستخدام env->GetFieldID() تم إرجاع NULL، وتم طرح NoSuchFieldError
‫JNI باستخدام env->GetMethodID() تم إرجاع NULL، وتم طرح NoSuchMethodError

اختبار تطبيقك بحثًا عن واجهات غير متوفّرة في حزمة SDK

هناك عدة طرق يمكنك استخدامها لاختبار الواجهات غير المتوفّرة في حزمة SDK في تطبيقك.

الاختبار باستخدام تطبيق قابل للتصحيح

يمكنك اختبار واجهات غير مستندة إلى حزمة تطوير البرامج (SDK) من خلال إنشاء تطبيق قابل للتصحيح وتشغيله على جهاز أو محاكي يعمل بنظام التشغيل Android 9 (مستوى واجهة برمجة التطبيقات 28) أو إصدار أحدث. تأكَّد من أنّ الجهاز أو المحاكي الذي تستخدمه يتطابق مع مستوى واجهة برمجة التطبيقات المستهدَف لتطبيقك.

أثناء إجراء الاختبارات على تطبيقك، يطبع النظام رسالة مسجّلة إذا كان تطبيقك يصل إلى واجهات معيّنة غير تابعة لحزمة تطوير البرامج (SDK). يمكنك فحص الرسائل المسجّلة في تطبيقك للعثور على التفاصيل التالية:

  • The declaring class, name, and type (in the format that is used by the Android runtime).
  • طريقة الوصول: إما الربط أو استخدام الانعكاس أو استخدام JNI.
  • القائمة التي تنتمي إليها الواجهة غير المضمّنة في حزمة تطوير البرامج (SDK)

يمكنك استخدام adb logcat للوصول إلى هذه الرسائل المسجّلة التي تظهر ضمن معرّف العملية (PID) للتطبيق قيد التشغيل. على سبيل المثال، قد يظهر إدخال في السجلّ على النحو التالي:

Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)

الاختبار باستخدام واجهة برمجة التطبيقات StrictMode

يمكنك أيضًا اختبار الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) باستخدام واجهة برمجة التطبيقات StrictMode. استخدِم الطريقة detectNonSdkApiUsage لتفعيل هذه الميزة. بعد تفعيل واجهة برمجة التطبيقات StrictMode، يمكنك تلقّي طلب معاودة الاتصال لكل استخدام لواجهة غير تابعة لحزمة تطوير البرامج (SDK) باستخدام penaltyListener، حيث يمكنك تنفيذ معالجة مخصّصة. يتم اشتقاق الكائن Violation المقدَّم في دالة الاستدعاء من Throwable، ويوفّر تتبُّع تسلسل استدعاء الدوال البرمجية المضمَّن سياق الاستخدام.

الاختبار باستخدام أداة lint في "استوديو Android"

عند إنشاء تطبيقك في "استوديو Android"، تفحص أداة lint الرمز بحثًا عن أي مشاكل محتملة. إذا كان تطبيقك يستخدم واجهات غير متوفّرة في حزمة SDK، قد تظهر لك أخطاء أو تحذيرات في الإصدار، وذلك حسب القائمة التي تنتمي إليها هذه الواجهات.

يمكنك أيضًا تشغيل أداة lint من سطر الأوامر أو إجراء عمليات فحص يدويًا على مشروع أو مجلد أو ملف معيّن.

الاختبار باستخدام Play Console

عند تحميل تطبيقك إلى مسار اختبار في Play Console، يتم اختبار تطبيقك تلقائيًا بحثًا عن المشاكل المحتملة ويتم إنشاء تقرير الإطلاق التجريبي. إذا كان تطبيقك يستخدم واجهات غير متوفّرة في حزمة SDK، سيظهر خطأ أو تحذير في تقرير الإطلاق التجريبي، وذلك حسب القائمة التي تنتمي إليها هذه الواجهات.

لمزيد من المعلومات، يُرجى الاطّلاع على قسم "التوافق مع Android" في مقالة استخدام تقارير الإطلاق التجريبي لتحديد المشاكل.

طلب واجهة برمجة تطبيقات عامة جديدة

إذا لم تتمكّن من العثور على بديل لاستخدام واجهة غير تابعة لحزمة تطوير البرامج (SDK) لميزة في تطبيقك، يمكنك طلب واجهة برمجة تطبيقات عامة جديدة من خلال إنشاء طلب ميزة في أداة تتبُّع المشاكل.

عند إنشاء طلب ميزة، قدِّم المعلومات التالية:

  • واجهة برمجة التطبيقات غير المتوافقة التي تستخدمها، بما في ذلك الوصف الكامل الذي يظهر في رسالة Accessing hidden ... logcat.
  • سبب حاجتك إلى استخدام واجهات برمجة التطبيقات هذه، بما في ذلك تفاصيل حول الميزة العالية المستوى التي تتطلب استخدام واجهة برمجة التطبيقات، وليس فقط التفاصيل المنخفضة المستوى
  • سبب عدم كفاية أي واجهات برمجة تطبيقات عامة ذات صلة في حزمة تطوير البرامج (SDK) لأغراضك
  • أي بدائل أخرى جرّبتها وسبب عدم نجاحها

عند تقديم هذه التفاصيل في طلب الميزة، تزيد من احتمالية منح واجهة برمجة تطبيقات عامة جديدة.

أسئلة أخرى

يتضمّن هذا القسم بعض الإجابات عن الأسئلة الأخرى التي يطرحها المطوّرون بشكل متكرر:

أسئلة عامة

كيف يمكن لـ Google التأكّد من تلبية احتياجات جميع التطبيقات من خلال أداة تتبُّع المشاكل؟

أنشأنا القوائم الأولية لنظام التشغيل Android 9 (مستوى واجهة برمجة التطبيقات 28) من خلال التحليل الثابت للتطبيقات التي تم تكميلها باستخدام الطرق التالية:

  • اختبار يدوي لأهم التطبيقات على Google Play وغيره
  • بلاغات داخلية
  • جمع البيانات تلقائيًا من المستخدمين الداخليين
  • تقارير معاينة المطوّر
  • تحليل ثابت إضافي تم تصميمه ليشمل بشكل متحفظ المزيد من النتائج الإيجابية الخاطئة

عند تقييم القوائم لكل إصدار جديد، نأخذ في الاعتبار استخدام واجهة برمجة التطبيقات بالإضافة إلى ملاحظات المطوّرين من خلال أداة تتبُّع المشاكل.

كيف يمكنني تفعيل الوصول إلى الواجهات غير المتوافقة مع حزمة SDK؟

يمكنك تفعيل الوصول إلى الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) على أجهزة التطوير باستخدام أوامر adb لتغيير سياسة إجراءات التنفيذ لواجهة برمجة التطبيقات. تختلف الأوامر التي تستخدمها، حسب مستوى واجهة برمجة التطبيقات. لا تتطلّب هذه الأوامر جهازًا جذرًا.

‫Android 10 (المستوى 29 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث

لتفعيل إمكانية الوصول، استخدِم الأمر التالي في أداة adb

الأمر:

adb shell settings put global hidden_api_policy  1

لإعادة ضبط سياسة إجراءات تنفيذ واجهة برمجة التطبيقات على الإعدادات التلقائية، استخدِم الأمر التالي:

adb shell settings delete global hidden_api_policy
‫Android 9 (مستوى واجهة برمجة التطبيقات 28)

لتفعيل إمكانية الوصول، استخدِم أوامر adb التالية:

adb shell settings put global hidden_api_policy_pre_p_apps  1
adb shell settings put global hidden_api_policy_p_apps 1

لإعادة ضبط سياسة إجراءات تنفيذ واجهة برمجة التطبيقات على الإعدادات التلقائية، استخدِم الأوامر التالية:

adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps

يمكنك ضبط العدد الصحيح في سياسة إجراءات تنفيذ واجهة برمجة التطبيقات على إحدى القيم التالية:

  • ‫0: لإيقاف رصد جميع الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) يؤدي استخدام هذا الإعداد إلى إيقاف جميع الرسائل المسجّلة لاستخدام الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) ويمنعك من اختبار تطبيقك باستخدام واجهة برمجة التطبيقات StrictMode. لا ننصح بهذا الإعداد.
  • ‫1: تفعيل الوصول إلى جميع الواجهات غير المضمَّنة في حزمة تطوير البرامج (SDK)، ولكن مع طباعة رسائل السجلّ مع تحذيرات لأي استخدام للواجهات غير المضمَّنة في حزمة تطوير البرامج (SDK). يتيح لك استخدام هذا الإعداد أيضًا اختبار تطبيقك باستخدام واجهة برمجة التطبيقات StrictMode.
  • ‫2: عدم السماح باستخدام واجهات غير متوفّرة في حزمة SDK تنتمي إلى القائمة المحظورة أو تم حظرها بشكل مشروط لمستوى واجهة برمجة التطبيقات المستهدف.

أسئلة حول قوائم الواجهات غير المندرجة ضمن حِزم تطوير البرامج (SDK)

أين يمكنني العثور على قوائم واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) في صورة النظام؟

ويتم ترميزها في وحدات بت علامة الوصول إلى الحقول والطرق في ملفات dex الخاصة بالنظام الأساسي. ولا يوجد ملف منفصل في صورة النظام يحتوي على هذه القوائم.

هل قوائم واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) هي نفسها على أجهزة المصنّعين الأصليين المختلفة التي تعمل بإصدارات Android نفسها؟

يمكن للمصنّعين الأصليين للأجهزة إضافة واجهاتهم الخاصة إلى القائمة المحظورة (القائمة السوداء)، ولكن لا يمكنهم إزالة الواجهات من قوائم واجهات برمجة التطبيقات غير المضمّنة في حزمة تطوير البرامج (SDK) في مشروع Android المفتوح المصدر (AOSP). يمنع مستند CDD هذه التغييرات، وتضمن اختبارات CTS أنّ وقت تشغيل Android يفرض القائمة.

هل هناك أي قيود على واجهات غير NDK في الرموز البرمجية الأصلية؟

تتضمّن حزمة تطوير البرامج (SDK) لنظام التشغيل Android واجهات Java. بدأ النظام الأساسي في حظر الوصول إلى واجهات غير NDK لرمز C/C++‎ الأصلي في Android 7 (مستوى واجهة برمجة التطبيقات 26). لمزيد من المعلومات، يُرجى الاطّلاع على تحسين الثبات من خلال فرض قيود على الرموز الخاصة في C/C++‎ في Android N.

هل هناك أي خطة لتقييد dex2oat أو التلاعب بملفات DEX؟

ليس لدينا خطط نشطة لتقييد الوصول إلى ملف dex2oat الثنائي، ولكننا لا نهدف إلى أن يكون تنسيق ملف DEX مستقرًا أو واجهة عامة تتجاوز الأجزاء المحددة علنًا في تنسيق Dalvik Executable. نحتفظ بالحق في تعديل أو إلغاء dex2oat والأجزاء غير المحددة من تنسيق DEX في أي وقت. يُرجى العِلم أيضًا أنّ الملفات المشتقة التي تنتجها أداة dex2oat، مثل ODEX (المعروفة أيضًا باسم OAT) وVDEX وCDEX، هي جميعها تنسيقات غير محدّدة.

ماذا لو كانت حزمة SDK تابعة لجهة خارجية (مثل أداة تشويش) لا يمكنها تجنُّب استخدام واجهات غير تابعة لحزمة SDK، ولكنها تلتزم بالحفاظ على التوافق مع إصدارات Android المستقبلية؟ هل يمكن لـ Android التنازل عن متطلبات التوافق في هذه الحالة؟

لا نخطط للتنازل عن متطلبات التوافق لكل حزمة تطوير برامج (SDK). إذا كان مطوّر حزمة SDK لا يمكنه الحفاظ على التوافق إلا من خلال الاعتماد على الواجهات في القوائم غير المتوافقة (المعروفة سابقًا باسم القوائم الرمادية)، فعليه البدء في التخطيط للانتقال إلى واجهات حزمة SDK أو بدائل أخرى، وطلب واجهة برمجة تطبيقات عامة جديدة عندما لا يجد بديلاً لاستخدام واجهة غير متوفّرة في حزمة SDK.

هل تنطبق القيود المفروضة على الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) على جميع التطبيقات، بما في ذلك تطبيقات النظام والتطبيقات التابعة للطرف الأول، وليس فقط التطبيقات التابعة لجهات خارجية؟

نعم، ولكننا نستثني التطبيقات الموقَّعة بمفتاح النظام الأساسي وبعض تطبيقات صور النظام. يُرجى العِلم أنّ هذه الإعفاءات تنطبق فقط على التطبيقات التي تشكّل جزءًا من صورة النظام (أو تطبيقات صور النظام المحدَّثة). هذه القائمة مخصّصة فقط للتطبيقات التي يتم إنشاؤها باستخدام واجهات برمجة التطبيقات الخاصة بالمنصة، وليس واجهات برمجة التطبيقات الخاصة بحزمة تطوير البرامج (SDK) (حيث LOCAL_PRIVATE_PLATFORM_APIS := true).