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

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

التمييز بين واجهات حزمة SDK وغير المتوفرة في حزمة SDK

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

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

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

مع كل إصدار من Android، يتم حظر واجهات إضافية غير متوفرة في حزمة SDK. نعلم أنّه يمكن أن تؤثر هذه القيود في سير عمل الإصدار، لذا نريد أن نتأكد من توفّر الأدوات اللازمة لرصد استخدام واجهات غير متوفرة في حزمة 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). اعتبارًا من الإصدار 11 من Android (المستوى 30 لواجهة برمجة التطبيقات)، يتم تضمين واجهات برمجة التطبيقات الاختبارية في القائمة المحظورة، وبالتالي لا يُسمح للتطبيقات باستخدامها بغض النظر عن مستوى واجهة برمجة التطبيقات المستهدَف. إنّ كل واجهات برمجة التطبيقات الاختبارية غير متوافقة مع الإصدار العلني، ويمكن أن تتغيّر بدون إشعار، بغض النظر عن مستوى واجهة برمجة التطبيقات للمنصة.

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

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

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

Android 16 (الإصدار التجريبي للمطوّرين)

بالنسبة إلى Android 16، يمكنك تنزيل الملف التالي الذي يصف جميع الواجهات غير التابعة لحزمة SDK والقوائم المقابلة لها:

الملف: hiddenapi-flags.csv

قيمة التدقيق SHA-256: a22d5c2fa9c24ec0b864f0680208e9794222d1921114abe3245979143ce6d1c6

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

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

بالنسبة إلى Android 13 (المستوى 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) وقائمة واجهات برمجة التطبيقات المحظورة بشكل مشروط (قائمة باللون الرمادي الداكن ) في وقت الإنشاء.

إنشاء قوائم من AOSP

عند العمل مع 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). يمكنك فحص رسائل سجلّ تطبيقك للعثور على التفاصيل التالية:

  • فئة التعريف والاسم والنوع (بالتنسيق المستخدَم في بيئة ejecutant Android)
  • وسائل الوصول: إما الربط أو استخدام ميزة "العرض المرجعي" أو استخدام واجهة برمجة التطبيقات JNI
  • القائمة التي تنتمي إليها الواجهة غير المتوفرة في حزمة SDK

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

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

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

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

الاختبار باستخدام أداة Veridex

يمكنك أيضًا تشغيل أداة التحليل الثابت veridex على حِزمة APK. تفحص أداة veridex الرمز البرمجي الكامل لحزمة APK، بما في ذلك أي مكتبات تابعة لجهات خارجية، و تُبلغ عن أي استخدامات للواجهات غير المتوفرة في حزمة SDK تعثر عليها.

تشمل قيود أداة Veridex ما يلي:

  • لا يمكنه رصد عمليات الاستدعاء من خلال واجهة JNI.
  • ولا يمكنه رصد سوى مجموعة فرعية من عمليات الاستدعاء من خلال التأمل.
  • يقتصر تحليل مسارات الرموز البرمجية غير النشطة على عمليات التحقّق من مستوى واجهة برمجة التطبيقات.
  • ولا يمكن تشغيله إلا على الأجهزة التي تتيح تعليمات SSE4.2 وPOPCNT.

Windows

لا تتوفّر ملفات ثنائية أصلية لنظام التشغيل Windows، ولكن يمكنك تشغيل أداة veridex على Windows من خلال تنفيذ ملفات ثنائية لنظام التشغيل Linux باستخدام "النظام الفرعي لنظام التشغيل Windows لنظام التشغيل Linux" (WSL). قبل اتّباع الخطوات الواردة في هذا القسم، عليك تثبيت WSL و اختيار Ubuntu كتوزيعة Linux.

بعد تثبيت Ubuntu، افتح وحدة طرفية Ubuntu واتّبِع الخطوات التالية:

  1. نزِّل أداة veridex من مستودع التطبيقات المُسبقة الإنشاء لوقت تشغيل Android.
  2. استخرِج محتوى ملف appcompat.tar.gz.
  3. في المجلد الذي تم استخراجه، حدِّد موقع ملف veridex-linux.zip واستخرِجه.
  4. انتقِل إلى المجلد الذي تم فك ضغطه، ثم نفِّذ الأمر التالي، حيث يمثّل your-app.apk حزمة APK التي تريد اختبارها:

    ./appcompat.sh --dex-file=your-app.apk
    

نظام التشغيل Mac

لتشغيل أداة veridex على نظام التشغيل macOS، اتّبِع الخطوات التالية:

  1. نزِّل أداة veridex من مستودع التطبيقات المُسبقة الإنشاء لوقت تشغيل Android.
  2. استخرِج محتوى ملف appcompat.tar.gz.
  3. في المجلد الذي تم استخراجه، حدِّد موقع ملف veridex-mac.zip واستخرِجه.
  4. انتقِل إلى المجلد الذي تم فك ضغطه، ثم نفِّذ الأمر التالي، حيث يمثّل /path-from-root/your-app.apk مسار APK الذي تريد اختباره، بدءًا من الدليل الجذر للنظام:

    ./appcompat.sh --dex-file=/path-from-root/your-app.apk
    

نظام التشغيل Linux

لتشغيل أداة veridex على نظام التشغيل Linux، اتّبِع الخطوات التالية:

  1. نزِّل أداة veridex من مستودع التطبيقات المُسبقة الإنشاء لوقت تشغيل Android.
  2. استخرِج محتوى ملف appcompat.tar.gz.
  3. في المجلد الذي تم استخراجه، حدِّد موقع ملف veridex-linux.zip واستخرِجه.
  4. انتقِل إلى المجلد الذي تم فك ضغطه، ثم نفِّذ الأمر التالي، حيث يمثّل your-app.apk حزمة APK التي تريد اختبارها:

    ./appcompat.sh --dex-file=your-app.apk
    

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

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

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

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

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

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

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

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

عند إنشاء طلب ميزة، يُرجى تقديم المعلومات التالية:

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

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

أسئلة أخرى

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

أسئلة عامة

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

أنشأنا القوائم الأولية لنظام التشغيل Android 9 (المستوى 28 لواجهة برمجة التطبيقات) من خلال تحليل static للتطبيقات تمّت إضافة المعلومات إليه باستخدام الطرق التالية:

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

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

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

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

الإصدار 10 من نظام التشغيل Android (المستوى 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)" في AOSP. ويمنع إطار عمل CDD إجراء هذه التغييرات، ويضمن اختبارات CTS أنّ "مُشغِّل Android" يفرض القائمة.

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

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

هل هناك أيّ خطة لحظر التلاعب بملفات dex2oat أو DEX؟

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

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

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

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

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