অ্যান্ড্রয়েড মিন এসডিকে সংস্করণ বনাম লক্ষ্য এসডিকে সংস্করণ


442

অ্যান্ড্রয়েডের জন্য অ্যাপ্লিকেশনগুলি বিকাশের ক্ষেত্রে, ন্যূনতম এবং টার্গেট এসডিকে সংস্করণটির মধ্যে পার্থক্য কী? মিনি এবং টার্গেটের সংস্করণগুলি একই না হলে গ্রহপাগুলি আমাকে নতুন প্রকল্প তৈরি করতে দেয় না!


1
আমি যা পড়ছি তা থেকে মনে হচ্ছে লক্ষ্য অ্যাপ্লিকেশনটি কীভাবে আপনার অ্যাপ্লিকেশনটি সংকলন করছে তার কোনও প্রভাব নেই। ডিভাইসটি বলার জন্য কেবল এটি রয়েছে যে অ্যাপ্লিকেশনটি চলছে যার ফলে আপনার অ্যাপ্লিকেশনটি সঠিকভাবে কাজ করতে কোনও বিশেষ সামঞ্জস্য বৈশিষ্ট্য সক্ষম করার প্রয়োজন নেই। এটা কী ঠিক? আমার কাছে দেখে মনে হচ্ছে আপনি সংকলন করে প্রচুর পরীক্ষা-নিরীক্ষা না করা অবধি আপনার টার্গেট এসডিকে সংস্করণটি কী তা আপনি জানেন না। সংকলক কেন কেবল আপনার কোডটি দেখতে পারে না এবং বুঝতে পারে না যে আপনার অ্যাপ্লিকেশনটি নিজের মতো করে কোন প্ল্যাটফর্মের সাথে সামঞ্জস্যপূর্ণ?
মাইকেল নভোলো

5
কেন কেউ টার্গেট এসডিকে বৈশিষ্ট্যটি ব্যবহার করে তা উপরের মন্তব্যকারী ভুল বুঝেছেন। আরও তথ্যের জন্য নীচে আমার উত্তর দেখুন।
স্টিভ হ্যালি

157
গৃহীত উত্তর সঠিক নয়। স্টিভ এইচ এর উত্তর পড়ুন দয়া করে
টাইলার

3
@tylerl তবে এটি কোনও ভুল নয় বরং এটি গুগল অ্যান্ড্রয়েড ডকুমেন্টেশনগুলি উল্লেখ করে। আমি কিছু যোগ করা হয়নি।
বিকাশ পাটিদার

3
কার্লের উত্তরটি আমার মতে সর্বাধিক বিস্তারিত এবং সুনির্দিষ্ট।
ইলিয়া কোগান

উত্তর:


136

অ্যান্ড্রয়েড minSdkVersion

অ্যাপ্লিকেশনটি চালানোর জন্য প্রয়োজনীয় ন্যূনতম এপিআই স্তর নির্ধারণকারী একটি পূর্ণসংখ্যা। যদি সিস্টেমের এপিআই স্তরটি এই বৈশিষ্ট্যের ক্ষেত্রে নির্দিষ্ট করা মানের চেয়ে কম হয় তবে অ্যান্ড্রয়েড সিস্টেম অ্যাপ্লিকেশন ইনস্টল করতে ব্যবহারকারীকে আটকাবে। আপনার এই বৈশিষ্ট্যটি সর্বদা ঘোষণা করা উচিত।

অ্যান্ড্রয়েড targetSdkVersion

অ্যাপ্লিকেশনটি লক্ষ্যবস্তু করে এমন একটি এপিআই স্তর নির্ধারণ করে এমন একটি পূর্ণসংখ্যা।

এই অ্যাট্রিবিউট সেটটির সাথে, অ্যাপ্লিকেশনটি বলেছে যে এটি পুরানো সংস্করণগুলিতে চালাতে সক্ষম (ডাউন টু মিনিডডকভিশন) তবে এখানে বর্ণিত সংস্করণটির সাথে স্পষ্টভাবে পরীক্ষা করা হয়েছিল। এই লক্ষ্য সংস্করণটি নির্দিষ্ট করে দেওয়া প্ল্যাটফর্মটিকে লক্ষ্য সংস্করণের জন্য প্রয়োজনীয় নয় এমন সামঞ্জস্যতা সেটিংস অক্ষম করতে দেয় (যা অন্যথায় ফরওয়ার্ড-সামঞ্জস্য বজায় রাখার জন্য চালু করা যেতে পারে) বা পুরানো অ্যাপ্লিকেশনগুলিতে উপলব্ধ নয় এমন নতুন বৈশিষ্ট্য সক্ষম করে enable এর অর্থ এই নয় যে আপনি প্ল্যাটফর্মের বিভিন্ন সংস্করণের জন্য বিভিন্ন বৈশিষ্ট্যগুলি প্রোগ্রাম করতে পারবেন - এটি প্ল্যাটফর্মটিকে কেবল অবহিত করে যে আপনি লক্ষ্য সংস্করণটির বিরুদ্ধে পরীক্ষা করেছেন এবং প্ল্যাটফর্মটি লক্ষ্য সংস্করণের সাথে সামনের সামঞ্জস্য বজায় রাখতে কোনও অতিরিক্ত কাজ করা উচিত নয়।

