Android 9 (API লেভেল ২৮) থেকে শুরু করে, প্ল্যাটফর্মটি আপনার অ্যাপ কোন নন-SDK ইন্টারফেস ব্যবহার করতে পারবে তা সীমাবদ্ধ করে। কোনও অ্যাপ নন-SDK ইন্টারফেস রেফারেন্স করলে অথবা রিফ্লেকশন বা JNI ব্যবহার করে এর হ্যান্ডেল পাওয়ার চেষ্টা করলে, এইসব বিধিনিষেধ প্রযোজ্য হয়। ব্যবহারকারী ও ডেভেলপারের অভিজ্ঞতা উন্নত করতে এবং ব্যবহারকারীর ক্ষেত্রে ক্র্যাশ ও ডেভেলপারের ক্ষেত্রে জরুরি রোলআউটের ঝুঁকি কমাতে এই বিধিনিষেধ আরোপ করা হয়েছে। এই সিদ্ধান্তের ব্যাপারে আরও জানতে, নন-SDK ইন্টারফেসের ব্যবহার কমিয়ে স্টেবিলিটি উন্নত করা দেখুন।
SDK ও নন-SDK ইন্টারফেসের মধ্যে পার্থক্য করা
সাধারণত, পাবলিক SDK ইন্টারফেস হল সেগুলি যেগুলি Android ফ্রেমওয়ার্ক প্যাকেজ ইনডেক্স-এ ডকুমেন্ট করা থাকে। নন-SDK ইন্টারফেস ম্যানেজ করা হল একটি ইমপ্লিমেন্টেশন সংক্রান্ত বিবরণ যা API অ্যাবস্ট্রাক্ট করে, তাই এইসব ইন্টারফেস কোনও বিজ্ঞপ্তি ছাড়াই পরিবর্তন করা হতে পারে।
ক্র্যাশ ও অপ্রত্যাশিত আচরণ এড়াতে, অ্যাপের শুধুমাত্র SDK-তে থাকা ক্লাসের আনুষ্ঠানিকভাবে ডকুমেন্ট করা অংশ ব্যবহার করা উচিত। এর অর্থ হল, আপনি যখন রিফ্লেকশনের মতো মেকানিজম ব্যবহার করে কোনও ক্লাসের সাথে ইন্টার্যাক্ট করেন, তখন SDK-তে তালিকাভুক্ত নয় এমন পদ্ধতি বা ফিল্ড অ্যাক্সেস করা উচিত নয়।
SDK নয় এমন API-এর তালিকা
Android-এর প্রতিটি রিলিজের সাথে, অতিরিক্ত নন-SDK ইন্টারফেস সীমাবদ্ধ করা হয়। আমরা জানি যে এইসব বিধিনিষেধ আপনার রিলিজ ওয়ার্কফ্লোকে প্রভাবিত করতে পারে এবং আমরা নিশ্চিত করতে চাই যে আপনার কাছে নন-SDK ইন্টারফেসের ব্যবহার শনাক্ত করার টুল, আমাদের মতামত জানানোর সুযোগ এবং নতুন নীতি অনুযায়ী পরিকল্পনা ও অ্যাডজাস্ট করার জন্য সময় আছে।
আপনার ডেভেলপমেন্ট ওয়ার্কফ্লোতে নন-SDK বিধিনিষেধের প্রভাব কমাতে, নন-SDK ইন্টারফেসগুলিকে এমন তালিকায় ভাগ করা হয়েছে যা নির্ধারণ করে যে কোন API লেভেলকে টার্গেট করা হচ্ছে তার উপর নির্ভর করে তাদের ব্যবহার কতটা কঠোরভাবে সীমাবদ্ধ করা হয়েছে। নিম্নলিখিত সারণীতে এইসব তালিকার প্রতিটি সম্পর্কে বর্ণনা করা হয়েছে:
| তালিকা | কোড ট্যাগ | বর্ণনা |
|---|---|---|
| ব্লকলিস্ট |
|
নন-SDK ইন্টারফেস যা আপনার অ্যাপের টার্গেট API লেভেল নির্বিশেষে আপনি ব্যবহার করতে পারবেন না। আপনার অ্যাপ এইসব ইন্টারফেসের মধ্যে কোনও একটি অ্যাক্সেস করার চেষ্টা করলে, সিস্টেম একটি সমস্যা দেখায়। |
| শর্তসাপেক্ষে ব্লক করা হয়েছে |
|
Android 9 (API লেভেল ২৮) থেকে শুরু করে, প্রতিটি API লেভেলে নন-SDK ইন্টারফেস আছে যা কোনও অ্যাপ সেই API লেভেলকে টার্গেট করলে সীমাবদ্ধ করা হয়। এই তালিকাগুলি সর্বাধিক API লেভেল ( আপনার অ্যাপ যদি এমন কোনও ইন্টারফেস অ্যাক্সেস করার চেষ্টা করে যা আপনার টার্গেট API লেভেলের জন্য সীমাবদ্ধ, তাহলে সিস্টেম এমন আচরণ করে যেন API-টি ব্লকলিস্টের অংশ। |
| অসমর্থিত |
|
নন-SDK ইন্টারফেস যা বিধিনিষেধযুক্ত নয় এবং আপনার অ্যাপ ব্যবহার করতে পারে। তবে
মনে রাখবেন যে এইসব ইন্টারফেস সমর্থিত নয় এবং
কোনও বিজ্ঞপ্তি ছাড়াই পরিবর্তন করা হতে পারে। ভবিষ্যতের Android ভার্সনে max-target-x তালিকায়
এইসব ইন্টারফেস শর্তসাপেক্ষে ব্লক করা হবে বলে
আশা করা হচ্ছে। |
| SDK |
|
ইন্টারফেস যা অবাধে ব্যবহার করা যেতে পারে এবং এখন আনুষ্ঠানিকভাবে নথিভুক্ত Android ফ্রেমওয়ার্ক প্যাকেজ ইনডেক্স-এর অংশ হিসেবে সমর্থিত। |
| Test API |
|
ইন্টারফেস যা ইন্টার্নাল সিস্টেম টেস্টিংয়ের জন্য ব্যবহার করা হয়, যেমন API যা কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS)-এর মাধ্যমে টেস্টিংয়ের সুবিধা প্রদান করে। টেস্ট API, SDK-এর অংশ নয়। Android 11 (API লেভেল ৩০) থেকে শুরু করে, টেস্ট API ব্লকলিস্টে অন্তর্ভুক্ত করা হয়েছে, তাই টার্গেট API লেভেল যাই হোক না কেন, অ্যাপ সেগুলি ব্যবহার করতে পারবে না। প্ল্যাটফর্ম API লেভেল যাই হোক না কেন, সব টেস্ট API কাজ করে না এবং কোনও বিজ্ঞপ্তি ছাড়াই পরিবর্তন করা হতে পারে। |
আপনি কিছু নন-SDK ইন্টারফেস ব্যবহার করতে পারলেও (আপনার অ্যাপের টার্গেট API লেভেলের উপর নির্ভর করে), যেকোনও নন-SDK পদ্ধতি বা ফিল্ড ব্যবহার করলে আপনার অ্যাপ কাজ করা বন্ধ করে দেওয়ার ঝুঁকি সবসময়ই বেশি থাকে। আপনার অ্যাপ নন-SDK ইন্টারফেসের উপর নির্ভর করলে, SDK ইন্টারফেস বা অন্যান্য বিকল্পে মাইগ্রেট করার পরিকল্পনা শুরু করা উচিত। আপনার অ্যাপের কোনও ফিচারের জন্য নন-SDK ইন্টারফেস ব্যবহার করার বিকল্প খুঁজে না পেলে, আপনাকে নতুন পাবলিক API-এর জন্য অনুরোধ করতে হবে।
কোনও ইন্টারফেস কোন তালিকার অন্তর্গত তা নির্ধারণ করো
নন-SDK ইন্টারফেসের তালিকা প্ল্যাটফর্মের অংশ হিসেবে তৈরি করা হয়। প্রতিটি Android রিলিজ সম্পর্কে তথ্য পেতে নিম্নলিখিত বিভাগগুলি দেখুন।
Android 16
Android ১৬ (API লেভেল ৩৬)-এর জন্য, আপনি নিম্নলিখিত ফাইল ডাউনলোড করতে পারবেন যা সব নন-SDK ইন্টারফেস এবং সেগুলির সংশ্লিষ্ট তালিকা বর্ণনা করে:
ফাইল: hiddenapi-flags.csv
SHA-256 চেকসাম:
9102af02fe6ab68b92464bdff5e5b09f3bd62c65d1130aaf85d3296f17d38074
Android 16-এ নন-SDK API তালিকার পরিবর্তন সম্পর্কে আরও জানতে, Android 16-এ নন-SDK ইন্টারফেস সংক্রান্ত বিধিনিষেধের আপডেট দেখুন।
Android 15
Android 15 (API লেভেল ৩৫)-এর জন্য, আপনি নিম্নলিখিত ফাইল ডাউনলোড করতে পারবেন যা সব নন-SDK ইন্টারফেস এবং সেগুলির সংশ্লিষ্ট তালিকা বর্ণনা করে:
ফাইল: hiddenapi-flags.csv
SHA-256 চেকসাম:
40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9
Android 15-এ নন-SDK API তালিকার পরিবর্তন সম্পর্কে আরও জানতে, Android 15-এ নন-SDK ইন্টারফেস সংক্রান্ত বিধিনিষেধের আপডেট দেখুন।
Android 14
Android 14 (API লেভেল ৩৪)-এর জন্য, আপনি নিম্নলিখিত ফাইল ডাউনলোড করতে পারবেন যা সব নন-SDK ইন্টারফেস এবং সেগুলির সংশ্লিষ্ট তালিকা বর্ণনা করে:
ফাইল: hiddenapi-flags.csv
SHA-256 চেকসাম:
7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f
Android 14-এ নন-SDK API তালিকার পরিবর্তন সম্পর্কে আরও জানতে, Android 14-এ নন-SDK ইন্টারফেস সংক্রান্ত বিধিনিষেধের আপডেট দেখুন।
Android 13
Android ১৩ (API লেভেল ৩৩)-এর জন্য, আপনি নিম্নলিখিত ফাইল ডাউনলোড করতে পারবেন যা সব নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকা বর্ণনা করে:
ফাইল: hiddenapi-flags.csv
SHA-256 চেকসাম:
233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3
Android 13-এ নন-SDK API তালিকার পরিবর্তন সম্পর্কে আরও জানতে, যার মধ্যে Android 13-এ শর্তসাপেক্ষে ব্লক করা API-এর জন্য সাজেস্ট করা পাবলিক API বিকল্প অন্তর্ভুক্ত, Android 13-এ নন-SDK ইন্টারফেস বিধিনিষেধের আপডেট দেখুন।
Android 12
Android ১২ (API লেভেল ৩১)-এর জন্য, আপনি নিম্নলিখিত ফাইল ডাউনলোড করতে পারবেন যা সব নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকা বর্ণনা করে:
ফাইল: hiddenapi-flags.csv
SHA-256 চেকসাম:
40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761
Android 12-এ নন-SDK API তালিকার পরিবর্তন সম্পর্কে আরও জানতে, যার মধ্যে Android 12-এ শর্তসাপেক্ষে ব্লক করা API-এর জন্য সাজেস্ট করা পাবলিক API বিকল্প অন্তর্ভুক্ত, Android 12-এর জন্য তালিকার পরিবর্তন দেখুন।
Android 11
Android 11 (API লেভেল ৩০)-এর জন্য, আপনি নিম্নলিখিত ফাইল ডাউনলোড করতে পারবেন যা সব নন-SDK ইন্টারফেস এবং সেগুলির সংশ্লিষ্ট তালিকা বর্ণনা করে:
ফাইল: hiddenapi-flags.csv
SHA-256 চেকসাম:
a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56
Android 11-এ নন-SDK API তালিকার পরিবর্তন সম্পর্কে আরও জানতে, যার মধ্যে Android 11-এ শর্তসাপেক্ষে ব্লক করা API-এর জন্য সাজেস্ট করা পাবলিক API বিকল্প অন্তর্ভুক্ত, Android 11-এর জন্য তালিকার পরিবর্তন দেখুন।
Android 10
Android 10 (API লেভেল ২৯)-এর জন্য, আপনি নিম্নলিখিত ফাইল ডাউনলোড করতে পারবেন যা সব নন-SDK ইন্টারফেস এবং সেগুলির সংশ্লিষ্ট তালিকা বর্ণনা করে:
ফাইল: hiddenapi-flags.csv
SHA-256 চেকসাম:
f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb
Android 10-এ নন-SDK API তালিকার পরিবর্তন সম্পর্কে আরও জানতে, যার মধ্যে Android 10-এ শর্তসাপেক্ষে ব্লক করা API-এর জন্য সাজেস্ট করা পাবলিক API বিকল্প অন্তর্ভুক্ত, Android 10-এর জন্য তালিকার পরিবর্তন দেখুন।
Android 9
Android 9 (API লেভেল ২৮)-এর জন্য, নিম্নলিখিত টেক্সট ফাইলে নন-SDK API-এর তালিকা রয়েছে
যেগুলি সীমাবদ্ধ (গ্রেলিস্টেড) নয়:
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 ইন্টারফেস অ্যাক্সেস করার চেষ্টা করে, তাহলে কী হতে পারে তা নিচের সারণীতে বর্ণনা করা হয়েছে।
| অ্যাক্সেসের মাধ্যম | ফলাফল |
|---|---|
| Dalvik নির্দেশাবলী একটি ফিল্ডকে রেফারেন্স করছে | NoSuchFieldErrorটি থ্রো করা হয়েছে |
| Dalvik নির্দেশাবলী একটি পদ্ধতি উল্লেখ করছে | 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 ইন্টারফেস পরীক্ষা করার জন্য আপনি একাধিক পদ্ধতি ব্যবহার করতে পারেন।
ডিবাগ করা যায় এমন অ্যাপ ব্যবহার করে টেস্ট করা
Android 9 (API লেভেল ২৮) বা তার চেয়ে উন্নত ভার্সনে চলে এমন ডিভাইস বা এমুলেটরে ডিবাগ করা যায় এমন অ্যাপ তৈরি ও রান করে আপনি নন-SDK ইন্টারফেস পরীক্ষা করতে পারবেন। আপনি যে ডিভাইস বা এমুলেটর ব্যবহার করছেন সেটি আপনার অ্যাপের টার্গেট API লেভেল-এর সাথে মিলছে কিনা তা নিশ্চিত করুন।
আপনার অ্যাপে টেস্ট রান করার সময়, আপনার অ্যাপ নির্দিষ্ট কিছু নন-SDK ইন্টারফেস অ্যাক্সেস করলে, সিস্টেম একটি লগ মেসেজ প্রিন্ট করে। নিম্নলিখিত বিবরণ খুঁজে পেতে আপনি নিজের অ্যাপের লগ মেসেজ পরীক্ষা করতে পারবেন:
- ঘোষণা করা ক্লাস, নাম এবং ধরন (Android রানটাইম দ্বারা ব্যবহৃত ফর্ম্যাটে)।
- অ্যাক্সেস করার উপায়: লিঙ্ক করা, রিফ্লেকশন ব্যবহার করা অথবা JNI ব্যবহার করা।
- নন-SDK ইন্টারফেস কোন তালিকার অন্তর্গত।
এইসব লগ মেসেজ অ্যাক্সেস করতে আপনি 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 থেকে পাওয়া যায় এবং এনক্লোজ করা স্ট্যাক ট্রেস ব্যবহারের প্রসঙ্গ প্রদান করে।
Android Studio লিন্ট টুল ব্যবহার করে পরীক্ষা করুন
Android Studio-তে আপনি যখনই কোনও অ্যাপ তৈরি করেন, লিন্ট টুল সম্ভাব্য সমস্যার জন্য আপনার কোড পরীক্ষা করে। আপনার অ্যাপ SDK-নয় এমন ইন্টারফেস ব্যবহার করলে, আপনি বিল্ড সংক্রান্ত সমস্যা বা সতর্কতা দেখতে পেতে পারেন, যা নির্ভর করে সেই ইন্টারফেসগুলি কোন তালিকার অন্তর্গত তার উপর।
এছাড়াও, আপনি কমান্ড লাইন থেকে লিন্ট টুল চালাতে বা কোনও নির্দিষ্ট প্রোজেক্ট, ফোল্ডার বা ফাইলে ম্যানুয়ালি ইন্সপেকশন চালাতে পারবেন।
Play Console ব্যবহার করে পরীক্ষা করা
Play Console-এ টেস্টিং ট্র্যাকে আপনার অ্যাপ আপলোড করলে, সম্ভাব্য সমস্যার জন্য আপনার অ্যাপ অটোমেটিক পরীক্ষা করা হয় এবং লঞ্চের আগের রিপোর্ট তৈরি করা হয়। আপনার অ্যাপ নন-SDK ইন্টারফেস ব্যবহার করলে, লঞ্চের আগের রিপোর্টে একটি সমস্যা বা সতর্কতা দেখানো হয়, যা নির্ভর করে ইন্টারফেসগুলি কোন তালিকার অন্তর্গত তার উপর।
আরও তথ্যের জন্য, সমস্যা শনাক্ত করতে লঞ্চের আগের রিপোর্ট ব্যবহার করুন লিঙ্কে Android কম্প্যাটিবিলিটি বিভাগ দেখুন।
নতুন পাবলিক API-এর জন্য অনুরোধ করুন
আপনার অ্যাপের কোনও ফিচারের জন্য নন-SDK ইন্টারফেস ব্যবহার করার বিকল্প খুঁজে না পেলে, আমাদের ইস্যু ট্র্যাকারে ফিচার অনুরোধ তৈরি করে নতুন পাবলিক API-এর জন্য অনুরোধ করতে পারেন।
ফিচার রিকোয়েস্ট তৈরি করার সময়, নিম্নলিখিত তথ্য প্রদান করুন:
- আপনি কোন কাজ না করা API ব্যবহার করছেন, যার মধ্যে
Accessing hidden ...logcat মেসেজে দেখা সম্পূর্ণ ডেসক্রিপ্টর অন্তর্ভুক্ত। - আপনাকে কেন এই API ব্যবহার করতে হবে, যার মধ্যে API-এর জন্য প্রয়োজনীয় হাই-লেভেল ফিচারের বিবরণ অন্তর্ভুক্ত, শুধু লো-লেভেল বিবরণ নয়।
- আপনার উদ্দেশ্যের জন্য কেন কোনও সম্পর্কিত পাবলিক SDK API যথেষ্ট নয়।
- আপনি অন্য কোনও বিকল্প ব্যবহার করে দেখেছেন কিনা এবং সেগুলি কেন কাজ করেনি।
ফিচার অনুরোধে এইসব বিবরণ প্রদান করলে, নতুন পাবলিক API মঞ্জুর হওয়ার সম্ভাবনা বেড়ে যায়।
অন্যান্য প্রশ্ন
এই বিভাগে ডেভেলপারদের প্রায়শই জিজ্ঞাসিত অন্যান্য প্রশ্নের উত্তর দেওয়া হয়েছে:
সাধারণ প্রশ্ন
Google কীভাবে নিশ্চিত হতে পারে যে তারা ইস্যু ট্র্যাকার ব্যবহার করে সব অ্যাপের প্রয়োজনীয়তা ক্যাপচার করতে পারবে?
আমরা Android 9 (API লেভেল ২৮)-এর জন্য অ্যাপের স্ট্যাটিক বিশ্লেষণের মাধ্যমে প্রাথমিক তালিকা তৈরি করেছি, যা নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করে পরিপূরক করা হয়েছে:
- সেরা Play ও নন-Play অ্যাপের ম্যানুয়াল টেস্টিং
- ইন্টার্নাল রিপোর্ট
- ইন্টার্নাল ব্যবহারকারীদের থেকে অটোমেটিক ডেটা সংগ্রহ করা
- ডেভেলপার প্রিভিউ রিপোর্ট
- অতিরিক্ত স্ট্যাটিক বিশ্লেষণ যা রক্ষণশীলভাবে আরও বেশি ফলস পজিটিভ অন্তর্ভুক্ত করার জন্য ডিজাইন করা হয়েছে
প্রতিটি নতুন রিলিজের জন্য তালিকা মূল্যায়ন করার সময়, আমরা API ব্যবহার এবং ইস্যু ট্র্যাকারের মাধ্যমে ডেভেলপারদের মতামত বিবেচনা করি।
আমি কীভাবে নন-SDK ইন্টারফেসে অ্যাক্সেস চালু করতে পারি?
আপনি API এনফোর্সমেন্ট নীতি পরিবর্তন করতে adb কমান্ড ব্যবহার করে ডেভেলপমেন্ট ডিভাইসে নন-SDK ইন্টারফেসে অ্যাক্সেস চালু করতে পারেন। API লেভেলের উপর নির্ভর করে, আপনার ব্যবহার করা কমান্ড আলাদা আলাদা হয়। এইসব কমান্ডের জন্য রুট করা ডিভাইসের প্রয়োজন হয় না।
- Android 10 (API লেভেল ২৯) বা তার পরবর্তী যেকোনও ভার্সন
অ্যাক্সেস চালু করতে, নিম্নলিখিত adb ব্যবহার করুন
কমান্ড:
adb shell settings put global hidden_api_policy 1
API এনফোর্সমেন্ট নীতি ডিফল্ট সেটিংসে রিসেট করতে, নিম্নলিখিত কমান্ড ব্যবহার করুন:
adb shell settings delete global hidden_api_policy
- Android 9 (API লেভেল ২৮)
অ্যাক্সেস চালু করতে, নিম্নলিখিত adb কমান্ড ব্যবহার করুন:
adb shell settings put global hidden_api_policy_pre_p_apps 1adb shell settings put global hidden_api_policy_p_apps 1API এনফোর্সমেন্ট নীতি ডিফল্ট সেটিংসে রিসেট করতে, নিম্নলিখিত কমান্ডগুলি ব্যবহার করুন:
adb shell settings delete global hidden_api_policy_pre_p_appsadb shell settings delete global hidden_api_policy_p_apps
আপনি API এনফোর্সমেন্ট নীতিতে ইন্টিজারকে নিম্নলিখিত মানগুলির মধ্যে একটিতে সেট করতে পারেন:
- 0: SDK নয় এমন ইন্টারফেসের সব শনাক্তকরণ বন্ধ করুন। এই সেটিং ব্যবহার করলে,
SDK নয় এমন ইন্টারফেস ব্যবহারের জন্য সব লগ মেসেজ বন্ধ হয়ে যায় এবং আপনি
StrictModeAPI ব্যবহার করে আপনার অ্যাপ পরীক্ষা করতে পারেন না। এই সেটিং সাজেস্ট করা হয় না। - ১: সব নন-SDK ইন্টারফেসে অ্যাক্সেস চালু করুন, তবে যেকোনও নন-SDK ইন্টারফেস ব্যবহারের জন্য সতর্কবার্তা সহ লগ মেসেজ প্রিন্ট করুন। এই সেটিং ব্যবহার করলে আপনি
StrictModeAPI ব্যবহার করে আপনার অ্যাপ পরীক্ষা করতে পারবেন। - ২: ব্লক করা তালিকায় থাকা বা আপনার টার্গেট API লেভেলের জন্য শর্তসাপেক্ষে ব্লক করা নন-SDK ইন্টারফেসের ব্যবহার বন্ধ করুন।
SDK-নয় এমন ইন্টারফেস তালিকা সম্পর্কে প্রশ্ন
সিস্টেম ইমেজে নন-SDK API তালিকা আমি কোথায় পাব?
এগুলি প্ল্যাটফর্ম dex ফাইলের ফিল্ড ও মেথড অ্যাক্সেস ফ্ল্যাগ বিটে এনকোড করা থাকে। সিস্টেম ইমেজে কোনও আলাদা ফাইল নেই যাতে এই তালিকাগুলি রয়েছে।
একই Android ভার্সন সহ বিভিন্ন OEM ডিভাইসে নন-SDK API তালিকা কি একই?
OEM তাদের নিজস্ব ইন্টারফেস ব্লকলিস্টে (ব্ল্যাকলিস্ট) যোগ করতে পারে, তবে তারা AOSP নন-SDK API তালিকা থেকে ইন্টারফেস সরাতে পারে না। CDD এই ধরনের পরিবর্তন আটকায় এবং CTS টেস্ট নিশ্চিত করে যে Android Runtime তালিকাটি এনফোর্স করছে।
সম্পর্কিত অ্যাপের কম্প্যাটিবিলিটি সম্পর্কে প্রশ্ন
নেটিভ কোডে নন-NDK ইন্টারফেসে কোনও বিধিনিষেধ আছে কি?
Android SDK-তে Java ইন্টারফেস অন্তর্ভুক্ত থাকে। Android 7 (API লেভেল ২৬)-এ নেটিভ C/C++ কোডের জন্য নন-NDK ইন্টারফেসে অ্যাক্সেস সীমাবদ্ধ করা শুরু করেছে প্ল্যাটফর্মটি। আরও তথ্যের জন্য, Android N-এ ব্যক্তিগত C/C++ সিম্বল বিধিনিষেধের মাধ্যমে স্টেবিলিটি উন্নত করা দেখুন।
dex2oat বা DEX ফাইল ম্যানিপুলেশন সীমাবদ্ধ করার কোনও পরিকল্পনা আছে কি?
dex2oat বাইনারিতে অ্যাক্সেস সীমিত করার কোনও সক্রিয় প্ল্যান আমাদের নেই, তবে Dalvik Executable ফর্ম্যাটে পাবলিকলি নির্দিষ্ট করা অংশের বাইরে DEX ফাইল ফর্ম্যাটকে স্টেবল বা পাবলিক ইন্টারফেস হিসেবে রাখার কোনও ইচ্ছা আমাদের নেই। আমরা যেকোনও সময় dex2oat এবং DEX ফর্ম্যাটের উল্লেখ না করা অংশ পরিবর্তন বা বাদ দেওয়ার অধিকার রাখি। এছাড়াও মনে রাখবেন যে dex2oat-এর মাধ্যমে তৈরি করা ডেরিভেটিভ ফাইল যেমন ODEX (OAT নামেও পরিচিত), VDEX এবং CDEX হল সব অনির্দিষ্ট ফর্ম্যাট।
যদি কোনও গুরুত্বপূর্ণ থার্ড-পার্টি SDK (যেমন, অবফাসকেটর) নন-SDK ইন্টারফেস ব্যবহার করা এড়াতে না পারে, কিন্তু ভবিষ্যতের Android ভার্সনের সাথে সামঞ্জস্য বজায় রাখার প্রতিশ্রুতি দেয়, তাহলে কী হবে? এই ক্ষেত্রে Android কি তার কম্প্যাটিবিলিটি সংক্রান্ত প্রয়োজনীয়তা মকুব করতে পারে?
প্রতিটি SDK-এর ভিত্তিতে কম্প্যাটিবিলিটি সংক্রান্ত প্রয়োজনীয়তা মকুব করার কোনও পরিকল্পনা আমাদের নেই। যদি কোনও SDK ডেভেলপার শুধুমাত্র কাজ না করা (আগে ধূসর) তালিকার ইন্টারফেসের উপর নির্ভর করে মানানসইতা বজায় রাখতে পারেন, তাহলে তাদের SDK ইন্টারফেস বা অন্যান্য বিকল্পে মাইগ্রেট করার পরিকল্পনা শুরু করা উচিত এবং যখনই তারা নন-SDK ইন্টারফেস ব্যবহারের বিকল্প খুঁজে পাবেন না, তখনই একটি নতুন পাবলিক API-এর জন্য অনুরোধ করা উচিত।
নন-SDK ইন্টারফেস সংক্রান্ত বিধিনিষেধ কি শুধু থার্ড-পার্টি অ্যাপ নয়, সিস্টেম ও ফার্স্ট-পার্টি অ্যাপ সহ সব অ্যাপের ক্ষেত্রে প্রযোজ্য?
হ্যাঁ, তবে প্ল্যাটফর্ম কী দিয়ে সাইন-ইন করা অ্যাপ এবং কিছু সিস্টেম ইমেজ অ্যাপকে
আমরা ছাড় দিই। মনে রাখবেন যে এই ছাড় শুধুমাত্র সেইসব অ্যাপের ক্ষেত্রে প্রযোজ্য যেগুলি সিস্টেম ইমেজের (বা আপডেট করা সিস্টেম ইমেজ অ্যাপ) অংশ। এই তালিকাটি শুধুমাত্র সেইসব অ্যাপের জন্য তৈরি করা হয়েছে যেগুলি
SDK API-এর পরিবর্তে ব্যক্তিগত প্ল্যাটফর্ম API-এর বিরুদ্ধে তৈরি করা হয়েছে (যেখানে
LOCAL_PRIVATE_PLATFORM_APIS := true)।