Android SDK वर्शन की प्रॉपर्टी

Android ऐप्लिकेशन, Android ऐप्लिकेशन में कई SDK वर्शन प्रॉपर्टी सेट कर सकते हैं build.gradle फ़ाइल. Android build.gradle दस्तावेज़ में बताया गया है कि उन प्रॉपर्टी का मतलब ऐप्लिकेशन के लिए आम तौर पर होता है. इस दस्तावेज़ में इसका तरीका बताया गया है वे प्रॉपर्टी एनडीके बिल्ड पर असर डालती हैं.

कंपाइलSdkVersion

इस प्रॉपर्टी का एनडीके बिल्ड पर कोई असर नहीं पड़ता. एनडीके के लिए एपीआई की उपलब्धता के बजाय minSdkVersion का इस्तेमाल किया जा सकता है. इसकी वजह यह है कि C++ सिंबल में मौजूद पहली बार कॉल करने पर आलसी रूप से हल करने की बजाय, लाइब्रेरी लोड समय पर समाधान किया गया (जैसा कि हैं, तो वे Java में हैं). ऐसे किसी भी चिह्न का इस्तेमाल करना जो minSdkVersion की वजह से लाइब्रेरी, उन ओएस वर्शन पर लोड नहीं हो पाएगी जिनमें उसके पास नया एपीआई न हो. भले ही, उन एपीआई को कॉल किया जाए या नहीं.

नए ऐप्लिकेशन के लिए, सबसे नया वर्शन चुनें. मौजूदा ऐप्लिकेशन को अपडेट करें इसे नए वर्शन में अपग्रेड करें.

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

इस प्रॉपर्टी का एनडीके बिल्ड पर कोई असर नहीं पड़ता.

minSdkVersion

आपकी build.gradle फ़ाइल में सेट minSdkVersion से तय होता है कि कौनसे एपीआई बिल्ड टाइम में दी जा सकती हैं (यह समझने के लिए कि यह वर्शन अलग क्यों है, compileSdkVersion पर जाएं से तय करता है. साथ ही, यह तय करता है कि आपके कोड के लिए, ओएस का सबसे कम वर्शन कौनसा है के साथ काम करेगा.

एनडीके, minSdkVersion का इस्तेमाल यह तय करने के लिए करता है कि किन सुविधाओं का इस्तेमाल किया जा सकता है कोड कंपाइल करते समय उदाहरण के लिए, इस प्रॉपर्टी से तय होता है कि किस FORTIFY सुविधाओं का इस्तेमाल libc में किया जाता है. इसकी मदद से परफ़ॉर्मेंस या साइज़ को बेहतर बनाया जा सकता है (जैसे कि GNU हैश या RELR) इनके साथ काम नहीं करती हैं Android के पुराने वर्शन हैं. किसी नए एपीआई का इस्तेमाल न करने पर भी, यह प्रॉपर्टी यह अब भी आपके कोड के कम से कम काम करने वाले ओएस वर्शन को कंट्रोल करता है.

नए ऐप्लिकेशन के लिए, Android Studio के नए प्रोजेक्ट में उपयोगकर्ता डिस्ट्रिब्यूशन का डेटा देखें विज़ार्ड या apilevels.com पर जाएं. इनमें से अपना बैलेंस चुनें संभावित बाज़ार में हिस्सेदारी और रखरखाव की लागत. आपका minSdkVersion जितना कम होगा, पुराने बग पर काम करने और फ़ॉलबैक व्यवहार जोड़ने में आपको उतना ही ज़्यादा समय लगेगा उन सुविधाओं के लिए जिन्हें अभी तक लागू नहीं किया गया है.

किसी मौजूदा ऐप्लिकेशन के लिए, पुराना एपीआई लेवल न होने पर minSdkVersion को बढ़ाएं ज़्यादा समय तक चलाने की ज़रूरत नहीं होती. इसके अलावा, अगर उपयोगकर्ता इसकी मांग करते हैं, तो इसे कम कर दिया जाता है रखने में परेशानी नहीं होती. Play Console में आपकी उपयोगकर्ता का डिस्ट्रिब्यूशन.

आपके ऐप्लिकेशन का minSdkVersion, प्रीप्रोसेसर को उपलब्ध कराया गया है __ANDROID_MIN_SDK_VERSION__ मैक्रो के ज़रिए (लेगसी __ANDROID_API__ है एक जैसी है, लेकिन पहले वाली को प्राथमिकता दें, क्योंकि उसका मतलब साफ़ तौर पर समझ में आता है). यह मैक्रो है Clang से अपने-आप तय हो जाता है, इसलिए इसका इस्तेमाल करने के लिए कोई हेडर शामिल करने की ज़रूरत नहीं होती. इसके लिए NDK बिल्ड करता है, यह मैक्रो हमेशा निर्धारित होता है.