আরও তথ্যের জন্য এই URL টি দেখুন:

http://developer.android.com/guide/topics/manifest/uses-sdk-element.html


মোটামুটি, আপনি উভয়কে একই জিনিসটিতে সেট করতে যাচ্ছেন। এগুলি বিভিন্ন মূল্যবোধে সেট করা সম্ভবত একটি অস্বাভাবিক পরিস্থিতি হবে।
jjb

66
জেজেবির মন্তব্য সম্পর্কে: আমি একমত নই। আপনার আলাদা মিনিএসডিকে এবং টার্গেটএসডিকে থাকতে পারে এমন অনেকগুলি ভাল কারণ রয়েছে। আরও তথ্যের জন্য আমার উত্তর দেখুন।
স্টিভ হ্যালি

871

প্রশ্নটিতে ওপি দ্বারা পোস্ট করা মন্তব্য (মূলত উল্লেখ করে যে টার্গেটসডিকে কোনও অ্যাপ্লিকেশন সংকলন প্রভাবিত করে না) সম্পূর্ণ ভুল! ভোঁতা হওয়ার জন্য দুঃখিত

সংক্ষেপে, minSDK থেকে আলাদা টার্গেট এসডিকে ঘোষণার উদ্দেশ্য এখানে: এর অর্থ আপনি আপনার সর্বনিম্নের চেয়ে উচ্চ স্তরের এসডিকে বৈশিষ্ট্যগুলি ব্যবহার করছেন তবে আপনি পিছনের সামঞ্জস্যতা নিশ্চিত করেছেন । অন্য কথায়, কল্পনা করুন যে আপনি এমন একটি বৈশিষ্ট্য ব্যবহার করতে চান যা সম্প্রতি সবেমাত্র চালু হয়েছিল, তবে এটি আপনার অ্যাপ্লিকেশনের পক্ষে গুরুত্বপূর্ণ নয়। তারপরে আপনি টার্গেট এসডিকে এমন সংস্করণে সেট করবেন যেখানে এই নতুন বৈশিষ্ট্যটি প্রবর্তিত হয়েছিল এবং সর্বনিম্ন কোনও কিছুর চেয়ে কম হওয়া যাতে প্রত্যেকে আপনার অ্যাপ্লিকেশনটি ব্যবহার করতে পারে।

উদাহরণ দেওয়ার জন্য, ধরুন আপনি একটি অ্যাপ্লিকেশন লিখছেন যা অঙ্গভঙ্গি সনাক্তকরণের ব্যাপক ব্যবহার করে। যাইহোক, প্রতিটি কমান্ড যা ইশারা দ্বারা স্বীকৃতি পেতে পারে সেগুলি একটি বোতাম বা মেনু থেকেও করা যেতে পারে। এই ক্ষেত্রে, অঙ্গভঙ্গিগুলি একটি 'দুর্দান্ত অতিরিক্ত' তবে প্রয়োজনীয় নয়। সুতরাং আপনি এসডিকে লক্ষ্যমাত্রা 7 ("ইক্লেয়ার" সেট করে যখন ইশারা-ডিটেকশন লাইব্রেরি চালু হয়েছিল) এবং ন্যূনতম এসডিকে স্তর 3 ("কাপকেক") করতে হবে যাতে সত্যিকারের পুরানো ফোন সহ লোকেরাও আপনার অ্যাপটি ব্যবহার করতে পারে। আপনাকে যা করতে হবে তা নিশ্চিত করেই আপনার অ্যাপটি ইঙ্গিতটি গ্রন্থাগারটি ব্যবহারের চেষ্টা করার আগে এটি অ্যান্ড্রয়েডের যে সংস্করণটি চালু ছিল তা যাচাই করেছে, এটি উপস্থিত না থাকলে এটি ব্যবহারের চেষ্টা এড়ানোর জন্য। (স্বীকারযোগ্যভাবেই এটি একটি তারিখযুক্ত উদাহরণ, কারণ এখনও কারও কাছে v1.5 ফোন নেই, তবে একটি সময় ছিল যখন ভি 1 এর সাথে সামঞ্জস্যতা বজায় রেখেছিল)।

