নন-SDK ইন্টারফেসে সীমাবদ্ধতা

{% যদি dynamic_data.request.is_prod %} {% setvar lorry_URL_root %}https://dl.google.com{% endsetvar %} {% অন্য %} {% setvar lorry_URL_root %}https://lorry-staging-payloadserver.corp.google.com{% endsetvar %} {% যদি শেষ %}

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

SDK এবং নন-SDK ইন্টারফেসের মধ্যে পার্থক্য করুন

সাধারণভাবে বলতে গেলে, পাবলিক SDK ইন্টারফেসগুলি হল সেইসব ইন্টারফেস যা অ্যান্ড্রয়েড ফ্রেমওয়ার্ক প্যাকেজ ইনডেক্সে নথিভুক্ত পাওয়া যায়। নন-SDK ইন্টারফেস পরিচালনা একটি বাস্তবায়ন বিবরণ যা API দ্বারা বাদ দেওয়া হয়, তাই এই ইন্টারফেসগুলি কোনও বিজ্ঞপ্তি ছাড়াই পরিবর্তন সাপেক্ষে।

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

নন-SDK API তালিকা

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

আপনার ডেভেলপমেন্ট ওয়ার্কফ্লোতে নন-SDK বিধিনিষেধের প্রভাব কমাতে, নন-SDK ইন্টারফেসগুলিকে তালিকায় ভাগ করা হয়েছে যা নির্ধারণ করে যে তাদের ব্যবহার কতটা কঠোরভাবে সীমাবদ্ধ, কোন API স্তর লক্ষ্য করা হচ্ছে তার উপর নির্ভর করে। নিম্নলিখিত সারণীতে এই প্রতিটি তালিকা বর্ণনা করা হয়েছে:

তালিকা কোড ট্যাগ বিবরণ
ব্লকলিস্ট
  • blocked
  • বন্ধ করা হয়েছে: blacklist
নন-SDK ইন্টারফেস যা আপনি আপনার অ্যাপের টার্গেট API লেভেল নির্বিশেষে ব্যবহার করতে পারবেন না। যদি আপনার অ্যাপ এই ইন্টারফেসগুলির একটিতে অ্যাক্সেস করার চেষ্টা করে, তাহলে সিস্টেম একটি ত্রুটি দেখাবে
শর্তসাপেক্ষে অবরুদ্ধ
  • max-target-x
  • বন্ধ করা হয়েছে: greylist-max-x

অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) থেকে শুরু করে, প্রতিটি এপিআই লেভেলে নন-এসডিকে ইন্টারফেস থাকে যা কোনও অ্যাপ যখন সেই এপিআই লেভেলকে টার্গেট করে তখন সীমাবদ্ধ থাকে।

এই তালিকাগুলিকে সর্বোচ্চ API স্তর ( max-target-x ) দ্বারা লেবেল করা হয় যা একটি অ্যাপ লক্ষ্য করতে পারে, তারপর অ্যাপটি সেই তালিকার নন-SDK ইন্টারফেসগুলি আর অ্যাক্সেস করতে পারবে না। উদাহরণস্বরূপ, একটি নন-SDK ইন্টারফেস যা Android Pie তে ব্লক করা হয়নি কিন্তু এখন Android 10 তে ব্লক করা হয়েছে তা max-target-p ( greylist-max-p ) তালিকার অংশ, যেখানে "p" মানে Pie বা Android 9 (API স্তর 28)।

যদি আপনার অ্যাপটি এমন একটি ইন্টারফেস অ্যাক্সেস করার চেষ্টা করে যা আপনার টার্গেট API স্তরের জন্য সীমাবদ্ধ, তাহলে সিস্টেমটি এমন আচরণ করবে যেন APIটি ব্লকলিস্টের অংশ

অসমর্থিত
  • unsupported
  • বন্ধ করা হয়েছে: greylist
