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

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

إصدار مجمَّعSdkVersion

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

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

إصدار 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)، ويحدد الحد الأدنى من إصدار نظام التشغيل الذي يمكن متوافقة معها.

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

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

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

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