অন্য উদাহরণ দেওয়ার জন্য, আপনি যদি জিঞ্জারব্রেড বা হানিকম্বের কোনও বৈশিষ্ট্য ব্যবহার করতে চান তবে আপনি এটি ব্যবহার করতে পারেন। কিছু লোক শীঘ্রই আপডেটগুলি পাবেন, তবে অনেকেই, বিশেষত পুরানো হার্ডওয়্যার সহ, তারা কোনও নতুন ডিভাইস না কিনে ইক্লেয়ারের সাথে আটকে থাকতে পারে। এটি আপনাকে কয়েকটি দুর্দান্ত নতুন বৈশিষ্ট্য ব্যবহার করতে দিবে, তবে আপনার সম্ভাব্য বাজারের অংশটি বাদ দিয়ে।

অ্যান্ড্রয়েড বিকাশকারীদের ব্লগ থেকে সত্যিই একটি ভাল নিবন্ধ আছেএই বৈশিষ্ট্যটি কীভাবে ব্যবহার করতে হবে এবং বিশেষত, আমি উপরে উল্লিখিত কোডটি "বৈশিষ্ট্যটি ব্যবহারের আগে এটির উপস্থিতি রয়েছে" কীভাবে ডিজাইন করব সে সম্পর্কে রয়েছে।

ও.পি. কে: আমি মূলত ভবিষ্যতে এই প্রশ্নটির পিছনে যে কেউ হোঁচট খেয়ে পড়েছে তার সুবিধার জন্য এটি লিখেছি, কারণ আমি বুঝতে পারি যে আপনার প্রশ্নটি অনেক আগে জিজ্ঞাসা করা হয়েছিল।


2
আপনি কীভাবে লক্ষ্যবস্তু এসডি কেভার্সনটি অ্যাপ্লিকেশন সংকলনকে প্রভাবিত করে তার সুনির্দিষ্ট ব্যাখ্যা দিতে পারেন? কারণ সংকলন সংস্করণ আবার একটি কনফিগারেশন যা আপনার সেট আপ করা দরকার। আগাম ধন্যবাদ
hnviet

9
আমি মনে করি স্টিভ ম্যানিফেস্টে এক্সএমএল অ্যাট্রিবিউট অ্যান্ড্রয়েডের মধ্যে: টার্গেটএসডক ভার্সন (যার কোন সত্যই বলা নেই) এবং প্রকল্পের মধ্যে থাকা টার্গেট প্রোপার্টিটির মধ্যে রয়েছে। কোডগুলি কী সংকলন করা উচিত তার বিপরীতে উপস্থিত রয়েছে file আমি আবার বলব, এক্সএমএল অ্যাটর টার্গেটএসডিকি ভার্সনের কোনও আসল অর্থ নেই !!!
অ্যালিক্লিজিন-কিলাকা

3
@ কিলাকা অর্ধেক আপনার মন্তব্য বৈধ, তবে অন্য অর্ধেকটি কেবল ভুল। আমি ধরে নিচ্ছিলাম যে এক্সএমএল এবং প্রজেক্টে প্রোপার্টি (এক্সিলিপসে ডান ক্লিক-> বৈশিষ্ট্যগুলির মাধ্যমেও অ্যাক্সেসযোগ্য) কেউ একই মান ব্যবহার করে, তাই আপনি বিভিন্ন জায়গায় সংরক্ষণ করেছেন তা উল্লেখ করার জন্য আপনি সঠিক। যাইহোক, অ্যান্ড্রয়েড মার্কেট অবশ্যই xML অ্যাট্রিবিউট টার্গেটএসডিকি ভার্সনে কোন মান রাখবে সে সম্পর্কে অবশ্যই যত্নশীল। উদাহরণস্বরূপ, এটি হਨੀকম্ব এবং উপরের অ্যাপ্লিকেশনগুলির জন্য আপনার কাছে অ্যাকশনবার বা একটি সামঞ্জস্যতা মেনু থাকা উচিত কিনা তা নির্ধারণ করার সময় এটি ব্যবহার করে।
স্টিভ হ্যালি