SDK-র বাইরের ইন্টারফেসগুলি যেগুলি অবাধ এবং আপনার অ্যাপ ব্যবহার করতে পারে। তবে মনে রাখবেন যে এই ইন্টারফেসগুলি অসমর্থিত এবং কোনও বিজ্ঞপ্তি ছাড়াই পরিবর্তন সাপেক্ষে। আশা করা যায় যে এই ইন্টারফেসগুলি ভবিষ্যতের Android সংস্করণগুলিতে max-target-x তালিকার মধ্যে শর্তসাপেক্ষে ব্লক করা হবে।
SDK সম্পর্কে
  • public-api এবং sdk উভয়ই
  • বন্ধ করা হয়েছে: public-api এবং whitelist উভয়ই
ইন্টারফেস যা অবাধে ব্যবহার করা যেতে পারে এবং এখন আনুষ্ঠানিকভাবে নথিভুক্ত অ্যান্ড্রয়েড ফ্রেমওয়ার্ক প্যাকেজ ইনডেক্সের অংশ হিসাবে সমর্থিত।
পরীক্ষা API গুলি
  • test-api
অভ্যন্তরীণ সিস্টেম পরীক্ষার জন্য ব্যবহৃত ইন্টারফেস, যেমন API যা সামঞ্জস্যতা পরীক্ষা স্যুট (CTS) এর মাধ্যমে পরীক্ষা সহজতর করে। টেস্ট API গুলি SDK এর অংশ নয়Android 11 (API স্তর 30) থেকে শুরু করে , টেস্ট API গুলি ব্লকলিস্টে অন্তর্ভুক্ত করা হয়, তাই অ্যাপগুলিকে তাদের লক্ষ্য API স্তর নির্বিশেষে সেগুলি ব্যবহার করার অনুমতি দেওয়া হয় না। সমস্ত টেস্ট API অসমর্থিত এবং প্ল্যাটফর্ম API স্তর নির্বিশেষে বিজ্ঞপ্তি ছাড়াই পরিবর্তন সাপেক্ষে।

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

কোন ইন্টারফেস কোন তালিকার অন্তর্গত তা নির্ধারণ করুন

নন-SDK ইন্টারফেসের তালিকাগুলি প্ল্যাটফর্মের অংশ হিসেবে তৈরি করা হয়েছে। প্রতিটি অ্যান্ড্রয়েড রিলিজ সম্পর্কে তথ্যের জন্য নিম্নলিখিত বিভাগগুলি দেখুন।

অ্যান্ড্রয়েড ১৬

অ্যান্ড্রয়েড ১৬ (এপিআই লেভেল ৩৬) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকা বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: 9102af02fe6ab68b92464bdff5e5b09f3bd62c65d1130aaf85d3296f17d38074

Android 16-এ নন-SDK API তালিকার পরিবর্তন সম্পর্কে আরও জানতে, Android 16-এ নন-SDK ইন্টারফেস সীমাবদ্ধতার আপডেটগুলি দেখুন।

অ্যান্ড্রয়েড ১৫

অ্যান্ড্রয়েড ১৫ (এপিআই লেভেল ৩৫) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকা বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: 40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9

Android 15-এ নন-SDK API তালিকার পরিবর্তন সম্পর্কে আরও জানতে, Android 15-এ নন-SDK ইন্টারফেস সীমাবদ্ধতার আপডেটগুলি দেখুন।

অ্যান্ড্রয়েড ১৪

অ্যান্ড্রয়েড ১৪ (এপিআই লেভেল ৩৪) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকা বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: 7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f

Android 14-এ নন-SDK API তালিকার পরিবর্তন সম্পর্কে আরও জানতে, Android 14-এ নন-SDK ইন্টারফেস সীমাবদ্ধতার আপডেট দেখুন।

অ্যান্ড্রয়েড ১৩

অ্যান্ড্রয়েড ১৩ (এপিআই লেভেল ৩৩) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকা বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: 233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3

