يمكن لتطبيقات 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، يتم تعريف وحدة الماكرو هذه دائمًا.