2
@ নাট আমি এই 'কনভোলিউড কোড' রানটাইমকে কতটা ধীর করে তুলতে পারি তা বলতে পারি না তবে আমি মনে করি কোড জটিলতার ক্ষেত্রে একাধিক এপিপি বিভক্ত করা এবং ব্যবহার করা আরও খারাপ। এখন আপনি প্রতিটি রফতানি করার আগে আপনার উত্স নিয়ন্ত্রণে আরও শাখাগুলির মধ্যে মন্তব্য করতে বা আউট করতে বা মার্জ করতে ভুলবেন না। গত অক্টোবরে অ্যান্ড্রয়েড সম্মেলনে যখন তারা বলেছিল যে তারা একাধিক এপিএল সিস্টেমকে ছাড় হিসাবে চালু করেছে, তবে খুশি হয়েছিল যে খুব কম লোকই এটি ব্যবহার করছে।
স্টিভ হ্যালি

2
তবে একাধিক সংস্করণ পরিচালনা করা হ'ল সংস্করণ নিয়ন্ত্রণ সিস্টেমগুলি কী জন্য তৈরি করা হয়। এটি বিকাশকারীদের সাথে পরিচিত (বেশিরভাগ সফ্টওয়্যার, মোবাইল বা না, বিভিন্ন প্ল্যাটফর্মের জন্য কিছুটা আলাদা সংস্করণ প্রকাশ করে)। এই অ্যান্ড্রয়েড "বৈশিষ্ট্য" জটিলতা হ্রাস করছে না। এটি কেবল চলমান অ্যাপ্লিকেশনটিতে এটি চাপ দিচ্ছে, এবং এই থ্রেড দ্বারা প্রমাণিত হয়েছে, বিভ্রান্তি তৈরি করছে। অবশ্যই, গুগল খুশি হতে চলেছে যে খুব কম লোকই এটি ব্যবহার করছে ... যা তাদের বলতে সহায়তা করে, "দেখুন, আমরা প্রথমে এই বাদ দেওয়ার জন্য সঠিক ছিলাম"। এছাড়াও, কিছু এটি ব্যবহার করে না কারণ তারা এখনও জানেন না যে এটি বিদ্যমান।
Nate

97

আপনি যখন টার্নডএসডিভিভার্সন = "এক্সএক্সএক্স" সেট করেন, আপনি যাচাই করে যাচ্ছেন যে আপনার অ্যাপ্লিকেশনটি ঠিকঠাকভাবে কাজ করছে (উদাহরণস্বরূপ, পুরোপুরি এবং সফলভাবে পরীক্ষা করা হয়েছে) এপিআই স্তরের এক্সএক্সএক্সে।

এক্সএক্সের উপরে একটি এপিআই স্তরে চলমান অ্যান্ড্রয়েডের একটি সংস্করণ আপনার উপর নির্ভর করে এমন কোনও বৈশিষ্ট্য সমর্থন করার জন্য স্বয়ংক্রিয়ভাবে সামঞ্জস্যতা কোড প্রয়োগ করবে যা এপিআই লেভেল এক্সএক্স এর আগে বা তার আগে পাওয়া গিয়েছিল, তবে এটি এখন অ্যান্ড্রয়েড সংস্করণের উচ্চতর স্তরে অপ্রচলিত।

বিপরীতভাবে, আপনি যদি এমন কোনও বৈশিষ্ট্য ব্যবহার করেন যা স্তর 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 বা ততোধিক প্রয়োজন হতে পারে।


টার্গেটএপি নির্দেশিকা ব্যবহারের জন্য নির্দেশাবলীর জন্য ধন্যবাদ।
সমীর 105

@ কার্ল এর অর্থ কি এর অর্থ হ'ল আমি সর্বদা আমার minSdkVersion এর চেয়ে বেশি সংস্করণে টার্গেটএসডিকি ভার্সন সেট করতে পারি (বিশেষত সেই UI বর্ধিতকরণগুলি) কোনও পরীক্ষার প্রয়োজন ছাড়াই ( প্রতি সেঃ ) যতক্ষণ না আমি আমার minSdk সংস্করণে কেবলমাত্র API এর উপলব্ধ ব্যবহারের জন্য আমার কোডবেসকে সীমাবদ্ধ করি? ?
দামিলোলা ওলুওকেরে