অ্যান্ড্রয়েড ১৩-তে নন-এসডিকে এপিআই তালিকার পরিবর্তন সম্পর্কে আরও জানতে, যার মধ্যে অ্যান্ড্রয়েড ১৩-তে শর্তসাপেক্ষে ব্লক করা এপিআইগুলির জন্য প্রস্তাবিত পাবলিক এপিআই বিকল্পগুলি অন্তর্ভুক্ত রয়েছে, অ্যান্ড্রয়েড ১৩-তে নন-এসডিকে ইন্টারফেস বিধিনিষেধের আপডেটগুলি দেখুন।

অ্যান্ড্রয়েড ১২

অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকা বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: 40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761

অ্যান্ড্রয়েড ১২-তে নন-এসডিকে এপিআই তালিকার পরিবর্তন সম্পর্কে আরও জানতে, যার মধ্যে অ্যান্ড্রয়েড ১২-তে শর্তসাপেক্ষে ব্লক করা এপিআইগুলির জন্য প্রস্তাবিত পাবলিক এপিআই বিকল্পগুলি অন্তর্ভুক্ত রয়েছে, অ্যান্ড্রয়েড ১২-এর জন্য তালিকার পরিবর্তনগুলি দেখুন।

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

অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকা বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

অ্যান্ড্রয়েড ১১-এ নন-এসডিকে এপিআই তালিকার পরিবর্তন সম্পর্কে আরও জানতে, যার মধ্যে অ্যান্ড্রয়েড ১১-এ শর্তসাপেক্ষে ব্লক করা এপিআইগুলির জন্য প্রস্তাবিত পাবলিক এপিআই বিকল্পগুলি অন্তর্ভুক্ত রয়েছে, অ্যান্ড্রয়েড ১১-এর জন্য তালিকার পরিবর্তনগুলি দেখুন।

অ্যান্ড্রয়েড ১০

অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকা বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

অ্যান্ড্রয়েড ১০-এ নন-এসডিকে এপিআই তালিকার পরিবর্তন সম্পর্কে আরও জানতে, যার মধ্যে অ্যান্ড্রয়েড ১০-এ শর্তসাপেক্ষে ব্লক করা এপিআইগুলির জন্য প্রস্তাবিত পাবলিক এপিআই বিকল্পগুলি অন্তর্ভুক্ত রয়েছে, অ্যান্ড্রয়েড ১০-এর জন্য তালিকার পরিবর্তনগুলি দেখুন।

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

অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) এর জন্য, নিম্নলিখিত টেক্সট ফাইলে নন-এসডিকে এপিআইগুলির তালিকা রয়েছে যা সীমাবদ্ধ নয় (ধূসর তালিকাভুক্ত): hiddenapi-light-greylist.txt

ব্লকলিস্ট ( blacklist ) এবং শর্তসাপেক্ষে ব্লক করা API গুলির তালিকা (ডার্কগ্রে তালিকা) তৈরির সময় তৈরি করা হয়।

AOSP থেকে তালিকা তৈরি করুন

AOSP এর সাথে কাজ করার সময়, আপনি একটি hiddenapi-flags.csv ফাইল তৈরি করতে পারেন যাতে সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকা থাকে। এটি করার জন্য, AOSP সোর্সটি ডাউনলোড করুন এবং তারপর নিম্নলিখিত কমান্ডটি চালান:

m out/soong/hiddenapi/hiddenapi-flags.csv

এরপর আপনি ফাইলটি নিম্নলিখিত স্থানে খুঁজে পেতে পারেন:

out/soong/hiddenapi/hiddenapi-flags.csv

সীমাবদ্ধ নন-SDK ইন্টারফেস অ্যাক্সেস করা হলে প্রত্যাশিত আচরণ

আপনার অ্যাপ যদি ব্লকলিস্টের অংশ এমন একটি নন-SDK ইন্টারফেস অ্যাক্সেস করার চেষ্টা করে, তাহলে আপনি কী আচরণ আশা করতে পারেন তা নিম্নলিখিত টেবিলে বর্ণনা করা হয়েছে।

