এপিআই বনাম টার্গেটএপি অ্যান্ড্রয়েড টিকা প্রয়োজন


98

কী এর মধ্যে পার্থক্য RequiresApiএবং TargetApi?

কোটলিনে নমুনা:

@RequiresApi(api = Build.VERSION_CODES.M)
@TargetApi(Build.VERSION_CODES.M)
class FingerprintHandlerM() : FingerprintManager.AuthenticationCallback()

দ্রষ্টব্য: FingerprintManager.AuthenticationCallbackএপিআই দরকারM

দ্রষ্টব্য 2: যদি আমি টার্গেটএপি লিন্টটি ত্রুটিযুক্ত করে ব্যর্থ করি class requires api level 23...

উত্তর:


90

@RequiresApi - উল্লেখ করে যে টীকাযুক্ত উপাদানটি কেবলমাত্র প্রদত্ত এপিআই স্তর বা তার চেয়েও বেশি বড় কল করা উচিত।

@TargetApi - ইঙ্গিত করে যে লিন্টের এই ধরণের কোনও প্রদত্ত এপিআই স্তরকে লক্ষ্য হিসাবে বিবেচনা করা উচিত, প্রকল্প টার্গেট যাই হোক না কেন।


48

আমি প্রথমে ধরে নেব আপনার নূন্যতম এপিআই সংস্করণ আপনি যে এপিআই কল করতে যাচ্ছেন তার চেয়ে কম, কারণ এই ধরণের টীকাগুলি কোনও অর্থ দেয়

@RequiresApi(Build.VERSION_CODES.N_MR1)
public void hello() { // codes that call system apis introduced in android N_MR1}

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

@TargetApi

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


4
এই পৃষ্ঠায় উপলব্ধ অন্যান্য উত্তরগুলির চেয়ে আমি এটি সত্যই আরও বিস্তৃত এবং সহজেই বুঝতে পেরেছি। সুতরাং +1।
আনন্দ কুমার ঝা

4
এটি একমাত্র উত্তর যা তত্ত্ব + অনুশীলনের ব্যাখ্যা দেয়, এটি সত্যই গ্রহণ করা উচিত।
দিমিত্রি পাভলখিন

37

আপনি ডকুমেন্টেশনে দেখতে পাচ্ছেন, মাইক যা বলেছিলেন তার অনুরূপ:

উল্লিখিত হয় যে টীকাযুক্ত উপাদানটি কেবলমাত্র প্রদত্ত এপিআই স্তর বা তার চেয়েও বেশি বড় কল করা উচিত।

এটি পুরানো @ টার্গেটএপি টীকা হিসাবে একই, তবে আরও স্পষ্টভাবে প্রকাশ করেছে যে মিনিএসডিকি ভার্সনকে ছাড়িয়ে যাওয়া পদ্ধতির মধ্যে সতর্কতা "দমন" করার পরিবর্তে কলারের পক্ষে এটি একটি প্রয়োজনীয়তা।

আপনি এখানে দেখতে পাচ্ছেন, এই আইডি / লিন্ট থেকে কেবল সতর্কতা অপসারণের পরিবর্তে, এই পদ্ধতিতে কল করার সময় ব্যবহৃত এপিআই যাচাই করার জন্য এটি কলকারীকে বল প্রয়োগ করছে।

আপনি এটি @ ননল বা @ নোট টিকাগুলির সাথে তুলনা করতে পারেন, তারা প্রয়োগ করে যে কলার ফাংশনে নাল মান প্রেরণ করতে / পারছে না।


21

মধ্যে JavaDocs থেকে https://developer.android.com/reference/android/support/annotation/RequiresApi.html :

[@ রিক্যুইয়ারস এপিআই] এটি পুরানো @ টার্গেটএপি টীকা অনুসারে একই রকম, তবে আরও স্পষ্টভাবে প্রকাশ করেছে যে মিনিএসডিপি ভার্সনকে ছাড়িয়ে যাওয়া পদ্ধতির মধ্যে সতর্কতাগুলি "দমন" করার পরিবর্তে কলারের পক্ষে এটি একটি প্রয়োজনীয়তা।

আমি মনে করি তারা কার্যত সমতুল্য তবে @RequiresApiএটি আরও নতুন বলে মনে হচ্ছে এবং আরও কার্যকারিতা অন্তর্ভুক্ত করার জন্য এটি বাড়ানো হওয়ার উচ্চতর সম্ভাবনা রয়েছে।


@ পেইন কেয়ার কেন এটি মিথ্যা?
hamena314

5

উভয়ই হ'ল বৈশিষ্ট্য হ্যান্ডলিংয়ের জন্য যা অন্য এপিআই স্তরগুলিকে প্রভাবিত না করেই নতুন অ্যান্ড্রয়েড এপিআই স্তরে যুক্ত হয়েছে।

আবশ্যক

@RequiresApi(api = Build.VERSION_CODES.*api_code*)

এখানে এটি বলে যে টীকায়িত উপাদানটি কেবলমাত্র প্রদত্ত এপিআই স্তর বা তার চেয়েও বেশি উচ্চারণ করা উচিত। প্রদত্ত এপিআই স্তরের নীচে বর্ণিত উপাদান কল করবে না।

টার্গেটএপি

@TargetApi(Build.VERSION_CODES.*api_code*)

ইঙ্গিত করে যে লিন্টের এই ধরণের কোনও প্রদত্ত এপিআই স্তরকে লক্ষ্য হিসাবে বিবেচনা করা উচিত, প্রকল্প টার্গেট যাই হোক না কেন। কেবলমাত্র নির্দিষ্ট API স্তরের জন্য বোঝানো হয়। অন্য এপিআই স্তরে কল করা হবে না।


আমি যখন ব্যবহার করি তখন @RequiresApiএএস ত্রুটিযুক্ত হিসাবে লাল এবং একটি সম্পূর্ণ ক্লাস সহ একটি পদ্ধতি কলকে আন্ডারলাইন করে।
কুলমাইন্ড

@ কুলমাইন্ড আপনি কি কোনও পদ্ধতির ভিতরে "@RquareApi" ব্যবহার করেছেন?
জীবন ভেনুগোপাল

না, আমি এটি একটি পদ্ধতির আগে যুক্ত করেছি, পছন্দ করি @TargetApi
কুলমাইন্ড

@ কুলমাইন্ড আপনি যে পদ্ধতি থেকে কল করছেন তার "@RequiresApi" ব্যবহার করার চেষ্টা করুন। বা কলটিকে ঘিরে। যদি (বিল্ড.ভি.এস.আর.এস.এন.কি.এন.টি.টি. = বিল্ড.ও ভার্সন_কোডস। * এপিআইকোড *) {// আপনার পদ্ধতির নাম
ven

হ্যাঁ, if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {কাজ করে, তবে পদ্ধতিটিতে আমার এটি ইতিমধ্যে রয়েছে। ধন্যবাদ!
কুলমাইন্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.