CompileSdkVersion और targetSdkVersion के बीच क्या अंतर है?


525

मैंने ग्रैडल के साथ निर्माण के लिए प्रलेखन को देखा है , लेकिन मुझे अभी भी यकीन नहीं है कि क्या अंतर है compileSdkVersionऔर क्या targetSdkVersionहै।

सभी कहते हैं:

compileSdkVersionसंपत्ति संकलन लक्ष्य निर्दिष्ट करता है।

खैर, "संकलन लक्ष्य" क्या है?

मुझे इसकी व्याख्या करने के दो संभावित तरीके दिखाई देते हैं:

  1. compileSdkVersion, एप्लिकेशन बनाने में प्रयोग किया जाता संकलक का संस्करण है, जबकि targetSdkVersionहै "एपीआई स्तर है कि आवेदन लक्ष्य" । (यदि ऐसा होता, तो मुझे लगता है compileSdkVersionकि इससे अधिक या उसके बराबर होना चाहिए targetSdkVersion?
  2. उनका मतलब एक ही है। "संकलन लक्ष्य" == "एपीआई स्तर जो एप्लिकेशन को लक्षित करता है"
  3. कुछ और?

मैं देखता हूं कि यह प्रश्न पहले भी पूछा जा चुका है, लेकिन एक उत्तर में केवल डॉक्टर को उद्धृत किया गया है, जो कि मेरे लिए अस्पष्ट है।



2
targetSdkVersion वह है जो आपका उपकरण चला रहा है। तो अगर आपके उपकरण ओरेओ से कम चल रहे हैं, तो 27 को लक्षित न करें।
इगोरगानपोलस्की

जवाबों:


546

compileSdkVersion

compileSdkVersionएपीआई एप्लिकेशन के खिलाफ संकलित किया गया है का संस्करण है। इसका मतलब है कि आप एपीआई के उस संस्करण में शामिल एंड्रॉइड एपीआई सुविधाओं का उपयोग कर सकते हैं (साथ ही सभी पिछले संस्करण, जाहिर है)। यदि आप API 16 सुविधाओं का उपयोग करने का प्रयास करते हैं लेकिन compileSdkVersion15 पर सेट करते हैं, तो आपको एक संकलन त्रुटि मिलेगी। यदि आप compileSdkVersion16 पर सेट हैं, तो आप अभी भी एपीआई 15 डिवाइस पर ऐप चला सकते हैं, जब तक कि आपके ऐप का निष्पादन पथ एपीआई 16 के लिए विशिष्ट किसी भी एपीआई को लागू करने का प्रयास नहीं करता है।

targetSdkVersion

targetSdkVersionआपका ऐप कैसे संकलित है या आप किस एपीआई का उपयोग कर सकते हैं , इससे कोई लेना-देना नहीं है। यह targetSdkVersionइंगित करना चाहिए कि आपने अपने एप्लिकेशन का परीक्षण किया है (संभवतः आपके द्वारा निर्दिष्ट संस्करण)। यह एक प्रमाणीकरण या साइन ऑफ की तरह अधिक है जो आप एंड्रॉइड ओएस को संकेत के रूप में दे रहे हैं कि ओएस सुविधाओं के संदर्भ में यह आपके ऐप को कैसे संभालना चाहिए।

उदाहरण के लिए, जैसा कि प्रलेखन कहता है:

उदाहरण के लिए, इस मान को "11" या उच्चतर पर सेट करने से सिस्टम को एंड्रॉइड 3.0 या उच्चतर पर चलने पर आपके ऐप पर एक नया डिफ़ॉल्ट थीम (Holo) लागू करने की अनुमति मिलती है ...

एंड्रॉइड ओएस, रनटाइम पर , इस मूल्य के आधार पर ओएस के संदर्भ में आपके ऐप को कैसे स्टाइल किया जाए या अन्यथा निष्पादित किया जाए, यह बदल सकता है। कुछ अन्य ज्ञात उदाहरण हैं जो इस मूल्य से प्रभावित हैं और यह सूची केवल समय के साथ बढ़ने की संभावना है।

सभी व्यावहारिक उद्देश्यों के लिए, अधिकांश ऐप्स targetSdkVersionAPI के नवीनतम रिलीज़ किए गए संस्करण में सेट करना चाहते हैं । यह सुनिश्चित करेगा कि आपका ऐप सबसे हाल के एंड्रॉइड डिवाइसों पर जितना संभव हो उतना अच्छा दिखे। यदि आप इसे निर्दिष्ट नहीं करते हैं targetSdkVersion, तो यह चूक करता है minSdkVersion


14
नहीं, targetSdkVersionबहुत अधिक संभावना होगी compileSdkVersionऔर सही से ऐसा होगा। इसका मतलब यह है कि यद्यपि आपने एपीआई 16 को लक्षित करने के लिए एक ऐप डिज़ाइन किया है, यह अभी भी एपीआई 21 (लॉलीपॉप) पर ठीक चलता है और आपको targetSdkVersionयह इंगित करने के लिए अपने 21 को टक्कर देना चाहिए कि एंड्रॉइड ओएस के लिए किसी भी लॉलीपॉप-शैलियों को लागू करना ठीक है आपके ऐप पर मौजूद है।
जेफ मिक्सन

24
मौलिक रूप से, मुझे समझ में नहीं आता है कि आप जिस एसडीके के खिलाफ संकलित हैं, उससे अधिक एसडीके को कैसे लक्षित कर सकते हैं।
coder123

55
compileSdkVersionउच्च संस्करण में बदलने का मतलब होगा कि आप कुछ नए एपीआई का उपयोग करना चाहते हैं जो केवल उस विशेष रिलीज में शामिल हैं। यदि आप अपने ऐप में किसी लॉलीपॉप-विशिष्ट सुविधाओं का उपयोग करने की योजना नहीं बनाते हैं, तो वास्तव में (आमतौर पर) कभी भी compileSdkVersion21 पर सेट होने का कोई कारण नहीं है। हालांकि, आपका ऐप संभवतः एपीआई 21 पर ठीक-ठीक चलता है, इस प्रकार आप बदलते हैं targetSdkVersionअपने अनुप्रयोग इंगित करने के लिए रन की तरह आप एपीआई 21 पर (लक्ष्य) की उम्मीद है, लेकिन आप 21 (संकलन) के लिए किसी भी एपीआई विशिष्ट है और इस तरह अपने उपयोग नहीं कर रहे compileSdkVersionइस उदाहरण में 15 पर कर सकें।
जेफ मिक्सन

19
एक चेतावनी तब दी जाती है जब मैं एंड्रॉइड स्टूडियो में ऐसा करता हूं। मेरे पास "compileSdkVersion 17" और "targetSdkVersion 22" है और यह मुझे बताता है कि "targetSdkVersion compileSdkVersion से अधिक नहीं होना चाहिए"। ओह, बस इसे बदल दिया है और अब यह मुझे बता रहा है targetSdkVersion नवीनतम 22 नहीं है और यह संगतता मोड किक कर सकता है।
पेलपोट्रोनिक

18
यह उत्तर एंड्रॉइड स्टूडियो का कहना है कि विरोधाभासी है। targetSdkVersion मायने रखता है और इसे संकलन से कम या बराबर होना चाहिए
ARK

152

एक oneliner गाइड के रूप में:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

आदर्श रूप में:

minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)

