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

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

compileSdkVersion

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

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

targetSdkVersion

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

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

While application developers generally know their app's targetSdkVersion , this API is useful for library developers that cannot know which targetSdkVersion their users will choose.

در زمان اجرا، می‌توانید با فراخوانی 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

The minSdkVersion set in your build.gradle file determines which APIs are available at build time (see compileSdkVersion to understand why this differs from Java builds), and determines the minimum version of the OS that your code will be compatible with.

minSdkVersion توسط NDK استفاده می شود تا مشخص شود چه ویژگی هایی هنگام تهیه کد شما ممکن است استفاده شود. For example, this property determines which FORTIFY features are used in libc, and may also enable performance or size improvements (such as GNU hashes or RELR ) for your binaries that are not compatible with older versions of Android. حتی اگر از هیچ API جدید استفاده نکنید ، این ملک همچنان حداقل نسخه سیستم عامل پشتیبانی شده از کد شما را اداره می کند.

برای یک برنامه جدید ، به داده های توزیع کاربر در Project Project New Android Studio یا در Apilevels.com مراجعه کنید. تعادل خود را بین سهم بالقوه بازار و هزینه های نگهداری انتخاب کنید. The lower your minSdkVersion , the more time you'll spend working around old bugs and adding fallback behaviors for features that weren't implemented yet.

For an existing app, raise your minSdkVersion whenever old API levels are no longer worth the maintenance costs, or lower it if your users demand it and it's worth the new maintenance costs. کنسول Play معیارهای خاصی برای توزیع کاربر برنامه شما دارد.

The minSdkVersion of your application is made available to the preprocessor via the __ANDROID_MIN_SDK_VERSION__ macro (the legacy __ANDROID_API__ is identical, but prefer the former because its meaning is clearer). این ماکرو به طور خودکار توسط Clang تعریف می شود ، بنابراین برای استفاده از آن نیازی به هدر نیست. برای ساخت های NDK، این ماکرو همیشه تعریف می شود.