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

بدءًا من الإصدار 9 من Android (المستوى 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). بدءًا من Android 11 (المستوى 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

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

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

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

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

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

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

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

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

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

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

أسئلة أخرى

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

أسئلة عامة

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

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

  • الاختبار اليدوي لأفضل تطبيقات 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 API. لا يُنصح باستخدام هذا الإعداد.
  • 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 التنفيذي. نحتفظ بالحق في تعديل أو إزالة dex2oat والأجزاء غير المحدّدة. بتنسيق DEX في أي وقت. يُرجى العلم أيضًا أنّ الملفات المشتقّة التي تم إنشاؤها عن طريق dex2oat مثل ODEX (المعروفة أيضًا باسم OAT) وVDEX وCDEX كلها تنسيقات غير محدّدة.

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

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

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

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