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

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

التمييز بين الواجهات التي تستخدم حزمة تطوير البرامج (SDK) والواجهات غير المستنِدة إلى حزمة SDK

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

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

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

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

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

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

بدءًا من الإصدار 9 من نظام التشغيل Android (المستوى 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 كجزء من النظام الأساسي. راجِع الأقسام التالية للحصول على معلومات حول كل إصدار من إصدارات Android.

الإصدار 15 من نظام التشغيل Android

بالنسبة إلى نظام التشغيل 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

بالنسبة إلى نظام التشغيل Android 12 (المستوى 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.

الإصدار 9 من نظام التشغيل Android

بالنسبة إلى نظام التشغيل Android 9 (المستوى 28 من واجهة برمجة التطبيقات)، يتضمّن الملف النصي التالي قائمة بواجهات برمجة التطبيقات غير المحظورة (المُدرجة في القائمة الرمادية): 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. يمكنك فحص رسائل سجل التطبيق للعثور على التفاصيل التالية:

  • فئة التعريف والاسم والنوع (بالتنسيق المستخدم في بيئة تشغيل 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
    

macOS

لتشغيل أداة 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"، تفحص أداة Lint الرمز بحثًا عن أي مشاكل محتملة. إذا كان تطبيقك يستخدم واجهات غير متوفرة في حزمة SDK، قد تظهر لك أخطاء أو تحذيرات متعلّقة بالقائمة التي تنتمي إليها هذه الواجهات.

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

اختبار التطبيقات باستخدام Play Console

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

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

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

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

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

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

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

أسئلة أخرى

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

أسئلة عامة

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

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

  • الاختبار اليدوي لأفضل تطبيقات Play والتطبيقات غير التابعة لـ 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 API. لا يُنصح باستخدام هذا الإعداد.
  • 1. تفعيل الوصول إلى جميع الواجهات غير المتوفرة في حزمة SDK، لكن مع طباعة رسائل السجل التي تحتوي على تحذيرات بشأن أي استخدام للواجهة غير المتوفرة في حزمة SDK. يتيح لك استخدام هذا الإعداد أيضًا اختبار تطبيقك باستخدام StrictMode API.
  • 2. عدم السماح باستخدام الواجهات غير المتوفرة في حزمة SDK التي تنتمي إلى القائمة المحظورة أو التي يتم حظرها مشروطًا لمستوى واجهة برمجة التطبيقات المستهدَف

أسئلة حول قوائم واجهات غير متوفرة في حزمة SDK

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

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

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

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

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

تتضمن حزمة تطوير البرامج (SDK) لنظام التشغيل Android واجهات 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").