প্রবেশের মাধ্যম ফলাফল
ডালভিক নির্দেশিকা একটি ক্ষেত্র উল্লেখ করছে NoSuchFieldError নিক্ষেপ করা হয়েছে
ডালভিক নির্দেশিকা একটি পদ্ধতি উল্লেখ করে NoSuchMethodError ফেলে দেওয়া হয়েছে
Class.getDeclaredField() অথবা Class.getField() ব্যবহার করে প্রতিফলন NoSuchFieldException ছুঁড়ে ফেলা হয়েছে
Class.getDeclaredMethod() , Class.getMethod() ব্যবহার করে প্রতিফলন NoSuchMethodException ছুঁড়ে ফেলা হয়েছে
Class.getDeclaredFields() , Class.getFields() ব্যবহার করে প্রতিফলন SDK-র বাইরের সদস্যরা ফলাফলে নেই
Class.getDeclaredMethods() , Class.getMethods() ব্যবহার করে প্রতিফলন SDK-র বাইরের সদস্যরা ফলাফলে নেই
env->GetFieldID() ব্যবহার করে JNI NULL ফিরে এসেছে, NoSuchFieldError ফেলে দেওয়া হয়েছে
env->GetMethodID() ব্যবহার করে JNI NULL ফিরে এসেছে, NoSuchMethodError ফেলে দেওয়া হয়েছে

নন-SDK ইন্টারফেসের জন্য আপনার অ্যাপটি পরীক্ষা করুন

আপনার অ্যাপে নন-SDK ইন্টারফেস পরীক্ষা করার জন্য আপনি বেশ কয়েকটি পদ্ধতি ব্যবহার করতে পারেন।

একটি ডিবাগযোগ্য অ্যাপ ব্যবহার করে পরীক্ষা করুন

আপনি অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) বা তার বেশি চলমান ডিভাইস বা এমুলেটরে ডিবাগযোগ্য অ্যাপ তৈরি করে এবং চালিয়ে নন-এসডিকে ইন্টারফেস পরীক্ষা করতে পারেন। নিশ্চিত করুন যে আপনি যে ডিভাইস বা এমুলেটরটি ব্যবহার করছেন তা আপনার অ্যাপের লক্ষ্য API লেভেলের সাথে মেলে।

আপনার অ্যাপে পরীক্ষা চালানোর সময়, যদি আপনার অ্যাপটি কিছু নন-SDK ইন্টারফেস অ্যাক্সেস করে তবে সিস্টেমটি একটি লগ বার্তা প্রিন্ট করে। নিম্নলিখিত বিবরণগুলি খুঁজে পেতে আপনি আপনার অ্যাপের লগ বার্তাগুলি পরিদর্শন করতে পারেন:

  • ঘোষণাকারী ক্লাস, নাম এবং প্রকার (অ্যান্ড্রয়েড রানটাইম দ্বারা ব্যবহৃত ফর্ম্যাটে)।
  • অ্যাক্সেসের মাধ্যম: হয় লিঙ্কিং, প্রতিফলন ব্যবহার করে, অথবা JNI ব্যবহার করে।
  • নন-SDK ইন্টারফেসটি কোন তালিকার অন্তর্গত?

চলমান অ্যাপের PID এর অধীনে প্রদর্শিত লগ বার্তাগুলি অ্যাক্সেস করার জন্য আপনি adb logcat ব্যবহার করতে পারেন। উদাহরণস্বরূপ, লগে একটি এন্ট্রি নিম্নরূপ পড়তে পারে:

Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)

StrictMode API ব্যবহার করে পরীক্ষা করুন

আপনি StrictMode API ব্যবহার করে নন-SDK ইন্টারফেস পরীক্ষা করতে পারেন। এটি সক্ষম করতে detectNonSdkApiUsage পদ্ধতি ব্যবহার করুন। StrictMode API সক্ষম করার পরে, আপনি penaltyListener ব্যবহার করে নন-SDK ইন্টারফেসের প্রতিটি ব্যবহারের জন্য একটি কলব্যাক পেতে পারেন, যেখানে আপনি কাস্টম হ্যান্ডলিং বাস্তবায়ন করতে পারেন। কলব্যাকে প্রদত্ত Violation অবজেক্টটি Throwable থেকে এসেছে এবং সংযুক্ত স্ট্যাক ট্রেস ব্যবহারের প্রেক্ষাপট প্রদান করে।

