خصائص إصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android

يمكن لتطبيقات Android ضبط عدد من خصائص إصدار حزمة تطوير البرامج (SDK) في ملف build.gradle الخاص بها. وتوضح وثائق Android build.gradle ما تعنيه هذه الخصائص للتطبيق بشكل عام. يشرح هذا المستند كيفية تأثير هذه الخصائص في إصدارات NDK.

إصدار ComlySdkVersion

ليس لهذه السمة أي تأثير على إصدارات NDK. يخضع مدى توفر واجهة برمجة التطبيقات لـ NDK بدلاً من ذلك لـ minSdkVersion. وهذا لأن رموز C++ يتم تحليلها بلهفة في وقت تحميل المكتبة بدلاً من حلها الكسول عند استدعائها لأول مرة (كما هي في Java). واستخدام أي رموز غير متوفّرة في minSdkVersion يؤدي إلى تعذُّر تحميل المكتبة على إصدارات نظام التشغيل التي لا تتضمّن واجهة برمجة تطبيقات أحدث، بغض النظر عمّا إذا كان سيتم طلب واجهات برمجة التطبيقات هذه أم لا.

للحصول على تطبيق جديد، اختَر أحدث إصدار متاح. بالنسبة إلى التطبيق الحالي، عليك تحديثه إلى أحدث إصدار عندما يكون ذلك مناسبًا.

targetSdkVersion

على غرار Java، يمكن لميزة targetSdkVersion لتطبيقك تغيير سلوك وقت تشغيل الرموز البرمجية الأصلية. عندما يكون ذلك ممكنًا، لا يتم تطبيق التغييرات في السلوك في النظام إلا على التطبيقات التي تتضمّن targetSdkVersion أكبر من أو يساوي إصدار نظام التشغيل الذي أدخل التغيير.

للحصول على تطبيق جديد، اختَر أحدث إصدار متاح. أما بالنسبة إلى التطبيق الحالي، فيمكنك تحديثه إلى أحدث إصدار عندما يكون ذلك مناسبًا (بعد تحديث compileSdkVersion).

على الرغم من أنّ مطوّري التطبيقات يعرفون بشكل عام targetSdkVersion الخاص بتطبيقهم، تُعدّ واجهة برمجة التطبيقات هذه مفيدة لمطوّري المكتبات الذين لا يستطيعون معرفة targetSdkVersion الذي سيختاره المستخدمون.

في وقت التشغيل، يمكنك جعل targetSdkVersion يستخدمها أحد التطبيقات من خلال استدعاء android_get_application_target_sdk_version(). تتوفر واجهة برمجة التطبيقات هذه في المستوى 24 من واجهة برمجة التطبيقات والإصدارات الأحدث. تحتوي هذه الدالة على التوقيع التالي:

/**
 * Returns the `targetSdkVersion` of the caller, or `__ANDROID_API_FUTURE__` if
 * there is no known target SDK version (for code not running in the context of
 * an app).
 *
 * The returned values correspond to the named constants in `<android/api-level.h>`,
 * and is equivalent to the AndroidManifest.xml `targetSdkVersion`.
 *
 * See also android_get_device_api_level().
 *
 * Available since API level 24.
 */
int android_get_application_target_sdk_version() __INTRODUCED_IN(24);

وقد تعتمد التغييرات الأخرى في السلوك على مستوى واجهة برمجة التطبيقات للجهاز. يمكنك الحصول على مستوى واجهة برمجة التطبيقات للجهاز الذي يعمل عليه تطبيقك عن طريق استدعاء android_get_device_api_level(). تحتوي هذه الدالة على التوقيع التالي:

/**
 * Returns the API level of the device we're actually running on, or -1 on failure.
 * The returned values correspond to the named constants in `<android/api-level.h>`,
 * and is equivalent to the Java `Build.VERSION.SDK_INT` API.
 *
 * See also android_get_application_target_sdk_version().
 */
int android_get_device_api_level();

maxSdkVersion

ليس لهذه السمة أي تأثير على إصدارات NDK.

إصدار minSdkVersion

وتحدّد سمة minSdkVersion التي تم ضبطها في ملف build.gradle واجهات برمجة التطبيقات المتاحة في وقت الإصدار (راجِع compileSdkVersion لمعرفة سبب اختلاف ذلك عن إصدارات Java)، كما تحدِّد الحد الأدنى لإصدار نظام التشغيل الذي سيكون تطبيقك متوافقًا معه.

ويستخدم NDK علامة minSdkVersion لتحديد الميزات التي يمكن استخدامها عند إنشاء التعليمات البرمجية. على سبيل المثال، تحدِّد هذه السمة ميزات FORTIFY المستخدَمة في libc، وقد تفعِّل أيضًا تحسينات في الأداء أو الحجم (مثل تجزئات GNU أو RELR) للبرامج الثنائية التي لا تتوافق مع الإصدارات القديمة من Android. حتى إذا كنت لا تستخدم أي واجهات برمجة تطبيقات جديدة، تظل هذه الخاصية تحكم الحد الأدنى لإصدار نظام التشغيل المتوافق من الرمز الخاص بك.

للحصول على تطبيق جديد، يمكنك الاطّلاع على بيانات توزيع المستخدمين في الأداة الجديدة Project Wizard من "استوديو Android" أو على apilevels.com. اختَر التوازن بين حصة السوق المحتملة وتكاليف الصيانة. كلما انخفضت قيمة minSdkVersion، زاد الوقت الذي ستقضيه في معالجة الأخطاء القديمة وإضافة سلوكيات احتياطية للميزات التي لم يتم تنفيذها بعد.

بالنسبة إلى التطبيقات الحالية، يمكنك رفع minSdkVersion عندما تصبح مستويات واجهة برمجة التطبيقات القديمة لا تستحق تكاليف الصيانة، أو تخفيضها إذا طلبها المستخدمون وتستحق تكاليف الصيانة الجديدة. تحتوي Play Console على مقاييس خاصة بتوزيع مستخدمي تطبيقك.

يتوفّر minSdkVersion في تطبيقك للمعالج المُسبَق عبر وحدة ماكرو __ANDROID_MIN_SDK_VERSION__ (تتطابق __ANDROID_API__ القديمة، ولكنها تفضّل القيمة الأولى لأن معناها أوضح). يتم تعريف وحدة الماكرو هذه تلقائيًا عن طريق Clang، لذا لا يلزم تضمين أي عنوان لاستخدامها. بالنسبة لإصدارات NDK، يتم تعريف وحدة الماكرو هذه دائمًا.