ওলোওকেরে ইমানুয়েল: আমি যদি আপনাকে সঠিকভাবে বুঝতে পারি, তবে না, এর অর্থ এই নয়। আমার উত্তর হিসাবে বলা আছে, "আপনি যদি এমন কোনও বৈশিষ্ট্য ব্যবহার করেন যা স্তর xx বা তার আগে অচল হয়ে পড়েছিল, তবে উচ্চতর এপিআই স্তরে ওএস সংস্করণগুলি দ্বারা সামঞ্জস্যতা কোড স্বয়ংক্রিয়ভাবে প্রয়োগ করা হবে না।" সুতরাং যদি আপনার কোড এমন কোনও বৈশিষ্ট্য ব্যবহার করে যা এপিআই লেভেল 8 এ উপলব্ধ হয়ে ওঠে, এবং সেই বৈশিষ্ট্যটি 10 ​​স্তরের অচল হয়ে যায়, তবে আপনি যদি 10 এর উপরে যে কোনও কিছুতে আপনার টার্গেটএসডিভি ভার্সন বাড়িয়ে দেন তবে আপনার ব্যবহারগুলি সামঞ্জস্য করার জন্য কোনও সামঞ্জস্য কোড উপলব্ধ হবে না নতুন ওএস স্তরে সেই বৈশিষ্ট্য।
কার্ল

(অবিরত): আপনি যদি আপনার টার্গেটএসডিভি ভার্সন ৮ স্তরে ছেড়ে যান, তবে আপনি উচ্চ স্তরের প্রবর্তিত বৈশিষ্ট্যগুলি ব্যবহার করতে সক্ষম না হবেন, সেখানে চলার সময় আপনার স্তর 8 স্তরের বৈশিষ্ট্যগুলির ব্যবহারের অনুমতি দেওয়ার জন্য সামঞ্জস্যতা কোড প্রয়োগ করা হবে ওএসের উচ্চতর স্তর।
কার্ল

(অবিরত): এটিকে এভাবে ভাবুন: ধরুন যে আপনি যখন অ্যান্ড্রয়েডের সর্বোচ্চ মাত্রা উপলব্ধ হন তখন আপনি কিছু কোড লিখেছিলেন এবং আপনি আপনার টার্গেট এসডিকে ভার্সনটি 8 তে সেট করেছেন (কারণ সে সময় এটি ছিল সর্বোচ্চ স্তর)। এখন, অ্যান্ড্রয়েডের কয়েকটি নতুন প্রকাশ প্রকাশিত হয়েছে, এবং আপনার ব্যবহৃত স্তরের 8 বৈশিষ্ট্যগুলির কিছু উপলভ্য নয়। এখনও আপনার পুরানো APK থাকা ব্যবহারকারীদের ত্রুটিগুলি অনুভব করা উচিত নয়, তাদের উচিত? সুতরাং, তারা যাতে না হয় তা নিশ্চিত করার জন্য কোনও ব্যবহারকারী ওএসের নতুন সংস্করণ চালাওয়ার সময় যখন অনুরোধ করা হয় তখন তারা যুক্তিযুক্ত কিছু করার জন্য আপনার পুরানো এপিআই কলগুলিকে সামঞ্জস্য করার জন্য সামঞ্জস্যতা কোডটি স্বয়ংক্রিয়ভাবে প্রয়োগ হয়।
কার্ল

50

একটি ধারণা সবসময় উদাহরণ সহ আরও ভাল সরবরাহ করা যেতে পারে । অ্যান্ড্রয়েড বিকাশকারী সাইটগুলি এবং সম্পর্কিত স্ট্যাকওভারফ্লো থ্রেডগুলিতে সমস্ত নথি পড়ার পরেও আমি অ্যান্ড্রয়েড ফ্রেমওয়ার্ক উত্স কোডটি অনুসন্ধান না করে এবং কিছু পরীক্ষা-নিরীক্ষা না করা পর্যন্ত এই ধারণাটি বোঝার ক্ষেত্রে আমার সমস্যা হয়েছিল। আমি দুটি উদাহরণ ভাগ করে নেব যা এই ধারণাগুলি পুরোপুরি বুঝতে আমাকে অনেক সাহায্য করেছে।

আপনি অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলের টার্গেট এসডি কেভার্সিয়নে ( ) রেখেছেন তার উপর ভিত্তি করে একটি ডেটপিকারডায়ালগ আলাদা দেখাবে <uses-sdk android:targetSdkVersion="INTEGER_VALUE"/>। আপনি যদি মানটি 10 ​​বা তার চেয়ে কম সেট করেন তবে আপনার ডেটপিকারডায়ালগটি বামের মতো দেখাবে। অন্যদিকে, আপনি যদি 11 বা তার বেশি মান নির্ধারণ করেন তবে একটি ডেটপিকারডায়ালগটি একই কোড সহ ডানদিকের মতো দেখাবে ।