इयान झील के इस महान पोस्ट से अधिक पढ़ें


क्या minSdkVersion इसका मतलब यह है कि सबसे कम उपकरण वाला एप स्तर का एप canचालू है? संभवत: क्योंकि यह एपीआई के उपलब्ध कुछ का उपयोग करता है minSdkVersion?
नितिन बंसल

1
@NitinBansal हाँ। उदाहरण के लिए यदि minSdkVersion15 (जो कि ICS 4.0.3 है), API 14 वाले उपकरण (जो ICS 4.0 है) ऐप को इंस्टॉल करने में सक्षम नहीं होना चाहिए। और कम से कम अब के लिए, ऐप 15, 16, 17, 18, 19, (20 लेकिन पुराने पहनने वाले ओएस के लिए) पर चलेगा, 21, 22, 23, 24, 25, 26, 27, 28, और इसी तरह भविष्य में (शायद)
लुई त्सई

33

compileSdkVersionनवीनतम स्थिर संस्करण होना चाहिए। targetSdkVersionपूरी तरह से परीक्षण किया जाना चाहिए और छोटा या बराबर है compileSdkVersion


14
यह कहने का कोई विशेष कारण है कि targetSdkVersion compileSdkVersion से कम है? मेरा मानना ​​है कि यह एक गलत कथन है
सूफियान

6
मुझे लगता है कि बिंदु यह है कि अंतिम संस्करण पीछे की ओर संगत है, इसलिए नवीनतम एपीआई संस्करण पुराने लोगों की तरह "व्यवहार" कर सकता है, यदि आप targetSdkVersionनिचले हिस्से पर सेट करते हैं । तो ऐसा targetSdkVersionहोना चाहिए जो आपने परीक्षण किया है और सटीक व्यवहार जानता है, और नवीनतम स्थिर हो सकता है।
डियल्सन सेल्स

