जब एंड्रॉइड के लिए विकासशील अनुप्रयोगों की बात आती है, तो न्यूनतम और लक्ष्य एसडीके संस्करण के बीच क्या अंतर है? जब तक मिन और टारगेट संस्करण समान नहीं होंगे, तब तक ग्रहण मुझे एक नई परियोजना नहीं बनाने देगा!
जब एंड्रॉइड के लिए विकासशील अनुप्रयोगों की बात आती है, तो न्यूनतम और लक्ष्य एसडीके संस्करण के बीच क्या अंतर है? जब तक मिन और टारगेट संस्करण समान नहीं होंगे, तब तक ग्रहण मुझे एक नई परियोजना नहीं बनाने देगा!
जवाबों:
एंड्रॉयड: minSdkVersion
एप्लिकेशन को चलाने के लिए आवश्यक न्यूनतम एपीआई स्तर को निर्दिष्ट करने वाला पूर्णांक। एंड्रॉइड सिस्टम उपयोगकर्ता को एप्लिकेशन को इंस्टॉल करने से रोकेगा यदि सिस्टम का एपीआई स्तर इस विशेषता में निर्दिष्ट मूल्य से कम है। आपको हमेशा इस विशेषता को घोषित करना चाहिए।
एंड्रॉयड: targetSdkVersion
एक पूर्णांक एपीआई स्तर को नामित करता है जो अनुप्रयोग को लक्षित कर रहा है।
इस विशेषता सेट के साथ, एप्लिकेशन का कहना है कि यह पुराने संस्करणों (नीचे minSdkVersion) पर चलने में सक्षम है, लेकिन यहां निर्दिष्ट संस्करण के साथ काम करने के लिए स्पष्ट रूप से परीक्षण किया गया था। इस लक्ष्य संस्करण को निर्दिष्ट करने से प्लेटफॉर्म को अनुकूलता सेटिंग्स को अक्षम करने की अनुमति मिलती है जो लक्ष्य संस्करण के लिए आवश्यक नहीं हैं (जो कि आगे-संगतता बनाए रखने के लिए चालू हो सकते हैं) या नई सुविधाओं को सक्षम करने के लिए जो पुराने अनुप्रयोगों के लिए उपलब्ध नहीं हैं। इसका मतलब यह नहीं है कि आप प्लेटफ़ॉर्म के विभिन्न संस्करणों के लिए अलग-अलग सुविधाओं को प्रोग्राम कर सकते हैं - यह केवल उस प्लेटफ़ॉर्म को सूचित करता है जिसे आपने लक्ष्य संस्करण के विरुद्ध परीक्षण किया है और प्लेटफ़ॉर्म को लक्ष्य संस्करण के साथ आगे-संगतता बनाए रखने के लिए कोई अतिरिक्त कार्य नहीं करना चाहिए।
अधिक जानकारी के लिए इस URL को देखें:
http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
ओपी द्वारा प्रश्न के लिए पोस्ट की गई टिप्पणी (मूल रूप से यह कहते हुए कि टारगेटकेके ऐप के संकलन को प्रभावित नहीं करता है) पूरी तरह से गलत है! माफ़ करना शरमाना।
संक्षेप में, यहाँ minSDK से एक अलग टारगेट को घोषित करने का उद्देश्य है: इसका मतलब है कि आप अपने न्यूनतम की तुलना में उच्च स्तर के एसडीके से सुविधाओं का उपयोग कर रहे हैं, लेकिन आपने पीछे की संगतता सुनिश्चित की है । दूसरे शब्दों में, कल्पना करें कि आप एक ऐसी सुविधा का उपयोग करना चाहते हैं जो हाल ही में शुरू की गई थी, लेकिन यह आपके आवेदन के लिए महत्वपूर्ण नहीं है। फिर आप टारगेटकेके को उस संस्करण में सेट करेंगे जहां यह नई सुविधा शुरू की गई थी और न्यूनतम से कुछ कम है ताकि हर कोई अभी भी आपके ऐप का उपयोग कर सके।
एक उदाहरण देने के लिए, मान लीजिए कि आप एक ऐसा ऐप लिख रहे हैं, जो जेस्चर डिटेक्शन का व्यापक उपयोग करता है। हालांकि, प्रत्येक कमांड जिसे एक इशारे से पहचाना जा सकता है वह एक बटन या मेनू से भी किया जा सकता है। इस मामले में, इशारे एक 'शांत अतिरिक्त' हैं, लेकिन आवश्यक नहीं हैं। इसलिए आप लक्ष्य sdk को 7 ("एक्लेयर" पर सेट करेंगे जब GestureDetection पुस्तकालय शुरू किया गया था), और न्यूनतम 3 के स्तर ("कपकेक") ताकि पुराने फोन वाले लोग भी अपने ऐप का उपयोग कर सकें। आपको बस यह सुनिश्चित करना होगा कि आपका ऐप एंड्रॉइड के संस्करण की जांच करता है जो इशारे की लाइब्रेरी का उपयोग करने से पहले चल रहा था, अगर यह मौजूद नहीं था तो इसका उपयोग करने से बचने की कोशिश करें। (निश्चित रूप से यह एक दिनांकित उदाहरण है क्योंकि शायद ही किसी के पास अभी भी v1.5 फोन है, लेकिन एक समय था जब v1 के साथ संगतता बनाए रखा गया था।
एक और उदाहरण देने के लिए, आप इसका उपयोग कर सकते हैं यदि आप जिंजरब्रेड या हनीकॉम्ब से एक सुविधा का उपयोग करना चाहते थे। कुछ लोगों को जल्द ही अपडेट मिल जाएगा, लेकिन कई अन्य, विशेष रूप से पुराने हार्डवेयर के साथ, एक नया उपकरण खरीदने तक एक्लेयर के साथ फंस सकते हैं। यह आपको कुछ शांत नई सुविधाओं का उपयोग करने देगा, लेकिन आपके संभावित बाजार के हिस्से को छोड़कर।
एंड्रॉइड डेवलपर के ब्लॉग से वास्तव में एक अच्छा लेख है कि इस सुविधा का उपयोग कैसे किया जाए, और विशेष रूप से, "इसका उपयोग करने से पहले मौजूद सुविधा की जांच करें" कोड को डिज़ाइन करने के लिए कैसे मैंने ऊपर उल्लेख किया है।
ओपी के लिए: मैंने इसे मुख्य रूप से किसी के लाभ के लिए लिखा है जो भविष्य में इस प्रश्न पर ठोकर खाने के लिए होता है, जैसा कि मुझे पता है कि आपका प्रश्न बहुत पहले पूछा गया था।
जब आप targetSdkVersion = "xx" सेट करते हैं, तो आप यह प्रमाणित कर रहे हैं कि एपीआई स्तर xx पर आपका ऐप ठीक से काम करता है (जैसे, अच्छी तरह से और सफलतापूर्वक परीक्षण किया गया है)।
एंड्रॉइड का एक संस्करण xx से ऊपर एक एपीआई स्तर पर चल रहा है, आप किसी भी सुविधाओं का समर्थन करने के लिए स्वचालित रूप से अनुकूलता कोड लागू करेंगे जो कि एपीआई स्तर xx पर या उससे पहले उपलब्ध थे, लेकिन जो अब उस Android संस्करण के उच्च स्तर पर अप्रचलित हैं।
इसके विपरीत, यदि आपको लगता है कि अप्रचलित हो गई किसी भी सुविधाओं का उपयोग कर रहे पर या पूर्व स्तर xx के लिए, संगतता कोड होगा नहीं स्वचालित रूप से OS संस्करण द्वारा उच्च API स्तरों पर उन का उपयोग करता है समर्थन करने के लिए लागू किया जा (जो अब उन सुविधाओं को शामिल)। उस स्थिति में, आपके स्वयं के कोड में विशेष केस क्लॉज़ होना चाहिए जो एपीआई स्तर का परीक्षण करता है और, यदि ओएस स्तर का पता लगाया गया है, तो वह उच्चतर है जिसमें अब दी गई एपीआई सुविधा नहीं है, आपके कोड को वैकल्पिक विशेषताओं का उपयोग करना चाहिए जो चल रहे ओएस पर उपलब्ध हैं एपीआई स्तर।
यदि यह ऐसा करने में विफल रहता है, तो कुछ इंटरफ़ेस सुविधाएँ बस प्रकट नहीं हो सकती हैं जो सामान्य रूप से आपके कोड के भीतर घटनाओं को ट्रिगर करेंगी, और आप एक महत्वपूर्ण इंटरफ़ेस सुविधा को याद कर सकते हैं जिसे उपयोगकर्ता को उन घटनाओं को ट्रिगर करने और उनकी कार्यक्षमता तक पहुंचने की आवश्यकता है (जैसा कि उनकी कार्यक्षमता के अनुसार) नीचे उदाहरण)।
जैसा कि अन्य उत्तरों में कहा गया है, आप minSdkVersion की तुलना में targetSdkVersion को उच्चतर सेट कर सकते हैं, यदि आप अपने एपीआईएसडाउन्ट की तुलना में उच्च एपीआई स्तरों पर शुरू में परिभाषित कुछ एपीआई सुविधाओं का उपयोग करना चाहते थे, और यह सुनिश्चित करने के लिए कदम उठाए थे कि आपका कोड उन विशेषताओं की अनुपस्थिति का पता लगा सके और उन्हें संभाल सके। targetSdkVersion की तुलना में निम्न स्तर।
किसी सुविधा का उपयोग करने के लिए आवश्यक न्यूनतम API स्तर के लिए विशेष रूप से परीक्षण करने के लिए डेवलपर्स को चेतावनी देने के लिए, कंपाइलर एक त्रुटि जारी करेगा (सिर्फ एक चेतावनी नहीं) यदि कोड में किसी भी विधि के लिए कॉल शामिल है जो कि minSdkersion की तुलना में बाद के एपीआई स्तर पर परिभाषित किया गया था, तो भले ही targetSdkVersion एपीआई स्तर से अधिक या उसके बराबर हो, जिस पर वह तरीका पहले उपलब्ध कराया गया था। इस त्रुटि को दूर करने के लिए, कंपाइलर निर्देश
@TargetApi(nn)
संकलक को बताता है कि उस निर्देश के दायरे के भीतर कोड (जो या तो एक विधि या एक वर्ग से पहले होगा) किसी भी तरीके से कॉल करने से पहले कम से कम nn के एपीआई स्तर के लिए परीक्षण करने के लिए लिखा गया है जो कम से कम उस एपीआई स्तर के होने पर निर्भर करता है । उदाहरण के लिए, निम्न कोड एक ऐसी विधि को परिभाषित करता है जिसे कोड से किसी ऐप के भीतर बुलाया जा सकता है जिसमें 11 से कम का minSdVersion और 11 या उससे अधिक का targetSdkVersion है:
@TargetApi(11)
public void refreshActionBarIfApi11OrHigher() {
//If the API is 11 or higher, set up the actionBar and display it
if(Build.VERSION.SDK_INT >= 11) {
//ActionBar only exists at API level 11 or higher
ActionBar actionBar = getActionBar();
//This should cause onPrepareOptionsMenu() to be called.
// In versions of the API prior to 11, this only occurred when the user pressed
// the dedicated menu button, but at level 11 and above, the action bar is
// typically displayed continuously and so you will need to call this
// each time the options on your menu change.
invalidateOptionsMenu();
//Show the bar
actionBar.show();
}
}
यदि आप उस उच्च स्तर पर परीक्षण कर चुके हैं और सब कुछ काम कर चुका है, तो भी आप एक उच्च लक्ष्य-निर्धारण की घोषणा कर सकते हैं , भले ही आप अपने minSdkVersion की तुलना में एपीआई स्तर से किसी भी सुविधाएँ का उपयोग नहीं कर रहे हों । यह सिर्फ अनुकूलता कोड तक पहुँचने के ओवरहेड से बचने के इरादे से लक्ष्य स्तर से नीचे न्यूनतम स्तर तक पहुंचने के लिए होगा, क्योंकि आपने पुष्टि की होगी (परीक्षण के माध्यम से) कि इस तरह के अनुकूलन की आवश्यकता नहीं थी।
यूआई फीचर का एक उदाहरण जो घोषित टारगेट पर निर्भर करता है। डिस्काउंट तीन से वर्टिकल-डॉट मेनू बटन होता है, जो उन एप्स के स्टेटस बार पर दिखाई देता है, जिनमें 11 से कम का टार्गेटवॉक वर्जन होता है, जब वे एप्स एपीआई 11 के तहत चल रहे होते हैं। यदि आपके ऐप में 10 या उससे नीचे का लक्ष्यविकास है, तो यह माना जाता है कि आपके ऐप का इंटरफ़ेस एक समर्पित मेनू बटन के अस्तित्व पर निर्भर करता है, और इसलिए तीन-डॉट बटन पहले समर्पित हार्डवेयर और / या स्क्रीन संस्करणों की जगह लेता है। उस बटन का (जैसे, जिंजरब्रेड में देखा गया) जब OS का उच्च API स्तर होता है, जिसके लिए डिवाइस पर एक समर्पित मेनू बटन अब ग्रहण नहीं किया जाता है। हालाँकि, यदि आप अपने ऐप के टारगेट SSkVersion को 11 या उससे अधिक पर सेट करते हैं, तो यह माना जाता है कि आपने उस स्तर पर शुरू की गई सुविधाओं का लाभ उठाया है जो समर्पित मेनू बटन (ई) को प्रतिस्थापित करते हैं। जी।, एक्शन बार), या कि आपने अन्यथा सिस्टम मेनू बटन की आवश्यकता को दरकिनार कर दिया है; नतीजतन, तीन-ऊर्ध्वाधर-मेनू "संगतता बटन" गायब हो जाता है। उस स्थिति में, यदि उपयोगकर्ता को मेनू बटन नहीं मिल रहा है, तो वह इसे दबा नहीं सकता है, और यह बदले में, इसका मतलब है कि आपकी गतिविधि का onCreateOptionsMenu (मेनू) ओवरराइड कभी भी चालान नहीं हो सकता है, जो फिर से, इसका मतलब है कि आपके ऐप की कार्यक्षमता का एक महत्वपूर्ण हिस्सा इसके उपयोगकर्ता इंटरफ़ेस से वंचित हो सकता है। जब तक, निश्चित रूप से, आपने इन सुविधाओं तक पहुंचने के लिए उपयोगकर्ता के लिए एक्शन बार या कुछ अन्य वैकल्पिक साधनों को लागू किया है। t एक मेनू बटन ढूंढें, वह इसे दबा नहीं सकती है, और यह बदले में, इसका मतलब है कि आपकी गतिविधि का onCreateOptionsMenu (मेनू) ओवरराइड कभी भी चालान नहीं हो सकता है, जो फिर से बदले में, इसका मतलब है कि आपके ऐप की कार्यक्षमता का एक महत्वपूर्ण हिस्सा हो सकता है। इसके यूजर इंटरफेस से वंचित। जब तक, निश्चित रूप से, आपने इन सुविधाओं तक पहुंचने के लिए उपयोगकर्ता के लिए एक्शन बार या कुछ अन्य वैकल्पिक साधनों को लागू किया है। t एक मेनू बटन ढूंढें, वह इसे दबा नहीं सकती है, और यह बदले में, इसका मतलब है कि आपकी गतिविधि का onCreateOptionsMenu (मेनू) ओवरराइड कभी भी चालान नहीं हो सकता है, जो फिर से बदले में, इसका मतलब है कि आपके ऐप की कार्यक्षमता का एक महत्वपूर्ण हिस्सा हो सकता है। इसके यूजर इंटरफेस से वंचित। जब तक, निश्चित रूप से, आपने इन सुविधाओं तक पहुंचने के लिए उपयोगकर्ता के लिए एक्शन बार या कुछ अन्य वैकल्पिक साधनों को लागू किया है।
minSdkVersion, इसके विपरीत, एक आवश्यकता बताता है कि आपके ऐप को चलाने के लिए डिवाइस के OS संस्करण में कम से कम एपीआई स्तर है। यह प्रभावित करता है कि कौन से डिवाइस Google Play ऐप स्टोर (और संभवतः अन्य ऐप स्टोर, साथ ही) पर आपके ऐप को देखने और डाउनलोड करने में सक्षम हैं। यह बताते हुए कि आपका ऐप OS (API या अन्य) सुविधाओं पर निर्भर है, जो उस स्तर पर स्थापित किए गए थे, और उन सुविधाओं की अनुपस्थिति से निपटने के लिए स्वीकार्य तरीका नहीं है।
एक सुविधा है कि एपीआई से संबंधित नहीं है की उपस्थिति सुनिश्चित करने के लिए minSdkVersion का उपयोग करने का एक उदाहरण यह सुनिश्चित करने के लिए कि आपका ऐप केवल DalIT दुभाषिया के JIT- सक्षम संस्करण पर ही चलेगा, जब से JIT पेश किया गया था एपीआई स्तर 8 पर Android दुभाषिया के लिए)। चूँकि JIT- सक्षम दुभाषिया के लिए प्रदर्शन पाँच गुना हो सकता है, जिसमें उस विशेषता का अभाव होता है, यदि आपका ऐप प्रोसेसर का भारी उपयोग करता है, तो पर्याप्त प्रदर्शन सुनिश्चित करने के लिए आपको एपीआई स्तर 8 या उससे ऊपर की आवश्यकता हो सकती है।
एक अवधारणा को हमेशा उदाहरणों के साथ दिया जा सकता है । मुझे एंड्रॉइड फ्रेमवर्क स्रोत कोड में खुदाई करने और एंड्रॉइड डेवलपर साइटों और संबंधित स्टैक्वेरफ़्लो थ्रेड्स के सभी दस्तावेजों को पढ़ने के बाद भी कुछ प्रयोगों को करने तक इन अवधारणा को समझने में परेशानी हुई। मैं उन दो उदाहरणों को साझा करने जा रहा हूं, जिन्होंने मुझे इन अवधारणाओं को पूरी तरह से समझने में बहुत मदद की।
एक DatePickerDialog उस स्तर के आधार पर अलग-अलग दिखाई देगा, जो आप AndroidManifest.xml फ़ाइल के टार्गेटकॉवर्सन ( <uses-sdk android:targetSdkVersion="INTEGER_VALUE"/>
) में डालते हैं । यदि आप मान 10 या उससे कम सेट करते हैं, तो आपका DatePickerDialog बाईं ओर दिखेगा। दूसरी ओर, यदि आप मान 11 या अधिक निर्धारित करते हैं, तो एक बहुत ही समान कोड के साथ एक DatePickerDialog सही लगेगा ।
इस नमूने को बनाने के लिए मैंने जिस कोड का उपयोग किया है वह सुपर-सरल है। MainActivity.java
दिखता है:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClickButton(View v) {
DatePickerDialog d = new DatePickerDialog(this, null, 2014, 5, 4);
d.show();
}
}
और activity_main.xml
दिखता है:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClickButton"
android:text="Button" />
</RelativeLayout>
बस। यह वास्तव में हर कोड है जिसे मुझे यह परीक्षण करने की आवश्यकता है।
और जब आप एंड्रॉइड फ्रेमवर्क स्रोत कोड देखते हैं तो यह परिवर्तन क्रिस्टल स्पष्ट होता है । यह इस प्रकार है:
public DatePickerDialog(Context context,
OnDateSetListener callBack,
int year,
int monthOfYear,
int dayOfMonth,
boolean yearOptional) {
this(context, context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.HONEYCOMB
? com.android.internal.R.style.Theme_Holo_Light_Dialog_Alert
: com.android.internal.R.style.Theme_Dialog_Alert,
callBack, year, monthOfYear, dayOfMonth, yearOptional);
}
जैसा कि आप देख सकते हैं, फ्रेमवर्क को वर्तमान टारगेटोकवर्सन मिलता है और विभिन्न थीम सेट की जाती है। इस तरह का कोड स्निपेट ( getApplicationInfo().targetSdkVersion >= SOME_VERSION
) एंड्रॉइड फ्रेमवर्क में यहां और वहां पाया जा सकता है।
एक अन्य उदाहरण WebView वर्ग के बारे में है । वेबव्यू क्लास के सार्वजनिक तरीकों को मुख्य धागे पर बुलाया जाना चाहिए, और यदि नहीं, तो रनटाइम सिस्टम एक को फेंकता है RuntimeException
, जब आप टारगेटोकवर्सन 18 या उच्चतर सेट करते हैं। इस व्यवहार को इसके स्रोत कोड के साथ स्पष्ट रूप से वितरित किया जा सकता है । ऐसा ही लिखा है।
sEnforceThreadChecking = context.getApplicationInfo().targetSdkVersion >=
Build.VERSION_CODES.JELLY_BEAN_MR2;
if (sEnforceThreadChecking) {
throw new RuntimeException(throwable);
}
एंड्रॉइड डॉक्टर कहता है, " जैसा कि एंड्रॉइड प्रत्येक नए संस्करण के साथ विकसित होता है, कुछ व्यवहार और यहां तक कि दिखावे भी बदल सकते हैं ।" इसलिए, हमने व्यवहार और उपस्थिति परिवर्तन को देखा है, और यह परिवर्तन कैसे पूरा हुआ है।
सारांश में, एंड्रॉइड डॉक्टर का कहना है कि " यह विशेषता (targetSdkVersion) सिस्टम को सूचित करती है कि आपने लक्ष्य संस्करण के खिलाफ परीक्षण किया है और सिस्टम को आपके संस्करण की लक्ष्य-संगतता को बनाए रखने के लिए किसी संगतता व्यवहार को सक्षम नहीं करना चाहिए । " यह WebView मामले के साथ वास्तव में स्पष्ट है। यह तब तक ठीक था जब तक कि JELLY_BEAN_MR2 ने वेब-क्लास की सार्वजनिक पद्धति को मुख्य-सूत्र पर कॉल करने के लिए जारी नहीं किया। यदि Android फ्रेमवर्क JELLY_BEAN_MR2 उपकरणों पर रनटाइम एक्ससेप्शन फेंकता है तो यह बकवास है। यह सिर्फ अपनी रुचि के लिए नए शुरू किए गए व्यवहारों को सक्षम नहीं करना चाहिए, जो घातक परिणाम का कारण बनता है। तो, हमें क्या करना है, यह जांचना है कि क्या कुछ लक्ष्य-निर्धारण पर सब कुछ ठीक है। हमें उच्च लक्ष्य-स्थापना के साथ उपस्थिति बढ़ाने जैसा लाभ मिलता है,
संपादित करें: अस्वीकरण। DatePickerDialog कंस्ट्रक्टर जो वर्तमान टारगेटोकवर्सन (जो मैंने ऊपर दिखाया था) के आधार पर अलग-अलग थीम सेट करता है, वास्तव में बाद के कमिट में बदल दिया गया है । फिर भी मैंने उस उदाहरण का उपयोग किया है, क्योंकि तर्क को नहीं बदला गया है, और उन कोड स्निपेट में स्पष्ट रूप से targetSDKversion अवधारणा दिखाई देती है।
सारांश चाहने वालों के लिए,
android:minSdkVersion
आपके आवेदन का समर्थन करने तक न्यूनतम संस्करण है। यदि आपके डिवाइस में Android का निचला संस्करण है, तो ऐप इंस्टॉल नहीं होगा।
जबकि,
android:targetSdkVersion
वह API स्तर है, जिस तक आपका ऐप चलाने के लिए डिज़ाइन किया गया है। मतलब, आपके फ़ोन के सिस्टम को आगे संगतता बनाए रखने के लिए किसी भी संगतता व्यवहार का उपयोग करने की आवश्यकता नहीं है क्योंकि आपने इस एपीआई तक परीक्षण किया है।
आपका एप्लिकेशन अभी भी दिए गए से अधिक Android संस्करणों पर चलेगा, targetSdkVersion
लेकिन Android संगतता व्यवहार में किक करेगा।
फ्रीबी -
android:maxSdkVersion
यदि आपके डिवाइस का API संस्करण अधिक है, तो ऐप इंस्टॉल नहीं होगा। अर्थात। यह अधिकतम एपीआई है जिसके लिए आप अपने ऐप को इंस्टॉल करने की अनुमति देते हैं।
अर्थात। MinSDK -4 के लिए, maxSDK - 8, targetSDK - 8 मेरा ऐप न्यूनतम 1.6 पर काम करेगा, लेकिन मैंने उन विशेषताओं का भी उपयोग किया है जो केवल 2.2 में समर्थित हैं जो कि 2.2 डिवाइस पर स्थापित होने पर दिखाई देगी। साथ ही, अधिकतम 1 जीबीएसके - 8 के लिए, यह ऐप एपीआई> 8 का उपयोग कर फोन पर इंस्टॉल नहीं होगा।
इस उत्तर को लिखने के समय, एंड्रॉइड डॉक्यूमेंटेशन यह समझाने में बहुत अच्छा काम नहीं कर रहा था। अब यह बहुत अच्छी तरह से समझाया गया है। इसे यहां देखें
यदि आपको उदाहरण के लिए कुछ संकलित त्रुटियां मिलती हैं:
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="15" />
।
private void methodThatRequiresAPI11() {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Config.ARGB_8888; // API Level 1
options.inSampleSize = 8; // API Level 1
options.inBitmap = bitmap; // **API Level 11**
//...
}
आपको संकलित त्रुटि मिलती है:
फ़ील्ड के लिए API स्तर 11 (वर्तमान न्यूनतम 10 है) की आवश्यकता है: android.graphics.BitmapFactory $ विकल्प # inBitmap
एंड्रॉइड डेवलपमेंट टूल्स (एडीटी) के संस्करण 17 के बाद से एक नया और बहुत उपयोगी एनोटेशन है @TargetApi
जो इसे बहुत आसानी से ठीक कर सकता है। समस्यात्मक घोषणा को घेरने की विधि से पहले इसे जोड़ें:
@TargetApi
private void methodThatRequiresAPI11() {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Config.ARGB_8888; // API Level 1
options.inSampleSize = 8; // API Level 1
// This will avoid exception NoSuchFieldError (or NoSuchMethodError) at runtime.
if (Integer.valueOf(android.os.Build.VERSION.SDK) >= android.os.Build.VERSION_CODES.HONEYCOMB) {
options.inBitmap = bitmap; // **API Level 11**
//...
}
}
अब कोई संकलन त्रुटियाँ नहीं हैं और यह चलेगा!
EDIT: इसके परिणामस्वरूप एपीआई स्तर पर रनटाइम त्रुटि 11. 11 से कम होगी। 11 या उच्चतर पर यह बिना किसी समस्या के चलेगा। इसलिए आपको यह सुनिश्चित करना चाहिए कि आप इस पद्धति को संस्करण जांच द्वारा संरक्षित निष्पादन पथ पर बुलाएं। लक्ष्यएपीआई आपको इसे संकलित करने की अनुमति देता है लेकिन आप इसे अपने जोखिम पर चलाते हैं।
android:minSdkVersion
और android:targetSdkVersion
दोनों ही Integer value हैं जो हमें एंड्रॉइड मेनिफ़ेस्ट फ़ाइल में घोषित करने की आवश्यकता है लेकिन दोनों में अलग-अलग गुण हैं।
android:minSdkVersion:
Android ऐप चलाने के लिए यह न्यूनतम आवश्यक API स्तर है। अगर हम उसी ऐप को लोअर एपीआई वर्जन पर इंस्टॉल करेंगे तो पार्सर एरर दिखाई देगा, और एप्लिकेशन सपोर्ट न करने की समस्या सामने आएगी।
android:targetSdkVersion:
लक्ष्य sdk संस्करण ऐप के लक्ष्य API स्तर को सेट करना है। यदि यह विशेषता प्रकट में घोषित नहीं की जाती है, तो minSdk संस्करण आपका TargetSdk संस्करण होगा। यह हमेशा सच होता है कि "हम एपीआई के सभी उच्चतर संस्करणों में ऐप सपोर्ट इंस्टालेशन जिसे हमने टार्गेटस्कैक वर्जन के रूप में घोषित किया है"। एप्लिकेशन सीमित लक्ष्य बनाने के लिए हमें अपनी मैनिफ़ेस्ट फ़ाइल में maxSdkVersion घोषित करने की आवश्यकता है ...
यदि आप ऐसे एप्लिकेशन बना रहे हैं, जिनके लिए खतरनाक अनुमतियों की आवश्यकता होती है और 23 या उससे ऊपर के लक्ष्य को निर्धारित करना चाहिए, तो आपको सावधान रहना चाहिए। यदि आप रनटाइम पर अनुमतियों की जांच नहीं करते हैं, तो आपको एक SecurityException मिलेगी और यदि आप एक कोशिश ब्लॉक के अंदर कोड का उपयोग कर रहे हैं, उदाहरण के लिए ओपन कैमरा, अगर आप लॉगकैट की जांच नहीं करते हैं, तो त्रुटि का पता लगाना मुश्किल हो सकता है।
लक्ष्य sdk वह संस्करण है जिसे आप लक्षित करना चाहते हैं, और न्यूनतम sdk न्यूनतम है।