ডেটপিকারডায়ালগ লক্ষ্য এসডিকিভার্সন 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 ডিভাইসে কোনও রানটাইম এক্সেক্সপশন ছুড়ে দিলে তা বাজে কথা। এটি কেবলমাত্র তার আগ্রহের জন্য সদ্য প্রবর্তিত আচরণগুলি সক্ষম করা উচিত নয়, যা মারাত্মক ফলাফলের কারণ হয়। সুতরাং, আমাদের যা করতে হবে তা হ'ল নির্দিষ্ট টার্গেট এসডিকিভার্সনে সবকিছু ঠিক আছে কিনা। আমরা উচ্চতর টার্গেট এসডি কেভার্শন সেট করার সাথে উপস্থিতি বৃদ্ধির মতো সুবিধা পেয়েছি,

সম্পাদনা: অস্বীকৃতি ডেটপিকারডায়ালগ কনস্ট্রাক্টর যা বর্তমান টার্গেট এসডি কেভার্সিয়নের উপর ভিত্তি করে বিভিন্ন থিম সেট করে (যে আমি উপরে দেখিয়েছি) আসলে পরবর্তী প্রতিশ্রুতিতে পরিবর্তন করা হয়েছে । তবুও আমি সেই উদাহরণটি ব্যবহার করেছি, কারণ যুক্তি পরিবর্তিত হয়নি, এবং সেই কোড স্নিপেট স্পষ্টভাবে টার্গেট এসডিকেভার্সন ধারণাটি দেখায়।


2
"আমরা উচ্চতর টার্গেট এসডি কেভার্সন নির্ধারণের সাথে চেহারা বৃদ্ধির মতো সুবিধা পেয়েছি তবে এটি আমাদের দায়িত্ব নিয়ে আসে" " যদি তারা ডক্সে এই লাইনটি উল্লেখ করে থাকে তবে আমি এটি সন্ধান করব না।
পাল্প ফিকশন

@ 김준호 আমার দুটি প্রশ্ন রয়েছে: ১) উপরের ডেটপিকারের উদাহরণে, আপনি যদি সর্বশেষ অ্যান্ড্রয়েড (যেমন এপিআই 22) চালিত কোনও ডিভাইসে অ্যাপ্লিকেশন চালিয়ে 10 বা তার চেয়ে কম করে সেট করে থাকেন এবং ডেটপিকারটি এখনও পুরানোটির মতো দেখাবে বাম ছবিতে? ২) এর অর্থ কি এই যে আমি আমার কোডবেসকে সীমাবদ্ধ না রেখে যতক্ষণ না কোনও পরীক্ষার ( প্রতি সেউ) প্রয়োজন ছাড়াই আমার মিনিএসডিকি ভার্সনের চেয়ে উচ্চতর কোনও সংস্করণে (যেমন, উঁচু এপিআই থেকে সেই ক্রাইপি ডেটপিকারের মতো U UI বর্ধনগুলি অর্জন করতে) টার্গেটএসডিকে ভার্সন সেট করতে পারি Does আমার minSdkVersion এ উপলব্ধ কেবলমাত্র API গুলি ব্যবহার করতে চান?
দামিলোলা ওলুওকেরে

@ ওলুওকেরে 1) হ্যাঁ। শুধু এটির জন্য চালান। 2) আপনি টার্গেট এসডিকে ভার্সন সেট করতে পারেন আপনার পছন্দসই সংস্করণ যদি এটি মিনিএসডি কে ভার্সনের চেয়ে বেশি হয়। তবে লক্ষ্যযুক্ত সংস্করণে এটি ঠিক আছে কিনা তা এখনও আপনার পরীক্ষা করা দরকার। আপনি minSDKVersion api এ লেগে থাকবেন না তা বিবেচ্য নয়। ডেটপিকার উদাহরণটি চিন্তা করুন।
29

আপনি ন্যূনতম সংস্করণ 14 এবং টার্গেট এসডিকে সংস্করণ 16 এ সেট করেছেন এমন কোনও ক্ষেত্রে ভাবেন, এবং আপনি কেবল 14 বা ততোধিকের জন্য এপিস ব্যবহার করেছেন। বলুন আপনি টেক্সটভিউটি ব্যবহার করেছেন যা এপিআই স্তরের সাথে পরিচয় করিয়ে দেওয়া হয়? কি হবে?
4