मुझे लगता है कि आपके स्टेटमेंट में ' compileSdkVersionसबसे नया स्टेबल वर्जन होना चाहिए' जो 'एपीआई फीचर्स का उपयोग करता है' के साथ प्रत्यय होना चाहिए। यह एपीआई 27 (आज के नवीनतम स्थिर एपीआई) के खिलाफ संकलन करने के लिए कोई मतलब नहीं है अगर आप केवल कम एपीआई संस्करण सुविधाओं का उपयोग करते हैं। हालांकि, नवीनतम स्थिर संस्करण में कुछ विशेषताएं शामिल हो सकती हैं जो स्वचालित रूप से बेहतर हो जाती हैं, जैसे पीछे की संगतता के साथ बढ़ाया सुरक्षा या कुशल संकलन। इसलिए यह नवीनतम या कम से कम हाल ही में स्थिर संस्करण का उपयोग करने की सलाह दी जाती है, लेकिन यह प्रति से नवीनतम संस्करण '[नहीं]' होना चाहिए ।
एरिक

27

खेल के लिए देर से .. और ऊपर कई महान जवाब हैं - अनिवार्य रूप से, यह compileSdkVersionएपीआई का संस्करण है जिसे ऐप के खिलाफ संकलित किया गया है, जबकि targetSdkVersionउस संस्करण को इंगित करता है जिसे ऐप के खिलाफ परीक्षण किया गया था।

मैं निम्नलिखित नोटों के साथ उन उत्तरों को पूरक करना चाहता हूं:

  1. यह targetSdkVersionउस तरीके को प्रभावित करता है जिसमें अनुमति मांगी जाती है :

    • यदि डिवाइस एंड्रॉइड 6.0 (एपीआई स्तर 23) या उच्चतर चल रहा है, और ऐप targetSdkVersion23 या उच्चतर है, तो ऐप रन-टाइम पर उपयोगकर्ता से अनुमति का अनुरोध करता है।
    • यदि डिवाइस एंड्रॉइड 5.1 (एपीआई स्तर 22) या उससे कम है, या ऐप का targetSdkVersion22 या उससे कम चल रहा है, तो सिस्टम उपयोगकर्ता को एप्लिकेशन इंस्टॉल करने पर अनुमतियों को देने के लिए कहता है।
  2. यदि compileSdkVersionआपके ऐप द्वारा घोषित संस्करण से अधिक है targetSdkVersion, तो सिस्टम यह सुनिश्चित करने के लिए अनुकूल व्यवहार को सक्षम कर सकता है कि आपका ऐप आपकी अपेक्षा के अनुरूप काम करना जारी रखे। ( संदर्भ )

  3. प्रत्येक नए Android रिलीज़ के साथ ...

    • targetSdkVersion नवीनतम एपीआई स्तर से मेल खाने के लिए वेतन वृद्धि की जानी चाहिए, फिर अपने आवेदन को संबंधित प्लेटफॉर्म संस्करण पर अच्छी तरह से परखें
    • compileSdkVersionदूसरी ओर, जब तक आप नए प्लेटफ़ॉर्म संस्करण के लिए अनन्य सुविधाएँ नहीं जोड़ रहे हैं, तब तक इसे बदलने की आवश्यकता नहीं है
    • नतीजतन, जबकि targetSdkVersionअक्सर (शुरू में) से कम है compileSdkVersion, यह अच्छी तरह से बनाए रखा / स्थापित एप्लिकेशन को देखने के लिए असामान्य नहीं हैtargetSdkVersion > compileSdkVersion

5
पुन: अपने दूसरे बिंदु, मुझे नहीं लगता कि संदर्भ स्पष्ट रूप से डॉक्टर कहते हैं। यह कहता है "हालांकि, यदि प्लेटफ़ॉर्म का एपीआई स्तर आपके ऐप के लक्ष्यस्वर्डवर्जन द्वारा घोषित संस्करण से अधिक है, तो सिस्टम यह सुनिश्चित करने के लिए संगतता व्यवहार को सक्षम कर सकता है कि आपका ऐप आपकी अपेक्षा के अनुरूप काम करना जारी रखे।" मुझे लगता है कि इसका मतलब यह है कि जिस डिवाइस पर आप चल रहे हैं उसका एपीआई स्तर आपके targetSdkVersionव्यवहार की तुलना में नया है । मुझे नहीं लगता कि इसका कुछ भी लेना-देना है compileSdkVersion
जेरेमी

20

