অ্যান্ড্রয়েডের জন্য অ্যাপ্লিকেশনগুলি বিকাশের ক্ষেত্রে, ন্যূনতম এবং টার্গেট এসডিকে সংস্করণটির মধ্যে পার্থক্য কী? মিনি এবং টার্গেটের সংস্করণগুলি একই না হলে গ্রহপাগুলি আমাকে নতুন প্রকল্প তৈরি করতে দেয় না!
অ্যান্ড্রয়েডের জন্য অ্যাপ্লিকেশনগুলি বিকাশের ক্ষেত্রে, ন্যূনতম এবং টার্গেট এসডিকে সংস্করণটির মধ্যে পার্থক্য কী? মিনি এবং টার্গেটের সংস্করণগুলি একই না হলে গ্রহপাগুলি আমাকে নতুন প্রকল্প তৈরি করতে দেয় না!
উত্তর:
অ্যান্ড্রয়েড minSdkVersion
অ্যাপ্লিকেশনটি চালানোর জন্য প্রয়োজনীয় ন্যূনতম এপিআই স্তর নির্ধারণকারী একটি পূর্ণসংখ্যা। যদি সিস্টেমের এপিআই স্তরটি এই বৈশিষ্ট্যের ক্ষেত্রে নির্দিষ্ট করা মানের চেয়ে কম হয় তবে অ্যান্ড্রয়েড সিস্টেম অ্যাপ্লিকেশন ইনস্টল করতে ব্যবহারকারীকে আটকাবে। আপনার এই বৈশিষ্ট্যটি সর্বদা ঘোষণা করা উচিত।
অ্যান্ড্রয়েড targetSdkVersion
অ্যাপ্লিকেশনটি লক্ষ্যবস্তু করে এমন একটি এপিআই স্তর নির্ধারণ করে এমন একটি পূর্ণসংখ্যা।
এই অ্যাট্রিবিউট সেটটির সাথে, অ্যাপ্লিকেশনটি বলেছে যে এটি পুরানো সংস্করণগুলিতে চালাতে সক্ষম (ডাউন টু মিনিডডকভিশন) তবে এখানে বর্ণিত সংস্করণটির সাথে স্পষ্টভাবে পরীক্ষা করা হয়েছিল। এই লক্ষ্য সংস্করণটি নির্দিষ্ট করে দেওয়া প্ল্যাটফর্মটিকে লক্ষ্য সংস্করণের জন্য প্রয়োজনীয় নয় এমন সামঞ্জস্যতা সেটিংস অক্ষম করতে দেয় (যা অন্যথায় ফরওয়ার্ড-সামঞ্জস্য বজায় রাখার জন্য চালু করা যেতে পারে) বা পুরানো অ্যাপ্লিকেশনগুলিতে উপলব্ধ নয় এমন নতুন বৈশিষ্ট্য সক্ষম করে enable এর অর্থ এই নয় যে আপনি প্ল্যাটফর্মের বিভিন্ন সংস্করণের জন্য বিভিন্ন বৈশিষ্ট্যগুলি প্রোগ্রাম করতে পারবেন - এটি প্ল্যাটফর্মটিকে কেবল অবহিত করে যে আপনি লক্ষ্য সংস্করণটির বিরুদ্ধে পরীক্ষা করেছেন এবং প্ল্যাটফর্মটি লক্ষ্য সংস্করণের সাথে সামনের সামঞ্জস্য বজায় রাখতে কোনও অতিরিক্ত কাজ করা উচিত নয়।
আরও তথ্যের জন্য এই URL টি দেখুন:
http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
প্রশ্নটিতে ওপি দ্বারা পোস্ট করা মন্তব্য (মূলত উল্লেখ করে যে টার্গেটসডিকে কোনও অ্যাপ্লিকেশন সংকলন প্রভাবিত করে না) সম্পূর্ণ ভুল! ভোঁতা হওয়ার জন্য দুঃখিত
সংক্ষেপে, minSDK থেকে আলাদা টার্গেট এসডিকে ঘোষণার উদ্দেশ্য এখানে: এর অর্থ আপনি আপনার সর্বনিম্নের চেয়ে উচ্চ স্তরের এসডিকে বৈশিষ্ট্যগুলি ব্যবহার করছেন তবে আপনি পিছনের সামঞ্জস্যতা নিশ্চিত করেছেন । অন্য কথায়, কল্পনা করুন যে আপনি এমন একটি বৈশিষ্ট্য ব্যবহার করতে চান যা সম্প্রতি সবেমাত্র চালু হয়েছিল, তবে এটি আপনার অ্যাপ্লিকেশনের পক্ষে গুরুত্বপূর্ণ নয়। তারপরে আপনি টার্গেট এসডিকে এমন সংস্করণে সেট করবেন যেখানে এই নতুন বৈশিষ্ট্যটি প্রবর্তিত হয়েছিল এবং সর্বনিম্ন কোনও কিছুর চেয়ে কম হওয়া যাতে প্রত্যেকে আপনার অ্যাপ্লিকেশনটি ব্যবহার করতে পারে।
উদাহরণ দেওয়ার জন্য, ধরুন আপনি একটি অ্যাপ্লিকেশন লিখছেন যা অঙ্গভঙ্গি সনাক্তকরণের ব্যাপক ব্যবহার করে। যাইহোক, প্রতিটি কমান্ড যা ইশারা দ্বারা স্বীকৃতি পেতে পারে সেগুলি একটি বোতাম বা মেনু থেকেও করা যেতে পারে। এই ক্ষেত্রে, অঙ্গভঙ্গিগুলি একটি 'দুর্দান্ত অতিরিক্ত' তবে প্রয়োজনীয় নয়। সুতরাং আপনি এসডিকে লক্ষ্যমাত্রা 7 ("ইক্লেয়ার" সেট করে যখন ইশারা-ডিটেকশন লাইব্রেরি চালু হয়েছিল) এবং ন্যূনতম এসডিকে স্তর 3 ("কাপকেক") করতে হবে যাতে সত্যিকারের পুরানো ফোন সহ লোকেরাও আপনার অ্যাপটি ব্যবহার করতে পারে। আপনাকে যা করতে হবে তা নিশ্চিত করেই আপনার অ্যাপটি ইঙ্গিতটি গ্রন্থাগারটি ব্যবহারের চেষ্টা করার আগে এটি অ্যান্ড্রয়েডের যে সংস্করণটি চালু ছিল তা যাচাই করেছে, এটি উপস্থিত না থাকলে এটি ব্যবহারের চেষ্টা এড়ানোর জন্য। (স্বীকারযোগ্যভাবেই এটি একটি তারিখযুক্ত উদাহরণ, কারণ এখনও কারও কাছে v1.5 ফোন নেই, তবে একটি সময় ছিল যখন ভি 1 এর সাথে সামঞ্জস্যতা বজায় রেখেছিল)।
অন্য উদাহরণ দেওয়ার জন্য, আপনি যদি জিঞ্জারব্রেড বা হানিকম্বের কোনও বৈশিষ্ট্য ব্যবহার করতে চান তবে আপনি এটি ব্যবহার করতে পারেন। কিছু লোক শীঘ্রই আপডেটগুলি পাবেন, তবে অনেকেই, বিশেষত পুরানো হার্ডওয়্যার সহ, তারা কোনও নতুন ডিভাইস না কিনে ইক্লেয়ারের সাথে আটকে থাকতে পারে। এটি আপনাকে কয়েকটি দুর্দান্ত নতুন বৈশিষ্ট্য ব্যবহার করতে দিবে, তবে আপনার সম্ভাব্য বাজারের অংশটি বাদ দিয়ে।
অ্যান্ড্রয়েড বিকাশকারীদের ব্লগ থেকে সত্যিই একটি ভাল নিবন্ধ আছেএই বৈশিষ্ট্যটি কীভাবে ব্যবহার করতে হবে এবং বিশেষত, আমি উপরে উল্লিখিত কোডটি "বৈশিষ্ট্যটি ব্যবহারের আগে এটির উপস্থিতি রয়েছে" কীভাবে ডিজাইন করব সে সম্পর্কে রয়েছে।
ও.পি. কে: আমি মূলত ভবিষ্যতে এই প্রশ্নটির পিছনে যে কেউ হোঁচট খেয়ে পড়েছে তার সুবিধার জন্য এটি লিখেছি, কারণ আমি বুঝতে পারি যে আপনার প্রশ্নটি অনেক আগে জিজ্ঞাসা করা হয়েছিল।
আপনি যখন টার্নডএসডিভিভার্সন = "এক্সএক্সএক্স" সেট করেন, আপনি যাচাই করে যাচ্ছেন যে আপনার অ্যাপ্লিকেশনটি ঠিকঠাকভাবে কাজ করছে (উদাহরণস্বরূপ, পুরোপুরি এবং সফলভাবে পরীক্ষা করা হয়েছে) এপিআই স্তরের এক্সএক্সএক্সে।
এক্সএক্সের উপরে একটি এপিআই স্তরে চলমান অ্যান্ড্রয়েডের একটি সংস্করণ আপনার উপর নির্ভর করে এমন কোনও বৈশিষ্ট্য সমর্থন করার জন্য স্বয়ংক্রিয়ভাবে সামঞ্জস্যতা কোড প্রয়োগ করবে যা এপিআই লেভেল এক্সএক্স এর আগে বা তার আগে পাওয়া গিয়েছিল, তবে এটি এখন অ্যান্ড্রয়েড সংস্করণের উচ্চতর স্তরে অপ্রচলিত।
বিপরীতভাবে, আপনি যদি এমন কোনও বৈশিষ্ট্য ব্যবহার করেন যা স্তর xx বা তার আগে অপ্রচলিত হয়ে গিয়েছিল , তবে ব্যবহারগুলি সমর্থন করার জন্য উচ্চতর এপিআই স্তরে (যা এই বৈশিষ্ট্যগুলিকে আর অন্তর্ভুক্ত করে না) সামঞ্জস্যতা কোড স্বয়ংক্রিয়ভাবে ওএস সংস্করণগুলি দ্বারা প্রয়োগ করা হবে না । এইরকম পরিস্থিতিতে, আপনার নিজের কোড বিশেষ ক্ষেত্রে ক্লজ যে পরীক্ষা এপিআই স্তর এবং, যদি অপারেটিং সিস্টেম স্তর শনাক্ত করা একটি উচ্চ এক যে আর দেওয়া এপিআই বৈশিষ্ট্য আপনার কোড বিকল্প বৈশিষ্ট্য ব্যবহার করা আবশ্যক করেছেন থাকতে হবে হয় চলমান অপারেটিং সিস্টেম এর এ উপলব্ধ এপিআই স্তর।
এটি যদি এটি করতে ব্যর্থ হয়, তবে কিছু ইন্টারফেস বৈশিষ্ট্যগুলি কেবল আপনার কোডের মধ্যে ইভেন্টগুলি ট্রিগার করতে পারে না এমন উপস্থিত হতে পারে এবং আপনি একটি সমালোচনামূলক ইন্টারফেস বৈশিষ্ট্যটি হারিয়ে যাবেন যা ব্যবহারকারীর those ঘটনাগুলিকে ট্রিগার করতে এবং তাদের কার্যকারিতা অ্যাক্সেস করার জন্য প্রয়োজন (যেমন রয়েছে নীচে উদাহরণ)।
অন্যান্য উত্তরে যেমন বলা হয়েছে, আপনি যদি আপনার মিনিএসডিভি ভার্সনের চেয়ে উচ্চতর API স্তরে প্রাথমিকভাবে সংজ্ঞায়িত কিছু এপিআই বৈশিষ্ট্য ব্যবহার করতে চান এবং আপনার কোডটি সেই বৈশিষ্ট্যগুলির অনুপস্থিতি সনাক্ত করতে এবং পরিচালনা করতে পারে তা নিশ্চিত করার জন্য পদক্ষেপ নিয়েছিল যদি আপনি minSdkVersion এর চেয়েও বেশি টার্গেটএসডিকি ভার্সন সেট করতে পারেন and টার্গেটএসডিকি ভার্সনের চেয়ে কম স্তর।
কোনও বৈশিষ্ট্য ব্যবহারের জন্য প্রয়োজনীয় ন্যূনতম এপিআই স্তরের জন্য বিশেষত পরীক্ষার জন্য বিকাশকারীদের সতর্ক করার জন্য, সংকলকটিতে একটি ত্রুটি (কেবল একটি সতর্কতা নয়) প্রকাশ করা হবে যদি কোডটি কোনও পদ্ধতিতে কল করে যেটি minSdkVersion এর পরে পরবর্তী API স্তরে সংজ্ঞায়িত হয়েছিল, এমনকি যদি টার্গেটএসডক ভার্সনটি প্রথমে সেই পদ্ধতিটি উপলব্ধ করা হয়েছিল সেই API স্তরের চেয়ে বড় বা সমান। এই ত্রুটি অপসারণ করতে, সংকলক নির্দেশিকা
@TargetApi(nn)
সংকলককে বলে যে সেই নির্দেশের আওতায় থাকা কোডের (যা কোনও পদ্ধতি বা শ্রেণীর আগে থাকবে) কমপক্ষে কোনও এপিআই স্তর থাকার উপর নির্ভর করে যে কোনও পদ্ধতি কল করার আগে কমপক্ষে এনএন এর একটি এপিআই স্তরের জন্য পরীক্ষা করার জন্য লিখিত হয়েছিল । উদাহরণস্বরূপ, নিম্নলিখিত কোডটি এমন একটি পদ্ধতি নির্ধারণ করে যা একটি অ্যাপের মধ্যে কোড থেকে কল করা যেতে পারে যার 11 এরও কম মিনিট minSdkVersion এবং 11 বা ততোধিক টার্গেটএসডিপি ভার্সন রয়েছে:
@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();
}
}
আপনি পারে এছাড়াও একটি উচ্চ targetSdkVersion ডিক্লেয়ার যদি আপনি যে উচ্চ স্তরের পরীক্ষিত হয়েছিল এবং সবকিছু, কাজ এমনকি যদি আপনি হয়েছে তা জানতে চায় না আপনার minSdkVersion বেশী একটি API পর্যায় থেকে কোন বৈশিষ্ট্য ব্যবহার করে। লক্ষ্য মাত্রা থেকে নূন্যতম স্তরের সাথে মানিয়ে নেওয়ার উদ্দেশ্যে সামঞ্জস্যতা কোডটি অ্যাক্সেস করার ওভারহেড এড়াতে কেবল এটিই হবে, যেহেতু আপনি নিশ্চিত করেছেন (পরীক্ষার মাধ্যমে) যে এই জাতীয় কোনও অভিযোজন প্রয়োজন হয়নি।
ঘোষিত টার্গেটএসডিকি ভার্সনের উপর নির্ভর করে এমন একটি ইউআই বৈশিষ্ট্যটির উদাহরণ হ'ল এই অ্যাপ্লিকেশনগুলি এপিআই ১১ এর অধীনে চলমান এবং এর চেয়েও বেশি অ্যাপ্লিকেশনগুলির স্ট্যাটাস বারে 11-এরও কম টার্গেটএসডক ভার্সনযুক্ত অ্যাপ্লিকেশনগুলির স্থিতি দণ্ডে প্রদর্শিত হবে three যদি আপনার অ্যাপ্লিকেশনটির টার্গেটএসডিকি ভার্সন 10 বা নীচে থাকে তবে ধরে নেওয়া হয় যে আপনার অ্যাপ্লিকেশনটির ইন্টারফেসটি ডেডিকেটেড মেনু বোতামটির অস্তিত্বের উপর নির্ভর করে এবং তাই থ্রি-ডট বোতামটি পূর্ববর্তী ডেডিকেটেড হার্ডওয়্যার এবং / অথবা অনস্ক্রিন সংস্করণগুলির স্থান হিসাবে উপস্থিত হবে ওএসের একটি উচ্চতর API স্তর থাকে যার জন্য ডিভাইসে ডেডিকেটেড মেনু বোতামটি আর ধরে নেওয়া হয় না that সেই বোতামটি (যেমন জিঞ্জারব্রেডে দেখা যায়) of তবে, আপনি যদি আপনার অ্যাপ্লিকেশনটির টার্গেটএসডিভি ভার্সন 11 বা ততোধিক স্থানে সেট করেন তবে ধরে নেওয়া হয় যে আপনি সেই স্তরে প্রবর্তিত বৈশিষ্ট্যগুলির সদ্ব্যবহার করেছেন যা উত্সর্গীকৃত মেনু বোতামটি প্রতিস্থাপন করে (ঙ)। জি।, অ্যাকশন বার), বা আপনি অন্যথায় সিস্টেম মেনু বোতামের প্রয়োজনীয়তাটি নষ্ট করেছেন; ফলস্বরূপ, তিন-উল্লম্ব-ডট মেনু "সামঞ্জস্যতা বোতাম" অদৃশ্য হয়ে যায়। সেক্ষেত্রে, ব্যবহারকারী যদি মেনু বোতামটি না খুঁজে পান তবে তিনি এটি টিপতে পারবেন না এবং তার পরিবর্তে এর অর্থ হ'ল আপনার ক্রিয়াকলাপের #CreateOptionsMenu (মেনু) ওভাররাইডটি কখনই না ডাকা যাবে, যার অর্থ আবারও হয়, আপনার অ্যাপের কার্যকারিতার একটি উল্লেখযোগ্য অংশ তার ব্যবহারকারী ইন্টারফেস থেকে বঞ্চিত হতে পারে। অবশ্যই, যদি না আপনি ব্যবহারকারীর এই বৈশিষ্ট্যগুলি অ্যাক্সেস করার জন্য অ্যাকশন বার বা অন্য কোনও বিকল্প উপায় প্রয়োগ করেন না। টি মেনু বোতামটি সন্ধান করতে পারে না, সে এটি টিপতে পারে না এবং তার পরিবর্তে এর অর্থ হ'ল আপনার ক্রিয়াকলাপের #CreateOptionsMenu (মেনু) ওভাররাইডটি কখনই প্রার্থনা করতে পারে না, যার ফলস্বরূপ, আপনার অ্যাপ্লিকেশনটির কার্যকারিতাটির একটি উল্লেখযোগ্য অংশ হতে পারে এর ব্যবহারকারী ইন্টারফেস থেকে বঞ্চিত। অবশ্যই, যদি না আপনি ব্যবহারকারীর এই বৈশিষ্ট্যগুলি অ্যাক্সেস করার জন্য অ্যাকশন বার বা অন্য কোনও বিকল্প উপায় প্রয়োগ করেন না। টি মেনু বোতামটি সন্ধান করতে পারে না, সে এটি টিপতে পারে না এবং তার পরিবর্তে এর অর্থ হ'ল আপনার ক্রিয়াকলাপের #CreateOptionsMenu (মেনু) ওভাররাইডটি কখনই প্রার্থনা করতে পারে না, যার ফলস্বরূপ, আপনার অ্যাপ্লিকেশনটির কার্যকারিতাটির একটি উল্লেখযোগ্য অংশ হতে পারে এর ব্যবহারকারী ইন্টারফেস থেকে বঞ্চিত। অবশ্যই, যদি না আপনি ব্যবহারকারীর এই বৈশিষ্ট্যগুলি অ্যাক্সেস করার জন্য অ্যাকশন বার বা অন্য কোনও বিকল্প উপায় প্রয়োগ করেন না।
minSdkVersion, বিপরীতে, একটি ডিভাইসের OS সংস্করণে আপনার অ্যাপ্লিকেশনটি চালানোর জন্য কমপক্ষে সেই API স্তর থাকা দরকার বলে উল্লেখ করেছে। এটি গুগল প্লে অ্যাপ স্টোরে (এবং সম্ভবত অন্যান্য অ্যাপ্লিকেশন স্টোরগুলিতে) থাকা অবস্থায় কোন ডিভাইসগুলি আপনার অ্যাপ্লিকেশনটি দেখতে এবং ডাউনলোড করতে সক্ষম তা প্রভাবিত করে। এটি উল্লেখ করার একটি উপায় যা আপনার অ্যাপ্লিকেশন ওএস (এপিআই বা অন্যান্য) বৈশিষ্ট্যগুলির উপর নির্ভর করে যা সে স্তরে প্রতিষ্ঠিত হয়েছিল এবং সেই বৈশিষ্ট্যগুলির অভাবে মোকাবেলা করার কোনও গ্রহণযোগ্য উপায় নেই।
আপনার অ্যাপ্লিকেশনটি কেবল ডালভিক ইন্টারপ্রেটারের একটি জেআইটি-সক্ষম সংস্করণে চলবে (যেহেতু জেআইটি প্রবর্তিত হয়েছিল) এটির জন্য এআইপি-সম্পর্কিত নয় এমন কোনও বৈশিষ্ট্যের উপস্থিতি নিশ্চিত করতে মিনিএসডিকি ভার্সন ব্যবহারের একটি উদাহরণ minSdkVersion 8 এ সেট করা হবে would এপিডিয়া স্তরে 8 এন্ড্রয়েড দোভাষীর কাছে)। যেহেতু একটি জেআইটি-সমর্থিত দোভাষীর পক্ষে পারফরম্যান্সটি সেই বৈশিষ্ট্যের অভাবের চেয়ে পাঁচগুণ বেশি হতে পারে, আপনার অ্যাপ্লিকেশন যদি প্রসেসরের ভারী ব্যবহার করে তবে পর্যাপ্ত পারফরম্যান্স নিশ্চিত করতে আপনার এপিআই লেভেল 8 বা ততোধিক প্রয়োজন হতে পারে।
একটি ধারণা সবসময় উদাহরণ সহ আরও ভাল সরবরাহ করা যেতে পারে । অ্যান্ড্রয়েড বিকাশকারী সাইটগুলি এবং সম্পর্কিত স্ট্যাকওভারফ্লো থ্রেডগুলিতে সমস্ত নথি পড়ার পরেও আমি অ্যান্ড্রয়েড ফ্রেমওয়ার্ক উত্স কোডটি অনুসন্ধান না করে এবং কিছু পরীক্ষা-নিরীক্ষা না করা পর্যন্ত এই ধারণাটি বোঝার ক্ষেত্রে আমার সমস্যা হয়েছিল। আমি দুটি উদাহরণ ভাগ করে নেব যা এই ধারণাগুলি পুরোপুরি বুঝতে আমাকে অনেক সাহায্য করেছে।
আপনি অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলের টার্গেট এসডি কেভার্সিয়নে ( ) রেখেছেন তার উপর ভিত্তি করে একটি ডেটপিকারডায়ালগ আলাদা দেখাবে <uses-sdk android:targetSdkVersion="INTEGER_VALUE"/>
। আপনি যদি মানটি 10 বা তার চেয়ে কম সেট করেন তবে আপনার ডেটপিকারডায়ালগটি বামের মতো দেখাবে। অন্যদিকে, আপনি যদি 11 বা তার বেশি মান নির্ধারণ করেন তবে একটি ডেটপিকারডায়ালগটি একই কোড সহ ডানদিকের মতো দেখাবে ।
আমি এই নমুনাটি তৈরি করতে যে কোডটি ব্যবহার করেছি তা অতি-সহজ। 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
) এখানে এবং সেখানে অ্যান্ড্রয়েড ফ্রেমওয়ার্কে পাওয়া যাবে।
আর একটি উদাহরণ ওয়েবভিউ ক্লাস সম্পর্কে । ওয়েবভিউ শ্রেণীর পাবলিক পদ্ধতিগুলি মূল থ্রেডে কল করা উচিত, এবং যদি না হয়, রানটাইম সিস্টেমটি একটি ছুড়ে দেয় RuntimeException
, যখন আপনি 18 বা ততোধিক টার্গেট এসডিকিভার্সন সেট করেন। এই আচরণটি এর উত্স কোড সহ পরিষ্কারভাবে সরবরাহ করা যেতে পারে । এটি ঠিক যেমন লেখা।
sEnforceThreadChecking = context.getApplicationInfo().targetSdkVersion >=
Build.VERSION_CODES.JELLY_BEAN_MR2;
if (sEnforceThreadChecking) {
throw new RuntimeException(throwable);
}
অ্যান্ড্রয়েড ডকটি বলেছেন, " অ্যান্ড্রয়েড প্রতিটি নতুন সংস্করণের সাথে বিকশিত হওয়ার সাথে সাথে কিছু আচরণ এবং এমনকি উপস্থিতি পরিবর্তন হতে পারে ।" সুতরাং, আমরা আচরণ এবং চেহারা পরিবর্তন এবং সেই পরিবর্তন কীভাবে সম্পন্ন হয় তা আমরা দেখেছি।
সংক্ষেপে, অ্যান্ড্রয়েড ডকটি বলেছে " এই বৈশিষ্ট্যটি (টার্গেটএসডিপি ভার্সন) আপনাকে লক্ষ্য সংস্করণটির বিরুদ্ধে পরীক্ষা করেছে এমন সিস্টেমে অবহিত করে এবং টার্গেট সংস্করণে আপনার অ্যাপ্লিকেশনটির সামনের সামঞ্জস্য বজায় রাখতে কোনও সিস্টেমের সামঞ্জস্যতা আচরণকে সক্ষম করা উচিত নয় "। ওয়েবভিউয়ের ক্ষেত্রে এটি সত্যই স্পষ্ট। জেললি_বিইএন_এমআর 2 মূল-মূল থ্রেডে ওয়েবভিউ শ্রেণীর পাবলিক পদ্ধতিতে কল করতে মুক্তি না দেওয়া পর্যন্ত এটি ঠিক ছিল। অ্যান্ড্রয়েড কাঠামোটি JELLY_BEAN_MR2 ডিভাইসে কোনও রানটাইম এক্সেক্সপশন ছুড়ে দিলে তা বাজে কথা। এটি কেবলমাত্র তার আগ্রহের জন্য সদ্য প্রবর্তিত আচরণগুলি সক্ষম করা উচিত নয়, যা মারাত্মক ফলাফলের কারণ হয়। সুতরাং, আমাদের যা করতে হবে তা হ'ল নির্দিষ্ট টার্গেট এসডিকিভার্সনে সবকিছু ঠিক আছে কিনা। আমরা উচ্চতর টার্গেট এসডি কেভার্শন সেট করার সাথে উপস্থিতি বৃদ্ধির মতো সুবিধা পেয়েছি,
সম্পাদনা: অস্বীকৃতি ডেটপিকারডায়ালগ কনস্ট্রাক্টর যা বর্তমান টার্গেট এসডি কেভার্সিয়নের উপর ভিত্তি করে বিভিন্ন থিম সেট করে (যে আমি উপরে দেখিয়েছি) আসলে পরবর্তী প্রতিশ্রুতিতে পরিবর্তন করা হয়েছে । তবুও আমি সেই উদাহরণটি ব্যবহার করেছি, কারণ যুক্তি পরিবর্তিত হয়নি, এবং সেই কোড স্নিপেট স্পষ্টভাবে টার্গেট এসডিকেভার্সন ধারণাটি দেখায়।
যারা সংক্ষিপ্তসার চান তাদের জন্য,
android:minSdkVersion
আপনার অ্যাপ্লিকেশন সমর্থন না হওয়া পর্যন্ত সর্বনিম্ন সংস্করণ। আপনার ডিভাইসে অ্যান্ড্রয়েডের কম সংস্করণ থাকলে অ্যাপটি ইনস্টল হবে না।
সময়,
android:targetSdkVersion
আপনার অ্যাপ্লিকেশনটি চালানোর জন্য ডিজাইন করা পর্যন্ত এটি API স্তর level মানে, আপনার ফোনের সিস্টেমে সামনের সামঞ্জস্যতা বজায় রাখতে কোনও সামঞ্জস্য আচরণ ব্যবহার করার প্রয়োজন নেই কারণ আপনি এই এপিআই পর্যন্ত পরীক্ষা করেছেন।
আপনার অ্যাপ্লিকেশনটি এখনও প্রদত্তের চেয়ে বেশি অ্যান্ড্রয়েড সংস্করণে চলবে targetSdkVersion
তবে অ্যান্ড্রয়েডের সামঞ্জস্যতার আচরণটি শুরু করবে।
ফ্রিবি -
android:maxSdkVersion
আপনার ডিভাইসের এপিআই সংস্করণ যদি বেশি হয় তবে অ্যাপ্লিকেশনটি ইনস্টল হবে না। অর্থাৎ। এটি আপনার সর্বোচ্চ অ্যাপ্লিকেশনটিকে ইনস্টল করার অনুমতি দেয় API
অর্থাত। MinSDK -4, maxSDK - 8, লক্ষ্যSDK - 8 এর জন্য আমার অ্যাপ্লিকেশনটি ন্যূনতম 1.6 তে কাজ করবে তবে আমি এমন বৈশিষ্ট্যও ব্যবহার করেছি যা কেবলমাত্র ২.২ এ সমর্থিত যা এটি যদি একটি ২.২ ডিভাইসে ইনস্টল করা থাকে তবে দৃশ্যমান হবে। এছাড়াও, ম্যাক্সএসডিকে - 8 এর জন্য, এই অ্যাপ্লিকেশনটি API> 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**
//...
}
আপনি সংকলন ত্রুটি পান:
ক্ষেত্রটির জন্য এপিআই স্তর 11 প্রয়োজন (বর্তমান মিনিট 10): android.ographicics. বিটম্যাপফ্যাক্টরি $ বিকল্পগুলি # ইনবিটম্যাপ
অ্যান্ড্রয়েড বিকাশ সরঞ্জামগুলির (এডিটি) সংস্করণ 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**
//...
}
}
এখন কোনও সংকলন ত্রুটি নেই এবং এটি চলবে!
সম্পাদনা: এটি 11 টিরও কম এপিআই স্তরে রানটাইম ত্রুটির ফলস্বরূপ 11 বা তার বেশি এটি কোনও সমস্যা ছাড়াই চলবে। সুতরাং আপনাকে অবশ্যই নিশ্চিত হতে হবে যে আপনি সংস্করণ চেক দ্বারা সুরক্ষিত একটি নির্বাহের পথে এই পদ্ধতিটি কল করেছেন। টার্গেটএপি কেবল আপনাকে এটি সঙ্কলন করতে দেয় তবে আপনি এটি নিজের ঝুঁকিতে চালান।
android:minSdkVersion
এবং android:targetSdkVersion
উভয়ই অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইলে আমাদের ঘোষণা করতে হবে পূর্ণসংখ্যা মান তবে উভয়েরই আলাদা আলাদা বৈশিষ্ট্য রয়েছে।
android:minSdkVersion:
অ্যান্ড্রয়েড অ্যাপ্লিকেশন চালানোর জন্য এটি সর্বনিম্ন প্রয়োজনীয় এপিআই স্তর। যদি আমরা নিম্ন এপিআই সংস্করণে একই অ্যাপটি ইনস্টল করব তবে পার্সার ত্রুটি উপস্থিত হবে, এবং অ্যাপ্লিকেশন সমর্থন না করার সমস্যা উপস্থিত হবে।
android:targetSdkVersion:
টার্গেট এসডিকে সংস্করণটি অ্যাপের টার্গেট এপিআই স্তর নির্ধারণ করতে হয়। যদি এই বৈশিষ্ট্যটি ম্যানিফেস্টে ঘোষণা না করা হয়, তবে minSdk সংস্করণটি আপনার TargetSdk সংস্করণ হবে। এটি সর্বদা সত্য যে "এপিআই-এর সমস্ত উচ্চতর সংস্করণে আমরা অ্যাপ্লিকেশন সমর্থন ইনস্টলেশনটিকে টার্গেটস্পট সংস্করণ হিসাবে ঘোষণা করি"। অ্যাপ্লিকেশন সীমিত টার্গেট করতে আমাদের আমাদের ম্যানিফেস্ট ফাইলটিতে সর্বোচ্চএসডিকি ভার্সন ঘোষণা করতে হবে ...
যদি আপনি এমন অ্যাপ্লিকেশন তৈরি করে যা বিপজ্জনক অনুমতি প্রয়োজন হয় এবং টার্গেট এসডিকে 23 বা ততোধিক সেট করে রাখে তবে আপনার যত্নবান হওয়া উচিত। আপনি যদি রানটাইমটিতে অনুমতিগুলি পরীক্ষা না করেন তবে আপনি একটি সিকিউরিটিএক্সসেপশন পেয়ে যাবেন এবং যদি আপনি কোনও ট্রাই ব্লকের কোড ব্যবহার করেন, উদাহরণস্বরূপ ওপেন ক্যামেরা, আপনি লগক্যাটটি চেক না করে থাকলে ত্রুটি সনাক্ত করা শক্ত হতে পারে।
টার্গেট এসডিকে হ'ল সংস্করণ যা আপনি লক্ষ্য করতে চান এবং নূন্যতম এসডিকে সর্বনিম্ন একটি।