@। ধন্যবাদ তবে আপনার দ্বিতীয় উত্তরের জন্য আমি বিভ্রান্ত। যদি আমার কোডগুলি minSdkVersion এ কেবলমাত্র এপিআই ব্যবহার করে এবং আমি উচ্চতর এসডিকে লক্ষ্যবস্তু করি তবে আমার কেন পরীক্ষার দরকার? ডেটপিকার উদাহরণটির কথা চিন্তা করে, উচ্চ টার্গেটএসডিপি ভার্সন কেবল ডেটপিকার উইজেটটির চেহারা উন্নত করেছে এবং কিছুই ভেঙে যায় না কারণ আমি এআইপি-তে minSdkVersion এর চেয়ে বেশি কোনও কোড ব্যবহার করি নি। আমি কেবল উচ্চতর টার্গেটএসডিপি ভার্সন চাই কারণ আমি উইজেটগুলির নতুন চেহারা এবং অনুভূতি চাই, এমন নয় যে আমি উচ্চতর
এপিআইতে

21

যারা সংক্ষিপ্তসার চান তাদের জন্য,

android:minSdkVersion

আপনার অ্যাপ্লিকেশন সমর্থন না হওয়া পর্যন্ত সর্বনিম্ন সংস্করণ। আপনার ডিভাইসে অ্যান্ড্রয়েডের কম সংস্করণ থাকলে অ্যাপটি ইনস্টল হবে না।

সময়,

android:targetSdkVersion

আপনার অ্যাপ্লিকেশনটি চালানোর জন্য ডিজাইন করা পর্যন্ত এটি API স্তর level মানে, আপনার ফোনের সিস্টেমে সামনের সামঞ্জস্যতা বজায় রাখতে কোনও সামঞ্জস্য আচরণ ব্যবহার করার প্রয়োজন নেই কারণ আপনি এই এপিআই পর্যন্ত পরীক্ষা করেছেন।

আপনার অ্যাপ্লিকেশনটি এখনও প্রদত্তের চেয়ে বেশি অ্যান্ড্রয়েড সংস্করণে চলবে targetSdkVersionতবে অ্যান্ড্রয়েডের সামঞ্জস্যতার আচরণটি শুরু করবে।

ফ্রিবি -

android:maxSdkVersion

আপনার ডিভাইসের এপিআই সংস্করণ যদি বেশি হয় তবে অ্যাপ্লিকেশনটি ইনস্টল হবে না। অর্থাৎ। এটি আপনার সর্বোচ্চ অ্যাপ্লিকেশনটিকে ইনস্টল করার অনুমতি দেয় API

অর্থাত। MinSDK -4, maxSDK - 8, লক্ষ্যSDK - 8 এর জন্য আমার অ্যাপ্লিকেশনটি ন্যূনতম 1.6 তে কাজ করবে তবে আমি এমন বৈশিষ্ট্যও ব্যবহার করেছি যা কেবলমাত্র ২.২ এ সমর্থিত যা এটি যদি একটি ২.২ ডিভাইসে ইনস্টল করা থাকে তবে দৃশ্যমান হবে। এছাড়াও, ম্যাক্সএসডিকে - 8 এর জন্য, এই অ্যাপ্লিকেশনটি API> 8 ব্যবহার করে ফোনে ইনস্টল করবে না।

এই উত্তরটি লেখার সময়, অ্যান্ড্রয়েড ডকুমেন্টেশনগুলি এটি ব্যাখ্যা করার জন্য দুর্দান্ত কাজ করছে না। এখন এটি খুব ভালভাবে ব্যাখ্যা করা হয়েছে। এটি এখানে দেখুন


'আপনার অ্যাপ্লিকেশনটি উত্তরাধিকার সূত্রে প্রাপ্ত বৈশিষ্ট্যগুলির থেকে সর্বোচ্চ সংস্করণ' ' : এটা ভুল. এটি সর্বনিম্ন সংস্করণ যেখানে থেকে আপনার অ্যাপ্লিকেশনটি উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছে - অর্থাত্ প্রথম সংস্করণ যাতে আপনার অ্যাপ্লিকেশন দ্বারা প্রয়োজনীয় বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে।
রিচিএইচ এইচ