The CompileSdkVersion SDK प्लेटफ़ॉर्म का संस्करण आपके ऐप के संकलन के साथ काम करता है, आदि। विकास प्रक्रिया को DURING करना (आपको हमेशा नवीनतम का उपयोग करना चाहिए) यह आपके द्वारा उपयोग किए जा रहे API संस्करण के साथ भेज दिया गया है

यहाँ छवि विवरण दर्ज करें

आप इसे अपनी build.gradleफ़ाइल में देखेंगे :

यहाँ छवि विवरण दर्ज करें

targetSdkVersion:इस जानकारी को ऐप स्टोर में विकास प्रक्रिया के साथ अपने ऐप शिप्स में शामिल करता है जो इसे अनुमति देता है TARGET the SPECIFIED version of the Android platform। आपके ऐप की कार्यक्षमता के आधार पर, यह मौजूदा संस्करणों की तुलना में एपीआई संस्करणों को कम कर सकता है। उदाहरण के लिए, आप एपीआई 18 को लक्षित कर सकते हैं, भले ही वर्तमान संस्करण 23 हो।

इस आधिकारिक Google पृष्ठ पर एक अच्छी नज़र डालें ।


9

मुझे compiledSdkVersionपिछले उत्तरों के बारे में बहुत सारे अंतर दिखाई देते हैं, इसलिए मैं एंड्रॉइड के वेब पेज के बाद, यहां थोड़ा स्पष्ट करने की कोशिश करूंगा।

A - Android क्या कहता है

Https://developer.android.com/guide/topics/manifest/use-sdk-element.html के अनुसार :

प्लेटफ़ॉर्म संस्करण और API स्तर का चयन करना जब आप अपना एप्लिकेशन विकसित कर रहे हों, तो आपको प्लेटफ़ॉर्म संस्करण चुनना होगा, जिसके विरुद्ध आप एप्लिकेशन को संकलित करेंगे। सामान्य तौर पर, आपको अपने एप्लिकेशन को प्लेटफ़ॉर्म के सबसे कम संभव संस्करण के विरुद्ध संकलित करना चाहिए जिसे आपका एप्लिकेशन समर्थन कर सकता है।

तो, यह एंड्रॉइड के अनुसार सही क्रम होगा:

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B - दूसरे भी क्या कहते हैं

कुछ लोग हमेशा उपलब्ध उच्चतम संकलित डेटा का उपयोग करना पसंद करते हैं। ऐसा इसलिए है क्योंकि वे minSdkVersion की तुलना में नए API फीचर्स का उपयोग कर रहे हैं या नहीं, यह जांचने के लिए कोड संकेत पर निर्भर करेगा, इस प्रकार या तो कोड का उपयोग नहीं करने के लिए या उपयोगकर्ता API संस्करण को रनटाइम पर चेक करने के लिए सशर्त रूप से पुराने संस्करणों के लिए कमियों के साथ उपयोग करें।

हटाए गए उपयोगों के बारे में संकेत भी कोड में दिखाई देंगे, आपको बताएंगे कि कुछ नए एपीआई स्तरों में अपग्रेड किया गया है, इसलिए आप चाहें तो तदनुसार प्रतिक्रिया कर सकते हैं।

तो, यह दूसरों के अनुसार सही क्रम होगा:

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

क्या करें?

यह आपके और आपके ऐप पर निर्भर करता है।

यदि आप रनटाइम के दौरान उपयोगकर्ता के एपीआई स्तर के अनुसार अलग एपीआई सुविधाओं की पेशकश करने की योजना बनाते हैं, तो विकल्प बी का उपयोग करें। आपको कोडिंग करते समय आपके द्वारा उपयोग की जाने वाली सुविधाओं के बारे में संकेत मिलेंगे। बस सुनिश्चित करें कि आप रनटाइम पर उपयोगकर्ता API स्तर की जांच किए बिना minSdkVersion की तुलना में नए API सुविधाओं का उपयोग कभी नहीं करेंगे, अन्यथा आपका ऐप क्रैश हो जाएगा। इस दृष्टिकोण से यह सीखने का लाभ भी है कि कोडिंग करते समय क्या नया है और क्या पुराना है।

यदि आप पहले से ही जानते हैं कि नया क्या है या पुराना है और आप एक समय ऐप विकसित कर रहे हैं, तो सुनिश्चित करें कि कभी भी अपडेट नहीं किया जाएगा, या आप सुनिश्चित हैं कि आप सशर्त रूप से नई एपीआई सुविधाओं की पेशकश नहीं करने जा रहे हैं, तो विकल्प ए का उपयोग करें आप परेशान नहीं होंगे। पदावनत संकेत के साथ और आप कभी भी नई एपीआई सुविधाओं का उपयोग नहीं कर पाएंगे, भले ही आप इसे करने के लिए लुभाएं।


