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