ইংরেজি কৌতূহলপূর্ণ ভাষা। উত্তরে প্রদত্ত আমার উদাহরণটি পড়ুন। আমি ধরে নিচ্ছি যে আমি সেখানে অর্থবোধ করছি। :)
দর্পণ

আমি প্যাডেন্টিক হচ্ছি না এবং ইংরেজি এই গ্রুপের সমর্থন ভাষা। কৌতুকপূর্ণ বা না বলা এটির "সর্বাধিক সংস্করণ যেখানে অ্যাপ্লিকেশন বৈশিষ্ট্যগুলি সমর্থন করে" কেবল ভুল নয়: এর সম্পূর্ণ 180 ডিগ্রি ভুল। এটি প্রথম বা ন্যূনতম সংস্করণ যা ফ্যালব্যাক সামঞ্জস্যতা মোড / লাইব্রেরি ব্যবহার না করেই আপনার অ্যাপ্লিকেশনটির সমস্ত উদ্দেশ্যযুক্ত বৈশিষ্ট্যগুলিকে সমর্থন করে।
রিচিএইচএইচ

9

আপনি উদাহরণস্বরূপ কিছু সংকলন ত্রুটি পেতে যদি:

<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 বা তার বেশি এটি কোনও সমস্যা ছাড়াই চলবে। সুতরাং আপনাকে অবশ্যই নিশ্চিত হতে হবে যে আপনি সংস্করণ চেক দ্বারা সুরক্ষিত একটি নির্বাহের পথে এই পদ্ধতিটি কল করেছেন। টার্গেটএপি কেবল আপনাকে এটি সঙ্কলন করতে দেয় তবে আপনি এটি নিজের ঝুঁকিতে চালান।


1
আমি এই সম্পর্কে বিভ্রান্ত। আপনি যদি এসডিকে 10 দিয়ে কোনও সিস্টেমে আপনার অ্যাপটি চালিয়ে যান তবে কি হবে?
ফ্রান মারজোয়া

এটি অপশনগুলি.বিটম্যাপ বিবৃতি এবং অ্যাপ্লিকেশনটির কাজ করা উচিত work
নিনজা কোডার

1

android:minSdkVersionএবং android:targetSdkVersionউভয়ই অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইলে আমাদের ঘোষণা করতে হবে পূর্ণসংখ্যা মান তবে উভয়েরই আলাদা আলাদা বৈশিষ্ট্য রয়েছে।

android:minSdkVersion:অ্যান্ড্রয়েড অ্যাপ্লিকেশন চালানোর জন্য এটি সর্বনিম্ন প্রয়োজনীয় এপিআই স্তর। যদি আমরা নিম্ন এপিআই সংস্করণে একই অ্যাপটি ইনস্টল করব তবে পার্সার ত্রুটি উপস্থিত হবে, এবং অ্যাপ্লিকেশন সমর্থন না করার সমস্যা উপস্থিত হবে।

android:targetSdkVersion:টার্গেট এসডিকে সংস্করণটি অ্যাপের টার্গেট এপিআই স্তর নির্ধারণ করতে হয়। যদি এই বৈশিষ্ট্যটি ম্যানিফেস্টে ঘোষণা না করা হয়, তবে minSdk সংস্করণটি আপনার TargetSdk সংস্করণ হবে। এটি সর্বদা সত্য যে "এপিআই-এর সমস্ত উচ্চতর সংস্করণে আমরা অ্যাপ্লিকেশন সমর্থন ইনস্টলেশনটিকে টার্গেটস্পট সংস্করণ হিসাবে ঘোষণা করি"। অ্যাপ্লিকেশন সীমিত টার্গেট করতে আমাদের আমাদের ম্যানিফেস্ট ফাইলটিতে সর্বোচ্চএসডিকি ভার্সন ঘোষণা করতে হবে ...


0

যদি আপনি এমন অ্যাপ্লিকেশন তৈরি করে যা বিপজ্জনক অনুমতি প্রয়োজন হয় এবং টার্গেট এসডিকে 23 বা ততোধিক সেট করে রাখে তবে আপনার যত্নবান হওয়া উচিত। আপনি যদি রানটাইমটিতে অনুমতিগুলি পরীক্ষা না করেন তবে আপনি একটি সিকিউরিটিএক্সসেপশন পেয়ে যাবেন এবং যদি আপনি কোনও ট্রাই ব্লকের কোড ব্যবহার করেন, উদাহরণস্বরূপ ওপেন ক্যামেরা, আপনি লগক্যাটটি চেক না করে থাকলে ত্রুটি সনাক্ত করা শক্ত হতে পারে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.