بدءًا من Android 9 (المستوى 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 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 واتّبِع الخطوات التالية:
- نزِّل أداة 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 في الرموز البرمجية الأصلية؟
تتضمّن حزمة تطوير البرامج (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
).