برنامه های 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، این ماکرو همیشه تعریف می شود.