নন-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 %} {% যদি শেষ %}

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

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

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

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

নন-এসডিকে এপিআই তালিকা

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

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

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

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

এই তালিকাগুলোকে সর্বোচ্চ এপিআই লেভেল ( max-target-x ) দ্বারা চিহ্নিত করা হয়, যেটি পর্যন্ত একটি অ্যাপ টার্গেট করতে পারে এবং এরপর সেই তালিকার নন-এসডিকে ইন্টারফেসগুলো আর অ্যাক্সেস করতে পারে না। উদাহরণস্বরূপ, একটি নন-এসডিকে ইন্টারফেস যা অ্যান্ড্রয়েড পাই-তে ব্লক করা ছিল না কিন্তু এখন অ্যান্ড্রয়েড ১০-এ ব্লক করা হয়েছে, সেটি max-target-p ( greylist-max-p ) তালিকার অংশ, যেখানে "p" বলতে পাই বা অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) বোঝায়।

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

অসমর্থিত
  • unsupported
  • অপ্রচলিত: greylist
নন-এসডিকে ইন্টারফেসগুলো অবাধ এবং আপনার অ্যাপ এগুলো ব্যবহার করতে পারে। তবে মনে রাখবেন, এই ইন্টারফেসগুলো অসমর্থিত এবং কোনো পূর্ব বিজ্ঞপ্তি ছাড়াই পরিবর্তন হতে পারে। আশা করা যায়, ভবিষ্যতের অ্যান্ড্রয়েড সংস্করণগুলোতে এই ইন্টারফেসগুলো একটি max-target-x তালিকার অধীনে শর্তসাপেক্ষে ব্লক করা হবে।
এসডিকে
  • public-api এবং sdk উভয়ই
  • অপ্রচলিত: public-api এবং whitelist উভয়ই
যেসব ইন্টারফেস অবাধে ব্যবহার করা যায় এবং বর্তমানে আনুষ্ঠানিকভাবে নথিভুক্ত অ্যান্ড্রয়েড ফ্রেমওয়ার্ক প্যাকেজ সূচীর অংশ হিসেবে সমর্থিত।
টেস্ট এপিআই
  • test-api
অভ্যন্তরীণ সিস্টেম পরীক্ষার জন্য ব্যবহৃত ইন্টারফেস, যেমন এপিআই (API), যা কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS)-এর মাধ্যমে পরীক্ষা সহজ করে। টেস্ট এপিআই (Test APIs) এসডিকে (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

Android 13-এর নন-SDK API তালিকার পরিবর্তনগুলো সম্পর্কে আরও জানতে, যার মধ্যে Android 13-এ শর্তসাপেক্ষে ব্লক করা API-গুলোর জন্য প্রস্তাবিত পাবলিক API বিকল্পও অন্তর্ভুক্ত, “Android 13-এ নন-SDK ইন্টারফেস সীমাবদ্ধতার আপডেট” দেখুন।

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

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

ফাইল: hiddenapi-flags.csv

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

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

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

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

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

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

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

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

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

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

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

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

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

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

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

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

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

out/soong/hiddenapi/hiddenapi-flags.csv

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ফিচার রিকোয়েস্ট তৈরি করার সময় নিম্নলিখিত তথ্যগুলো প্রদান করুন:

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

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

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

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

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

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

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

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

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

আমি কীভাবে নন-এসডিকে ইন্টারফেসগুলিতে অ্যাক্সেস সক্ষম করতে পারি?

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

অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) বা উচ্চতর

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

আদেশ:

adb shell settings put global hidden_api_policy  1

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

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

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

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

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

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

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

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

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

একই অ্যান্ড্রয়েড সংস্করণ থাকা সত্ত্বেও বিভিন্ন OEM ডিভাইসে নন-SDK API তালিকাগুলো কি একই থাকে?

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

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

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

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

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

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

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

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

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