অ্যান্ড্রয়েড স্টুডিও লিন্ট টুল ব্যবহার করে পরীক্ষা করুন

যখনই আপনি অ্যান্ড্রয়েড স্টুডিওতে আপনার অ্যাপ তৈরি করেন, তখন লিন্ট টুলটি সম্ভাব্য সমস্যার জন্য আপনার কোডটি পরীক্ষা করে। যদি আপনার অ্যাপটি নন-SDK ইন্টারফেস ব্যবহার করে, তাহলে আপনি বিল্ড ত্রুটি বা সতর্কতা দেখতে পারেন, যা নির্ভর করে সেই ইন্টারফেসগুলি কোন তালিকার অন্তর্গত তার উপর।

আপনি কমান্ড লাইন থেকে লিন্ট টুলটি চালাতে পারেন অথবা একটি নির্দিষ্ট প্রকল্প, ফোল্ডার বা ফাইলে ম্যানুয়ালি পরিদর্শন চালাতে পারেন

প্লে কনসোল ব্যবহার করে পরীক্ষা করুন

যখন আপনি আপনার অ্যাপটি Play Console-এর একটি টেস্টিং ট্র্যাকে আপলোড করেন, তখন আপনার অ্যাপটি স্বয়ংক্রিয়ভাবে সম্ভাব্য সমস্যার জন্য পরীক্ষা করা হয় এবং একটি প্রাক-লঞ্চ রিপোর্ট তৈরি হয়। যদি আপনার অ্যাপটি নন-SDK ইন্টারফেস ব্যবহার করে, তাহলে প্রাক-লঞ্চ রিপোর্টে একটি ত্রুটি বা সতর্কতা প্রদর্শিত হয়, যা নির্ভর করে সেই ইন্টারফেসগুলি কোন তালিকার অন্তর্গত তার উপর।

আরও তথ্যের জন্য, সমস্যাগুলি সনাক্ত করতে ব্যবহার প্রাক-লঞ্চ রিপোর্টগুলিতে Android সামঞ্জস্য বিভাগটি দেখুন।

একটি নতুন পাবলিক API অনুরোধ করুন

যদি আপনার অ্যাপের কোনও বৈশিষ্ট্যের জন্য নন-SDK ইন্টারফেস ব্যবহারের বিকল্প খুঁজে না পান, তাহলে আমাদের ইস্যু ট্র্যাকারে একটি বৈশিষ্ট্য অনুরোধ তৈরি করে আপনি একটি নতুন পাবলিক API অনুরোধ করতে পারেন।

একটি বৈশিষ্ট্য অনুরোধ তৈরি করার সময়, নিম্নলিখিত তথ্য প্রদান করুন:

  • আপনি কোন অসমর্থিত API ব্যবহার করছেন, Accessing hidden ... logcat বার্তায় দেখা সম্পূর্ণ বর্ণনাকারী সহ।
  • কেন আপনার এই API গুলি ব্যবহার করা দরকার, যার মধ্যে রয়েছে উচ্চ-স্তরের বৈশিষ্ট্য সম্পর্কে বিশদ বিবরণ যার জন্য APIটি প্রয়োজনীয়, কেবল নিম্ন স্তরের বিবরণ নয়।
  • আপনার উদ্দেশ্যে কেন কোনও সম্পর্কিত পাবলিক SDK API অপর্যাপ্ত।
  • আপনি অন্য কোন বিকল্প চেষ্টা করেছেন এবং কেন এগুলো কাজ করেনি।

যখন আপনি আপনার বৈশিষ্ট্য অনুরোধে এই বিবরণগুলি প্রদান করেন, তখন আপনি একটি নতুন পাবলিক API মঞ্জুর হওয়ার সম্ভাবনা বাড়িয়ে দেন।

