ویژگی های نسخه Android SDK

برنامه های Android می توانند تعدادی ویژگی نسخه SDK را در فایل build.gradle خود تنظیم کنند. مستندات build.gradle Android توضیح می‌دهد که این ویژگی‌ها به طور کلی چه معنایی برای برنامه دارند. این سند توضیح می‌دهد که چگونه آن ویژگی‌ها بر ساخت‌های NDK تأثیر می‌گذارند.

compileSdkVersion

این ویژگی هیچ تاثیری بر ساخت های NDK ندارد. در عوض در دسترس بودن API برای NDK توسط minSdkVersion کنترل می شود. این به این دلیل است که نمادهای C++ در زمان بارگذاری کتابخانه به جای اینکه در هنگام اولین فراخوانی با تنبلی حل شوند (همانطور که در جاوا هستند) مشتاقانه حل می شوند. استفاده از هر نمادی که در minSdkVersion موجود نیست، باعث می‌شود که کتابخانه در نسخه‌های سیستم‌عاملی که API جدیدتر ندارند بارگیری نشود، صرف نظر از اینکه آن APIها فراخوانی خواهند شد یا خیر.

برای یک برنامه جدید، جدیدترین نسخه موجود را انتخاب کنید. برای یک برنامه موجود، در صورت مناسب بودن، آن را به آخرین نسخه به روز کنید.

targetSdkVersion

مشابه جاوا، targetSdkVersion برنامه شما می تواند رفتار زمان اجرا کد بومی را تغییر دهد. تغییرات رفتاری در سیستم، در صورت امکان، فقط برای برنامه‌هایی اعمال می‌شود که دارای targetSdkVersion بزرگ‌تر یا مساوی با نسخه سیستم‌عاملی است که این تغییر را ایجاد کرده است.

برای یک برنامه جدید، جدیدترین نسخه موجود را انتخاب کنید. برای یک برنامه موجود، در صورت مناسب بودن، آن را به آخرین نسخه به‌روزرسانی کنید (پس از به‌روزرسانی compileSdkVersion ).

در حالی که توسعه‌دهندگان برنامه عموماً targetSdkVersion برنامه خود را می‌دانند، این API برای توسعه‌دهندگان کتابخانه‌ای مفید است که نمی‌دانند کاربرانشان کدام targetSdkVersion را انتخاب خواهند کرد.

در زمان اجرا، می‌توانید با فراخوانی android_get_application_target_sdk_version() targetSdkVersion مورد استفاده توسط یک برنامه را دریافت کنید. این API در سطح API 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);

سایر تغییرات رفتار ممکن است به سطح API دستگاه بستگی داشته باشد. با فراخوانی android_get_device_api_level() می‌توانید سطح API دستگاهی را که برنامه‌تان روی آن اجرا می‌شود، دریافت کنید. این تابع دارای امضای زیر است:

/**
 * 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 شما تعیین می‌کند که کدام APIها در زمان ساخت در دسترس هستند (برای درک اینکه چرا این با ساخت‌های جاوا متفاوت است، به compileSdkVersion مراجعه کنید)، و حداقل نسخه سیستم‌عاملی را تعیین می‌کند که کد شما با آن سازگار است.

minSdkVersion توسط NDK برای تعیین ویژگی هایی که ممکن است هنگام کامپایل کردن کد شما استفاده شود استفاده می شود. برای مثال، این ویژگی مشخص می‌کند که کدام ویژگی‌های FORTIFY در libc استفاده می‌شوند، و همچنین ممکن است بهبود عملکرد یا اندازه (مانند هش‌های گنو یا RELR ) را برای باینری‌های شما که با نسخه‌های قدیمی‌تر Android سازگار نیستند، فعال کند. حتی اگر از هیچ API جدیدی استفاده نکنید، این ویژگی همچنان بر حداقل نسخه سیستم عامل پشتیبانی شده کد شما حاکم است.

برای یک برنامه جدید، داده‌های توزیع کاربر را در New Project Wizard Android Studio یا در apilevels.com ببینید. تعادل خود را بین سهم بالقوه بازار و هزینه های تعمیر و نگهداری انتخاب کنید. هرچه minSdkVersion شما کمتر باشد، زمان بیشتری را صرف رفع اشکالات قدیمی و افزودن رفتارهای بازگشتی برای ویژگی‌هایی می‌کنید که هنوز پیاده‌سازی نشده‌اند.

برای یک برنامه موجود، هر زمان که سطوح API قدیمی دیگر ارزش هزینه‌های تعمیر و نگهداری را ندارند، minSdkVersion خود را افزایش دهید، یا اگر کاربران آن را درخواست کردند و ارزش هزینه‌های نگهداری جدید را داشت، آن را کاهش دهید. کنسول Play دارای معیارهایی خاص برای توزیع کاربر برنامه شما است.

minSdkVersion برنامه شما از طریق ماکرو __ANDROID_MIN_SDK_VERSION__ در دسترس پیش پردازنده قرار می گیرد (میراث __ANDROID_API__ یکسان است، اما اولی را ترجیح می دهید زیرا معنای آن واضح تر است). این ماکرو به طور خودکار توسط Clang تعریف می شود، بنابراین برای استفاده از آن نیازی به اضافه کردن هدر نیست. برای ساخت های NDK، این ماکرو همیشه تعریف می شود.