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

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

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

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

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

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

مع كل إصدار من Android، يتم تقييد واجهات إضافية غير متوفّرة في حزمة 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 16

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

الملف: hiddenapi-flags.csv

مجموع SHA-256: ‏ 9102af02fe6ab68b92464bdff5e5b09f3bd62c65d1130aaf85d3296f17d38074

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

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.

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 API. استخدِم الطريقة detectNonSdkApiUsage لتفعيل هذه الميزة. بعد تفعيل واجهة برمجة التطبيقات StrictMode، يمكنك تلقّي ردّ عند كل استخدام لواجهة غير متوفّرة في حزمة SDK باستخدام penaltyListener، حيث يمكنك تنفيذ معالجة مخصّصة. يستند العنصر Violation المقدَّم في الردّ إلى Throwable، ويوفّر تتبُّع تسلسل استدعاء الدوال البرمجية المضمّن سياق الاستخدام.

الاختبار باستخدام أداة 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

يمكنك ضبط العدد الصحيح في سياسة فرض استخدام واجهة برمجة التطبيقات على إحدى القيم التالية:

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

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

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

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

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

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

تتضمّن حزمة Android SDK واجهات 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).