অন্যান্য প্রশ্ন

এই বিভাগে ডেভেলপারদের প্রায়শই জিজ্ঞাসা করা অন্যান্য প্রশ্নের কিছু উত্তর রয়েছে:

সাধারণ প্রশ্নাবলী

গুগল কীভাবে নিশ্চিত করবে যে তারা ইস্যুট্র্যাকারের মাধ্যমে সমস্ত অ্যাপের চাহিদা ক্যাপচার করতে পারবে?

আমরা অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) এর জন্য প্রাথমিক তালিকা তৈরি করেছি স্ট্যাটিক বিশ্লেষণের মাধ্যমে যা নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করে সম্পূরক করা হয়েছিল:

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

প্রতিটি নতুন রিলিজের তালিকা মূল্যায়ন করার সময়, আমরা ইস্যু ট্র্যাকারের মাধ্যমে API ব্যবহারের পাশাপাশি ডেভেলপারদের প্রতিক্রিয়া বিবেচনা করি।

আমি কীভাবে নন-SDK ইন্টারফেসে অ্যাক্সেস সক্ষম করতে পারি?

আপনি API এনফোর্সমেন্ট নীতি পরিবর্তন করার জন্য adb কমান্ড ব্যবহার করে ডেভেলপমেন্ট ডিভাইসগুলিতে নন-SDK ইন্টারফেসগুলিতে অ্যাক্সেস সক্ষম করতে পারেন। আপনি যে কমান্ডগুলি ব্যবহার করেন তা API স্তরের উপর নির্ভর করে পরিবর্তিত হয়। এই কমান্ডগুলির জন্য রুটেড ডিভাইসের প্রয়োজন হয় না।

Android 10 (API লেভেল 29) বা তার বেশি

অ্যাক্সেস সক্ষম করতে, নিম্নলিখিত adb ব্যবহার করুন

কমান্ড:

adb shell settings put global hidden_api_policy  1

API এনফোর্সমেন্ট নীতি ডিফল্ট সেটিংসে রিসেট করতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

adb shell settings delete global hidden_api_policy
অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮)

অ্যাক্সেস সক্ষম করতে, নিম্নলিখিত adb কমান্ডগুলি ব্যবহার করুন:

adb shell settings put global hidden_api_policy_pre_p_apps  1
adb shell settings put global hidden_api_policy_p_apps 1

API এনফোর্সমেন্ট নীতি ডিফল্ট সেটিংসে রিসেট করতে, নিম্নলিখিত কমান্ডগুলি ব্যবহার করুন:

adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps

আপনি API এনফোর্সমেন্ট নীতিতে নিম্নলিখিত মানগুলির মধ্যে একটিতে পূর্ণসংখ্যা সেট করতে পারেন:

  • ০: নন-SDK ইন্টারফেসের সকল সনাক্তকরণ অক্ষম করুন। এই সেটিংটি ব্যবহার করলে নন-SDK ইন্টারফেস ব্যবহারের জন্য সকল লগ বার্তা অক্ষম হবে এবং আপনাকে StrictMode API ব্যবহার করে আপনার অ্যাপ পরীক্ষা করতে বাধা দেবে। এই সেটিংটি সুপারিশ করা হয় না।
  • ১: সকল নন-SDK ইন্টারফেসে অ্যাক্সেস সক্ষম করুন, কিন্তু যেকোনো নন-SDK ইন্টারফেস ব্যবহারের জন্য সতর্কতা সহ লগ বার্তা মুদ্রণ করুন। এই সেটিংটি ব্যবহার করে আপনি StrictMode API ব্যবহার করে আপনার অ্যাপটি পরীক্ষা করতে পারবেন।
  • ২: ব্লকলিস্টের অন্তর্গত অথবা আপনার টার্গেট API স্তরের জন্য শর্তসাপেক্ষে ব্লক করা নন-SDK ইন্টারফেসগুলির ব্যবহার নিষিদ্ধ করুন।

নন-SDK ইন্টারফেস তালিকা সম্পর্কে প্রশ্ন