2
मुझे नहीं लगता कि Android सलाह अलग है। " सबसे कम संभव संस्करण के खिलाफ अपने आवेदन को संकलित " और एक विशेष एसडीके संस्करण के साथ संकलन करने के बीच एक अंतर है । आपको आम तौर पर नवीनतम संस्करण के साथ संकलन (संकलन) करना चाहिए, अपने न्यूनतम (मिन्सडेकवर्सन) को यथासंभव कम सेट करें और परीक्षण या अन्य अनुकूलता के मुद्दों के लिए अपने लक्ष्य (लक्ष्यस्ड्रोवर्सन) को यथासंभव उच्च स्तर पर सेट करें।
कलस्टर Cal

अच्छा बिंदु @ काल्टर। काश वे उस दस्तावेज़ को अंतर स्पष्ट करने के लिए अपडेट करते। <uses-sdk>प्रलेखन अत्यंत अस्पष्ट और अस्पष्ट है।
जेरेमी

2

मेरे 2 सेंट: एसडीके के किसी भी संस्करण के खिलाफ संकलन करें, लेकिन ध्यान रखें कि किसी भी एपीआई को कॉल न करें जो आपके "न्यूनतम एसडीके संस्करण" का समर्थन नहीं करता है। इसका मतलब है कि आप एसडीके के नवीनतम संस्करण के खिलाफ "संकलन" कर सकते हैं।

"टार्गेट वर्जन" के रूप में, यह केवल उस चीज को संदर्भित करता है जिसे आपने पहले स्थान पर लक्षित करने की योजना बनाई थी और संभवतः इसके खिलाफ परीक्षण किया है। यदि आपने उचित परिश्रम नहीं किया है, तो यह एंड्रॉइड को सूचित करने का तरीका है कि उसे "ओरेओ" पर "लॉलीपॉप" लक्षित एप्लिकेशन को कहने से पहले कुछ अतिरिक्त जांच करने की आवश्यकता है।

तो "लक्ष्य संस्करण" स्पष्ट रूप से आपके "न्यूनतम एसडीके संस्करण" से कम नहीं है, लेकिन यह आपके "संकलित संस्करण" से अधिक नहीं हो सकता है।


1

आपके प्रत्यक्ष प्रश्नों का उत्तर नहीं, क्योंकि पहले से ही बहुत सारे विस्तृत उत्तर हैं, लेकिन यह ध्यान देने योग्य है, कि एंड्रॉइड प्रलेखन के विपरीत, एंड्रॉइड स्टूडियो उसी संस्करण के लिए उपयोग करने का सुझाव दे रहा है compileSDKVersionऔर targetSDKVersion

यहाँ छवि विवरण दर्ज करें


0

compiledSdkVersion ==> SDK के किस संस्करण को आपके कोड को bytecode (यह विकास के वातावरण में उपयोग करता है) बिंदु परसंकलित करना चाहिए: यह SDK के अंतिम संस्करण का बेहतर उपयोग है।

minSdkVersion ==> ये आइटम एपीके की स्थापना के लिए उपयोग करता है (यह उत्पादन वातावरण में उपयोग करता है)। उदाहरण के लिए:

if(client-sdk-version   <   min-sdk-versoin )
    client-can-not-install-apk;
else
    client-can-install-apk;

0

त्वरित सारांश:

MinSDKversion के लिए, ट्विटर हैंडल में नवीनतम प्रविष्टि देखें: https://twitter.com/minSdkVersion

TargetSDKversion: ट्विटर हैंडल में नवीनतम प्रविष्टि देखें: https://twitter.com/targtSdkVersion या नवीनतम एपीआई स्तर का उपयोग करें जैसा कि संकेत दिया गया है devel https://developer.android.com/guide/topics/manifest/use-ddk-element। एचटीएमएल

संकलित संस्करण: इसे TargetSDKversion के समान बनाएं

maxSdkVersion: एंड्रॉइड से सलाह यह निर्धारित नहीं है कि आप अपने ऐप को भविष्य के एंड्रॉइड रिलीज़ पर प्रदर्शन नहीं करने के लिए सीमित नहीं करना चाहते हैं


0

विज़ुअल स्टूडियो 2017 (15.8.5) में एंड्रॉइड प्रोजेक्ट की संपत्तियों की अनुप्रयोग सेटिंग्स ने उन्हें संयुक्त कर दिया है:

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.