بدءًا من الإصدار 9 من Android (المستوى 28 من واجهة برمجة التطبيقات)، يحدّ النظام الأساسي من الواجهات التي يمكن لتطبيقك استخدامها غير المزوّدة بحزمة تطوير البرامج (SDK). تنطبق هذه القيود عندما يشير تطبيق إلى واجهة غير متوفرة في حزمة SDK أو يحاول الحصول على معرّفها باستخدام Reflection أو JNI. تم فرض هذه القيود للمساعدة في تحسين تجربتَي المستخدم والمطوّر، والحد من مخاطر الأعطال للمستخدمين وعمليات الطرح في حالات الطوارئ للمطوّرين. ولمزيد من المعلومات حول هذا القرار، يُرجى الاطّلاع على مقالة تحسين الثبات من خلال تقليل استخدام الواجهات غير المستندة إلى حزمة تطوير البرامج (SDK).
التمييز بين واجهات حزمة SDK وغير المتوفرة في حزمة SDK
بشكل عام، واجهات حزمة SDK العامة هي تلك الواجهات التي تم توثيقها في فهرس الحِزم لإطار عمل Android. إنّ التعامل مع الواجهات غير المتوفّرة في حزمة SDK هو أحد تفاصيل التنفيذ التي تُهمِل واجهة برمجة التطبيقات، لذا تخضع هذه الواجهات للتغيير بدون إشعار.
لتجنُّب الأعطال والسلوك غير المتوقّع، يجب أن تستخدِم التطبيقات فقط الأجزاء الموثَّقة رسميًا للصفوف في حزمة SDK. ويعني ذلك أيضًا أنّه يجب عدم الوصول إلى الطرق أو الحقول غير المُدرَجة في حزمة تطوير البرامج (SDK) عند التفاعل مع ملف الوسائط باستخدام آليات مثل فحص البيانات.
قوائم واجهات برمجة التطبيقات غير المتوفّرة في حِزم تطوير البرامج (SDK)
مع كل إصدار من Android، يتم حظر واجهات إضافية غير متوفرة في حزمة SDK. نعلم أنّه يمكن أن تؤثر هذه القيود في سير عمل الإصدار، لذا نريد أن نتأكد من توفّر الأدوات اللازمة لرصد استخدام واجهات غير متوفرة في حزمة SDK، وتقديم فرصة ل تقديم ملاحظاتك، ووقت للتخطيط والتأقلم مع السياسات الجديدة.
لتقليل تأثير القيود المفروضة على استخدام واجهات غير متوفرة في حزمة SDK على سير عمل التطوير، يتم تقسيم الواجهات غير المتوفرة في حزمة SDK إلى قوائم تحدّد مدى صرامة القيود المفروضة على استخدامها، استنادًا إلى مستوى واجهة برمجة التطبيقات المستهدَف. يصف الجدول التالي كل قائمة من هذه القوائم:
قائمة | علامات الرموز | الوصف |
---|---|---|
القائمة المحظورة |
|
واجهات غير متوفرة في حزمة SDK لا يمكنك استخدامها بغض النظر عن مستوى واجهة برمجة التطبيقات المستهدَف لتطبيقك إذا حاول تطبيقك الوصول إلى إحدى هذه الواجهات، يُرسِل النظام رسالة خطأ. |
محظور بشروط |
|
بدءًا من Android 9 (المستوى 28 من واجهة برمجة التطبيقات)، يتضمّن كل مستوى من مستويات واجهة برمجة التطبيقات واجهات غير حِزم SDK يتم حظرها عندما يستهدف التطبيق هذا المستوى. يتم تصنيف هذه القوائم حسب الحد الأقصى لمستوى واجهة برمجة التطبيقات
( إذا حاول تطبيقك الوصول إلى واجهة تم حظرها لمستوى واجهات برمجة التطبيقات المستهدَف، سيتصرف النظام كما لو كانت واجهة برمجة التطبيقات جزءًا من القائمة المحظورة. |
غير متوافق |
|
واجهات غير متوفرة في حزمة SDK وغير مقيّدة ويمكن لتطبيقك استخدامها وتجدر الإشارة
إلى أنّ هذه الواجهات غير متوافقة
وقابلة للتغيير بدون إشعار. من المتوقّع أن يتم
حظر هذه الواجهات بشكل مشروط في إصدارات Android المستقبلية ضمن قائمة
max-target-x . |
SDK |
|
الواجهات التي يمكن استخدامها بحرية والتي أصبحت متاحة الآن كجزء من إطار عمل Android الموثَّق رسميًا فهرس الحِزم |
واجهات برمجة التطبيقات الاختبارية |
|
الواجهات المستخدَمة لاختبار النظام الداخلي، مثل واجهات برمجة التطبيقات التي تُسهِّل الاختبار من خلال مجموعة أدوات اختبار التوافق (CTS) ليست واجهات برمجة التطبيقات التجريبية جزءًا من حزمة تطوير البرامج (SDK). اعتبارًا من الإصدار 11 من Android (المستوى 30 لواجهة برمجة التطبيقات)، يتم تضمين واجهات برمجة التطبيقات الاختبارية في القائمة المحظورة، وبالتالي لا يُسمح للتطبيقات باستخدامها بغض النظر عن مستوى واجهة برمجة التطبيقات المستهدَف. جميع واجهات برمجة التطبيقات الاختبارية غير متوافقة وتخضع للتغيير بدون إشعار، بغض النظر عن مستوى واجهة برمجة التطبيقات للمنصة. |
على الرغم من أنّه يمكنك استخدام بعض الواجهات غير المتوفرة في حزمة SDK (استنادًا إلى مستوى واجهة برمجة التطبيقات المستهدَف لتطبيقك)، فإنّ استخدام أيّ طريقة أو حقل غير متوفّرَين في حزمة SDK ينطوي دائمًا على مخاطر عالية تتعلّق بتعطُّل تطبيقك. إذا كان تطبيقك يعتمد على واجهات غير متوفّرة في حزمة SDK، عليك البدء في التخطيط ل نقل البيانات إلى واجهات حزمة SDK أو بدائل أخرى. إذا لم تتمكّن من العثور على بديل لاستخدام واجهة غير متوفرة في حزمة SDK لواجهة في تطبيقك، عليك طلب واجهة برمجة تطبيقات عامة جديدة.
تحديد القائمة التي تنتمي إليها الواجهة
يتم إنشاء قوائم الواجهات غير المتوفرة في حزمة SDK كجزء من المنصة. اطّلِع على القسمين التاليين للحصول على معلومات عن كل إصدار من إصدارات 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. يمكنك فحص رسائل سجلّ تطبيقك للعثور على التفاصيل التالية:
- فئة التعريف والاسم والنوع (بالتنسيق المستخدم في بيئة تشغيل 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 باستخدام "النظام الفرعي لنظام التشغيل Linux" (WSL). قبل اتباع الخطوات الواردة في هذا القسم، ثبّت WSL واختر Ubuntu كتوزيع Linux.
بعد تثبيت نظام التشغيل Ubuntu، ابدأ تشغيل الوحدة الطرفية لنظام Ubuntu ثم اتبع الخطوات التالية:
- نزِّل أداة veridex من مستودع التطبيقات المُسبقة الإنشاء لوقت تشغيل Android.
- استخرِج محتوى ملف
appcompat.tar.gz
. - في المجلد المستخرَج، حدِّد موقع ملف
veridex-linux.zip
واستخرِجه. انتقِل إلى المجلد المضغوط ثم شغِّل الأمر التالي، حيث يكون
your-app.apk
هو حزمة APK المطلوب اختبارها:./appcompat.sh --dex-file=your-app.apk
نظام التشغيل Mac
لتشغيل أداة veridex على نظام التشغيل macOS، اتّبِع الخطوات التالية:
- نزِّل أداة veridex من مستودع الإعدادات المسبقة لوقت تشغيل Android.
- استخرِج محتوى ملف
appcompat.tar.gz
. - في المجلد الذي تم استخراجه، حدِّد موقع ملف
veridex-mac.zip
واستخرِجه. انتقِل إلى المجلد الذي تم فك ضغطه، ثم نفِّذ الأمر التالي، حيث يمثّل
/path-from-root/your-app.apk
مسار APK الذي تريد اختباره، بدءًا من الدليل الجذري للنظام:./appcompat.sh --dex-file=/path-from-root/your-app.apk
نظام التشغيل Linux
لتشغيل أداة veridex على Linux، اتّبِع الخطوات التالية:
- نزِّل أداة veridex من مستودع التطبيقات المُسبقة الإنشاء لوقت تشغيل Android.
- استخرِج محتوى ملف
appcompat.tar.gz
. - في المجلد المستخرَج، حدِّد موقع ملف
veridex-linux.zip
واستخرِجه. انتقِل إلى المجلد الذي تم فك ضغطه، ثم نفِّذ الأمر التالي، حيث يمثّل
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
).