সিস্টেম ইমেজে নন-SDK API তালিকাগুলি আমি কোথায় পাব?

এগুলি প্ল্যাটফর্ম ডেক্স ফাইলগুলিতে ফিল্ড এবং মেথড অ্যাক্সেস ফ্ল্যাগ বিটগুলিতে এনকোড করা আছে। সিস্টেম ইমেজে এই তালিকাগুলি ধারণকারী কোনও পৃথক ফাইল নেই।

একই অ্যান্ড্রয়েড সংস্করণ সহ বিভিন্ন OEM ডিভাইসে কি নন-SDK API তালিকা একই রকম?

OEM গুলি ব্লকলিস্টে (ব্ল্যাকলিস্ট) তাদের নিজস্ব ইন্টারফেস যোগ করতে পারে, কিন্তু তারা AOSP নন-SDK API তালিকা থেকে ইন্টারফেসগুলি সরাতে পারে না। CDD এই ধরনের পরিবর্তনগুলিকে প্রতিরোধ করে এবং CTS পরীক্ষাগুলি নিশ্চিত করে যে Android রানটাইম তালিকাটি প্রয়োগ করছে।

নেটিভ কোডে নন-এনডিকে ইন্টারফেসের উপর কি কোন বিধিনিষেধ আছে?

অ্যান্ড্রয়েড এসডিকে জাভা ইন্টারফেস অন্তর্ভুক্ত করে। প্ল্যাটফর্মটি অ্যান্ড্রয়েড ৭ (এপিআই লেভেল ২৬) তে নেটিভ সি/সি++ কোডের জন্য নন-এনডিকে ইন্টারফেসে অ্যাক্সেস সীমাবদ্ধ করা শুরু করেছে। আরও তথ্যের জন্য, অ্যান্ড্রয়েড এন-এ ব্যক্তিগত সি/সি++ প্রতীক সীমাবদ্ধতা সহ স্থিতিশীলতা উন্নত করা দেখুন।

dex2oat বা DEX ফাইল ম্যানিপুলেশন সীমিত করার কোন পরিকল্পনা আছে কি?

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

যদি একটি গুরুত্বপূর্ণ তৃতীয় পক্ষের SDK (উদাহরণস্বরূপ, একটি অবফাসকেটর) নন-SDK ইন্টারফেস ব্যবহার এড়াতে না পারে, কিন্তু ভবিষ্যতের অ্যান্ড্রয়েড সংস্করণগুলির সাথে সামঞ্জস্য বজায় রাখার প্রতিশ্রুতি দেয়, তাহলে কী হবে? এই ক্ষেত্রে অ্যান্ড্রয়েড কি তার সামঞ্জস্যের প্রয়োজনীয়তাগুলি মওকুফ করতে পারে?

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

SDK-বহির্ভূত ইন্টারফেস বিধিনিষেধ কি কেবল তৃতীয় পক্ষের অ্যাপ নয়, সিস্টেম এবং প্রথম পক্ষের অ্যাপ সহ সমস্ত অ্যাপের ক্ষেত্রে প্রযোজ্য?

হ্যাঁ, তবে, আমরা প্ল্যাটফর্ম কী দিয়ে স্বাক্ষরিত অ্যাপ এবং কিছু সিস্টেম ইমেজ অ্যাপকে অব্যাহতি দিই। মনে রাখবেন যে এই ছাড়গুলি কেবলমাত্র সেই অ্যাপগুলির ক্ষেত্রে প্রযোজ্য যা সিস্টেম ইমেজের অংশ (অথবা আপডেট করা সিস্টেম ইমেজ অ্যাপ)। তালিকাটি কেবলমাত্র সেই অ্যাপগুলির জন্য তৈরি করা হয়েছে যা SDK API গুলির পরিবর্তে ব্যক্তিগত প্ল্যাটফর্ম API গুলির বিরুদ্ধে তৈরি হয় (যেখানে LOCAL_PRIVATE_PLATFORM_APIS := true )।