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

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

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

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

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

নন-SDK API তালিকা

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

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

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

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

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

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

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

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

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

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

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

Android 16 (API স্তর 36) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

Android 15 (API স্তর 35) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

Android 14 (API স্তর 34) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

Android 13 (API স্তর 33) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

Android 12 (API স্তর 31) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

Android 12-এ শর্তসাপেক্ষে ব্লক করা APIগুলির জন্য প্রস্তাবিত সর্বজনীন API বিকল্পগুলি সহ Android 12-এ নন-SDK API তালিকা পরিবর্তনগুলি সম্পর্কে আরও জানতে, Android 12-এর জন্য তালিকা পরিবর্তনগুলি দেখুন।

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

Android 11 (API স্তর 30) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

Android 11-এ শর্তসাপেক্ষে ব্লক করা APIগুলির জন্য প্রস্তাবিত সর্বজনীন API বিকল্পগুলি সহ Android 11-এ নন-SDK API তালিকা পরিবর্তনগুলি সম্পর্কে আরও জানতে, Android 11-এর জন্য তালিকা পরিবর্তনগুলি দেখুন।

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

Android 10 (API স্তর 29) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

Android 10-এ শর্তসাপেক্ষে ব্লক করা APIগুলির জন্য প্রস্তাবিত সর্বজনীন API বিকল্পগুলি সহ Android 10-এ নন-SDK API তালিকা পরিবর্তনগুলি সম্পর্কে আরও জানতে, Android 10-এর জন্য তালিকা পরিবর্তনগুলি দেখুন।

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

অ্যান্ড্রয়েড 9 (এপিআই লেভেল 28) এর জন্য, নিম্নলিখিত টেক্সট ফাইলটিতে অ-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 ইন্টারফেস অ্যাক্সেস করার চেষ্টা করে।

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

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

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

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

আপনি Android 9 (API লেভেল 28) বা উচ্চতর চালিত ডিভাইস বা এমুলেটরে একটি ডিবাগযোগ্য অ্যাপ তৈরি এবং চালানোর মাধ্যমে নন-SDK ইন্টারফেসের জন্য পরীক্ষা করতে পারেন। আপনি যে ডিভাইস বা এমুলেটর ব্যবহার করছেন সেটি আপনার অ্যাপের টার্গেট API লেভেলের সাথে মেলে তা নিশ্চিত করুন।

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

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

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

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

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

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

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

আপনি আপনার APK-এ ভেরিডেক্স স্ট্যাটিক বিশ্লেষণ টুলও চালাতে পারেন। ভেরিডেক্স টুলটি যেকোন তৃতীয় পক্ষের লাইব্রেরি সহ APK-এর সম্পূর্ণ কোডবেস স্ক্যান করে এবং এটি খুঁজে পাওয়া অ-SDK ইন্টারফেসের যেকোনও ব্যবহার রিপোর্ট করে।

ভেরিডেক্স টুলের সীমাবদ্ধতাগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

  • এটি JNI এর মাধ্যমে আমন্ত্রণ সনাক্ত করতে পারে না।
  • এটি প্রতিফলনের মাধ্যমে আমন্ত্রণের একটি উপসেট সনাক্ত করতে পারে।
  • নিষ্ক্রিয় কোড পাথের জন্য এর বিশ্লেষণ API স্তরের চেকের মধ্যে সীমাবদ্ধ।
  • এটি শুধুমাত্র SSE4.2 এবং POPCNT নির্দেশাবলী সমর্থন করে এমন মেশিনে চালানো যেতে পারে।

উইন্ডোজ

নেটিভ উইন্ডোজ বাইনারি প্রদান করা হয় না, তবে আপনি লিনাক্সের জন্য উইন্ডোজ সাবসিস্টেম (WSL) ব্যবহার করে লিনাক্স বাইনারিগুলি সম্পাদন করে উইন্ডোজে ভেরিডেক্স টুল চালাতে পারেন। এই বিভাগে পদক্ষেপগুলি অনুসরণ করার আগে, WSL ইনস্টল করুন এবং আপনার লিনাক্স বিতরণ হিসাবে উবুন্টু নির্বাচন করুন।

উবুন্টু ইনস্টল হওয়ার পরে, একটি উবুন্টু টার্মিনাল চালু করুন এবং তারপরে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড রানটাইম প্রিবিল্ট রিপোজিটরি থেকে ভেরিডেক্স টুলটি ডাউনলোড করুন।
  2. appcompat.tar.gz ফাইলের বিষয়বস্তু বের করুন।
  3. এক্সট্র্যাক্ট করা ফোল্ডারে, veridex-linux.zip ফাইলটি সনাক্ত করুন এবং এটি বের করুন।
  4. আনজিপ করা ফোল্ডারে নেভিগেট করুন এবং তারপরে নিম্নলিখিত কমান্ডটি চালান, যেখানে your-app.apk হল সেই APK যা আপনি পরীক্ষা করতে চান:

    ./appcompat.sh --dex-file=your-app.apk
    

macOS

macOS এ ভেরিডেক্স টুল চালানোর জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড রানটাইম প্রিবিল্ট রিপোজিটরি থেকে ভেরিডেক্স টুলটি ডাউনলোড করুন।
  2. appcompat.tar.gz ফাইলের বিষয়বস্তু বের করুন।
  3. এক্সট্র্যাক্ট করা ফোল্ডারে, veridex-mac.zip ফাইলটি সনাক্ত করুন এবং এটি বের করুন।
  4. আনজিপ করা ফোল্ডারে নেভিগেট করুন এবং তারপরে নিম্নলিখিত কমান্ডটি চালান, যেখানে /path-from-root/your-app.apk হল আপনার সিস্টেমের রুট ডিরেক্টরি থেকে শুরু করে আপনি যে APK পরীক্ষা করতে চান তার পথ:

    ./appcompat.sh --dex-file=/path-from-root/your-app.apk
    

লিনাক্স

লিনাক্সে ভেরিডেক্স টুল চালানোর জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড রানটাইম প্রিবিল্ট রিপোজিটরি থেকে ভেরিডেক্স টুলটি ডাউনলোড করুন।
  2. appcompat.tar.gz ফাইলের বিষয়বস্তু বের করুন।
  3. এক্সট্র্যাক্ট করা ফোল্ডারে, veridex-linux.zip ফাইলটি সনাক্ত করুন এবং এটি বের করুন।
  4. আনজিপ করা ফোল্ডারে নেভিগেট করুন এবং তারপরে নিম্নলিখিত কমান্ডটি চালান, যেখানে your-app.apk হল সেই APK যা আপনি পরীক্ষা করতে চান:

    ./appcompat.sh --dex-file=your-app.apk
    

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

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

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

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

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

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

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

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

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

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

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

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

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

সাধারণ প্রশ্ন

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

আমরা Android 9 (API স্তর 28) এর জন্য প্রাথমিক তালিকা তৈরি করেছি অ্যাপ্লিকেশানগুলির স্ট্যাটিক বিশ্লেষণের মাধ্যমে যা নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করে পরিপূরক ছিল:

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

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

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

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

Android 10 (API স্তর 29) বা উচ্চতর

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

আদেশ:

adb shell settings put global hidden_api_policy  1

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

adb shell settings delete global hidden_api_policy
Android 9 (API স্তর 28)

অ্যাক্সেস সক্ষম করতে, নিম্নলিখিত 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 প্রয়োগ নীতিতে পূর্ণসংখ্যাকে নিম্নলিখিত মানগুলির মধ্যে একটিতে সেট করতে পারেন:

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

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

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

তারা প্ল্যাটফর্ম ডেক্স ফাইলের ক্ষেত্রে এবং পদ্ধতি অ্যাক্সেস পতাকা বিট এনকোড করা হয়. এই তালিকাগুলি ধারণ করে সিস্টেম ইমেজে কোনও পৃথক ফাইল নেই।

নন-SDK API তালিকাগুলি কি একই Android সংস্করণ সহ বিভিন্ন OEM ডিভাইসে একই?

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

নেটিভ কোডে নন-এনডিকে ইন্টারফেসে কোন সীমাবদ্ধতা আছে কি?

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

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

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

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

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

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

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

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

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

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

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

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

নন-SDK API তালিকা

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

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

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

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

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

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

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

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

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

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

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

Android 16 (API স্তর 36) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

Android 15 (API স্তর 35) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

Android 14 (API স্তর 34) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

Android 13 (API স্তর 33) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

Android 12 (API স্তর 31) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

Android 12-এ শর্তসাপেক্ষে ব্লক করা APIগুলির জন্য প্রস্তাবিত সর্বজনীন API বিকল্পগুলি সহ Android 12-এ নন-SDK API তালিকা পরিবর্তনগুলি সম্পর্কে আরও জানতে, Android 12-এর জন্য তালিকা পরিবর্তনগুলি দেখুন।

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

Android 11 (API স্তর 30) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

Android 11-এ শর্তসাপেক্ষে ব্লক করা APIগুলির জন্য প্রস্তাবিত সর্বজনীন API বিকল্পগুলি সহ Android 11-এ নন-SDK API তালিকা পরিবর্তনগুলি সম্পর্কে আরও জানতে, Android 11-এর জন্য তালিকা পরিবর্তনগুলি দেখুন।

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

Android 10 (API স্তর 29) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-SDK ইন্টারফেস এবং তাদের সংশ্লিষ্ট তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

Android 10-এ শর্তসাপেক্ষে ব্লক করা APIগুলির জন্য প্রস্তাবিত সর্বজনীন API বিকল্পগুলি সহ Android 10-এ নন-SDK API তালিকা পরিবর্তনগুলি সম্পর্কে আরও জানতে, Android 10-এর জন্য তালিকা পরিবর্তনগুলি দেখুন।

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

অ্যান্ড্রয়েড 9 (এপিআই লেভেল 28) এর জন্য, নিম্নলিখিত টেক্সট ফাইলটিতে অ-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 ইন্টারফেস অ্যাক্সেস করার চেষ্টা করে।

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

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

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

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

আপনি Android 9 (API লেভেল 28) বা উচ্চতর চালিত ডিভাইস বা এমুলেটরে একটি ডিবাগযোগ্য অ্যাপ তৈরি এবং চালানোর মাধ্যমে নন-SDK ইন্টারফেসের জন্য পরীক্ষা করতে পারেন। আপনি যে ডিভাইস বা এমুলেটর ব্যবহার করছেন সেটি আপনার অ্যাপের টার্গেট API লেভেলের সাথে মেলে তা নিশ্চিত করুন।

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

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

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

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

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

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

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

আপনি আপনার APK-এ ভেরিডেক্স স্ট্যাটিক বিশ্লেষণ টুলও চালাতে পারেন। ভেরিডেক্স টুলটি যেকোন তৃতীয় পক্ষের লাইব্রেরি সহ APK-এর সম্পূর্ণ কোডবেস স্ক্যান করে এবং এটি খুঁজে পাওয়া অ-SDK ইন্টারফেসের যেকোনও ব্যবহার রিপোর্ট করে।

ভেরিডেক্স টুলের সীমাবদ্ধতাগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

  • এটি JNI এর মাধ্যমে আমন্ত্রণ সনাক্ত করতে পারে না।
  • এটি প্রতিফলনের মাধ্যমে আমন্ত্রণের একটি উপসেট সনাক্ত করতে পারে।
  • নিষ্ক্রিয় কোড পাথের জন্য এর বিশ্লেষণ API স্তরের চেকের মধ্যে সীমাবদ্ধ।
  • এটি শুধুমাত্র SSE4.2 এবং POPCNT নির্দেশাবলী সমর্থন করে এমন মেশিনে চালানো যেতে পারে।

উইন্ডোজ

নেটিভ উইন্ডোজ বাইনারি প্রদান করা হয় না, তবে আপনি লিনাক্সের জন্য উইন্ডোজ সাবসিস্টেম (WSL) ব্যবহার করে লিনাক্স বাইনারিগুলি সম্পাদন করে উইন্ডোজে ভেরিডেক্স টুল চালাতে পারেন। এই বিভাগে পদক্ষেপগুলি অনুসরণ করার আগে, WSL ইনস্টল করুন এবং আপনার লিনাক্স বিতরণ হিসাবে উবুন্টু নির্বাচন করুন।

উবুন্টু ইনস্টল হওয়ার পরে, একটি উবুন্টু টার্মিনাল চালু করুন এবং তারপরে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড রানটাইম প্রিবিল্ট রিপোজিটরি থেকে ভেরিডেক্স টুলটি ডাউনলোড করুন।
  2. appcompat.tar.gz ফাইলের বিষয়বস্তু বের করুন।
  3. এক্সট্র্যাক্ট করা ফোল্ডারে, veridex-linux.zip ফাইলটি সনাক্ত করুন এবং এটি বের করুন।
  4. আনজিপ করা ফোল্ডারে নেভিগেট করুন এবং তারপরে নিম্নলিখিত কমান্ডটি চালান, যেখানে your-app.apk হল সেই APK যা আপনি পরীক্ষা করতে চান:

    ./appcompat.sh --dex-file=your-app.apk
    

macOS

macOS এ ভেরিডেক্স টুল চালানোর জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড রানটাইম প্রিবিল্ট রিপোজিটরি থেকে ভেরিডেক্স টুলটি ডাউনলোড করুন।
  2. appcompat.tar.gz ফাইলের বিষয়বস্তু বের করুন।
  3. এক্সট্র্যাক্ট করা ফোল্ডারে, veridex-mac.zip ফাইলটি সনাক্ত করুন এবং এটি বের করুন।
  4. আনজিপ করা ফোল্ডারে নেভিগেট করুন এবং তারপরে নিম্নলিখিত কমান্ডটি চালান, যেখানে /path-from-root/your-app.apk হল আপনার সিস্টেমের রুট ডিরেক্টরি থেকে শুরু করে আপনি যে APK পরীক্ষা করতে চান তার পথ:

    ./appcompat.sh --dex-file=/path-from-root/your-app.apk
    

লিনাক্স

লিনাক্সে ভেরিডেক্স টুল চালানোর জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড রানটাইম প্রিবিল্ট রিপোজিটরি থেকে ভেরিডেক্স টুলটি ডাউনলোড করুন।
  2. appcompat.tar.gz ফাইলের বিষয়বস্তু বের করুন।
  3. এক্সট্র্যাক্ট করা ফোল্ডারে, veridex-linux.zip ফাইলটি সনাক্ত করুন এবং এটি বের করুন।
  4. আনজিপ করা ফোল্ডারে নেভিগেট করুন এবং তারপরে নিম্নলিখিত কমান্ডটি চালান, যেখানে your-app.apk হল সেই APK যা আপনি পরীক্ষা করতে চান:

    ./appcompat.sh --dex-file=your-app.apk
    

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

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

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

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

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

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

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

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

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

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

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

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

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

সাধারণ প্রশ্ন

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

আমরা Android 9 (API স্তর 28) এর জন্য প্রাথমিক তালিকা তৈরি করেছি অ্যাপ্লিকেশানগুলির স্ট্যাটিক বিশ্লেষণের মাধ্যমে যা নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করে পরিপূরক ছিল:

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

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

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

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

অ্যান্ড্রয়েড 10 (এপিআই স্তর 29) বা উচ্চতর

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

আদেশ:

adb shell settings put global hidden_api_policy  1

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

adb shell settings delete global hidden_api_policy
অ্যান্ড্রয়েড 9 (এপিআই স্তর 28)

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

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

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

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

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

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

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

নন-এসডিকে এপিআই কি একই অ্যান্ড্রয়েড সংস্করণগুলির সাথে বিভিন্ন ওএম ডিভাইসে একই তালিকা তৈরি করে?

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

নেটিভ কোডে নন-এনডিকে ইন্টারফেসগুলিতে কোনও বিধিনিষেধ রয়েছে?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

অ্যান্ড্রয়েড 16 (এপিআই স্তর 36) এর জন্য, আপনি নীচের ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

অ্যান্ড্রয়েড 15 (এপিআই স্তর 35) এর জন্য, আপনি নীচের ফাইলটি ডাউনলোড করতে পারেন যা নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলির সমস্ত বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

অ্যান্ড্রয়েড 14 (এপিআই স্তর 34) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলির সমস্ত বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

অ্যান্ড্রয়েড 13 (এপিআই স্তর 33) এর জন্য, আপনি নীচের ফাইলটি ডাউনলোড করতে পারেন যা নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলির সমস্ত বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

অ্যান্ড্রয়েড 12 (এপিআই স্তর 31) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

অ্যান্ড্রয়েড 12-এ অ্যান্ড্রয়েড 12-এ প্রস্তাবিত পাবলিক এপিআই বিকল্পগুলি সহ অ্যান্ড্রয়েড 12-এ প্রস্তাবিত পাবলিক এপিআই বিকল্পগুলি সহ নন-এসডিকে এপিআই তালিকার পরিবর্তনগুলি সম্পর্কে আরও জানতে, অ্যান্ড্রয়েড 12 এর জন্য তালিকা পরিবর্তনগুলি দেখুন।

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

অ্যান্ড্রয়েড 11 (এপিআই স্তর 30) এর জন্য, আপনি নীচের ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

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

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

অ্যান্ড্রয়েড 10 (এপিআই স্তর 29) এর জন্য, আপনি নীচের ফাইলটি ডাউনলোড করতে পারেন যা নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলির সমস্ত বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

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

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

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

ব্লকলিস্ট ( blacklist ) এবং শর্তসাপেক্ষে অবরুদ্ধ এপিআই (ডার্কগ্রে তালিকা) এর তালিকা বিল্ড টাইমে উত্পন্ন হয়েছে।

এওএসপি থেকে তালিকা তৈরি করুন

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

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 নিক্ষেপ

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

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

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

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

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

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

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

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

স্ট্রিটমোড এপিআই ব্যবহার করে পরীক্ষা করুন

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

ভারিডেক্স সরঞ্জাম ব্যবহার করে পরীক্ষা করুন

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

ভারিডেক্স সরঞ্জামের সীমাবদ্ধতার মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

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

উইন্ডোজ

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

উবুন্টু ইনস্টল হওয়ার পরে, একটি উবুন্টু টার্মিনাল চালু করুন এবং তারপরে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড রানটাইম প্রিবিল্টস রিপোজিটরি থেকে ভারিডেক্স সরঞ্জামটি ডাউনলোড করুন।
  2. appcompat.tar.gz ফাইলের সামগ্রীগুলি বের করুন।
  3. নিষ্কাশিত ফোল্ডারে, veridex-linux.zip ফাইলটি সনাক্ত করুন এবং এটি বের করুন।
  4. আনজিপড ফোল্ডারে নেভিগেট করুন এবং তারপরে নিম্নলিখিত কমান্ডটি চালান, যেখানে your-app.apk আপনি পরীক্ষা করতে চান এমন APK:

    ./appcompat.sh --dex-file=your-app.apk
    

macOS

ম্যাকোসে ভারিডেক্স সরঞ্জাম চালানোর জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড রানটাইম প্রিবিল্টস রিপোজিটরি থেকে ভারিডেক্স সরঞ্জামটি ডাউনলোড করুন।
  2. appcompat.tar.gz ফাইলের সামগ্রীগুলি বের করুন।
  3. নিষ্কাশিত ফোল্ডারে, veridex-mac.zip ফাইলটি সনাক্ত করুন এবং এটি বের করুন।
  4. আনজিপড ফোল্ডারে নেভিগেট করুন এবং তারপরে নিম্নলিখিত কমান্ডটি চালান, যেখানে /path-from-root/your-app.apk আপনার সিস্টেমের রুট ডিরেক্টরি থেকে শুরু করে আপনি যে এপিকে পরীক্ষা করতে চান তার পথ:

    ./appcompat.sh --dex-file=/path-from-root/your-app.apk
    

লিনাক্স

লিনাক্সে ভারিডেক্স সরঞ্জাম চালানোর জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড রানটাইম প্রিবিল্টস রিপোজিটরি থেকে ভারিডেক্স সরঞ্জামটি ডাউনলোড করুন।
  2. appcompat.tar.gz ফাইলের সামগ্রীগুলি বের করুন।
  3. নিষ্কাশিত ফোল্ডারে, veridex-linux.zip ফাইলটি সনাক্ত করুন এবং এটি বের করুন।
  4. আনজিপড ফোল্ডারে নেভিগেট করুন এবং তারপরে নিম্নলিখিত কমান্ডটি চালান, যেখানে your-app.apk আপনি পরীক্ষা করতে চান এমন APK:

    ./appcompat.sh --dex-file=your-app.apk
    

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

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

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

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

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

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

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

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

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

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

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

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

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

সাধারণ প্রশ্ন

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

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

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

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

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

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

অ্যান্ড্রয়েড 10 (এপিআই স্তর 29) বা উচ্চতর

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

আদেশ:

adb shell settings put global hidden_api_policy  1

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

adb shell settings delete global hidden_api_policy
অ্যান্ড্রয়েড 9 (এপিআই স্তর 28)

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

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

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

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

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

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

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

নন-এসডিকে এপিআই কি একই অ্যান্ড্রয়েড সংস্করণগুলির সাথে বিভিন্ন ওএম ডিভাইসে একই তালিকা তৈরি করে?

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

নেটিভ কোডে নন-এনডিকে ইন্টারফেসগুলিতে কোনও বিধিনিষেধ রয়েছে?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

অ্যান্ড্রয়েড 16 (এপিআই স্তর 36) এর জন্য, আপনি নীচের ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

অ্যান্ড্রয়েড 15 (এপিআই স্তর 35) এর জন্য, আপনি নীচের ফাইলটি ডাউনলোড করতে পারেন যা নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলির সমস্ত বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

অ্যান্ড্রয়েড 14 (এপিআই স্তর 34) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলির সমস্ত বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

অ্যান্ড্রয়েড 13 (এপিআই স্তর 33) এর জন্য, আপনি নীচের ফাইলটি ডাউনলোড করতে পারেন যা নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলির সমস্ত বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

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

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

অ্যান্ড্রয়েড 12 (এপিআই স্তর 31) এর জন্য, আপনি নিম্নলিখিত ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

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

অ্যান্ড্রয়েড 12-এ অ্যান্ড্রয়েড 12-এ প্রস্তাবিত পাবলিক এপিআই বিকল্পগুলি সহ অ্যান্ড্রয়েড 12-এ প্রস্তাবিত পাবলিক এপিআই বিকল্পগুলি সহ নন-এসডিকে এপিআই তালিকার পরিবর্তনগুলি সম্পর্কে আরও জানতে, অ্যান্ড্রয়েড 12 এর জন্য তালিকা পরিবর্তনগুলি দেখুন।

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

অ্যান্ড্রয়েড 11 (এপিআই স্তর 30) এর জন্য, আপনি নীচের ফাইলটি ডাউনলোড করতে পারেন যা সমস্ত নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলি বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56

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

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

অ্যান্ড্রয়েড 10 (এপিআই স্তর 29) এর জন্য, আপনি নীচের ফাইলটি ডাউনলোড করতে পারেন যা নন-এসডিকে ইন্টারফেস এবং তাদের সম্পর্কিত তালিকাগুলির সমস্ত বর্ণনা করে:

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb

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

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

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

ব্লকলিস্ট ( blacklist ) এবং শর্তসাপেক্ষে অবরুদ্ধ এপিআই (ডার্কগ্রে তালিকা) এর তালিকা বিল্ড টাইমে উত্পন্ন হয়েছে।

এওএসপি থেকে তালিকা তৈরি করুন

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

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 নিক্ষেপ

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

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

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

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

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

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

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

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

স্ট্রিটমোড এপিআই ব্যবহার করে পরীক্ষা করুন

আপনি StrictMode এপিআই ব্যবহার করে নন-এসডিকে ইন্টারফেসের জন্যও পরীক্ষা করতে পারেন। এটি সক্ষম করতে detectNonSdkApiUsage পদ্ধতিটি ব্যবহার করুন। StrictMode এপিআই সক্ষম করার পরে, আপনি penaltyListener ব্যবহার করে একটি নন-এসডিকে ইন্টারফেসের প্রতিটি ব্যবহারের জন্য একটি কলব্যাক পেতে পারেন, যেখানে আপনি কাস্টম হ্যান্ডলিং বাস্তবায়ন করতে পারেন। The Violation object provided in the callback derives from Throwable , and the enclosed stack trace provides the context of the usage.

Test using the veridex tool

You can also run the veridex static analysis tool on your APK. The veridex tool scans the entire codebase of the APK, including any third-party libraries, and reports any uses of non-SDK interfaces that it finds.

Limitations of the veridex tool include the following:

  • It can't detect invocations through JNI.
  • It can detect only a subset of invocations through reflection.
  • Its analysis for inactive code paths is limited to API level checks.
  • It can only be run on machines that support SSE4.2 and POPCNT instructions.

উইন্ডোজ

Native Windows binaries are not provided, but you can run the veridex tool on Windows by executing the Linux binaries using the Windows Subsystem for Linux (WSL). Before following the steps in this section, install the WSL and choose Ubuntu as your Linux distribution.

After Ubuntu is installed, launch a Ubuntu terminal and then follow these steps:

  1. Download the veridex tool from the Android runtime prebuilts repository.
  2. Extract the contents of the appcompat.tar.gz file.
  3. In the extracted folder, locate the veridex-linux.zip file and extract it.
  4. Navigate to the unzipped folder and then run the following command, where your-app.apk is the APK that you want to test:

    ./appcompat.sh --dex-file=your-app.apk
    

macOS

To run the veridex tool on macOS, follow these steps:

  1. Download the veridex tool from the Android runtime prebuilts repository.
  2. Extract the contents of the appcompat.tar.gz file.
  3. In the extracted folder, locate the veridex-mac.zip file and extract it.
  4. Navigate to the unzipped folder and then run the following command, where /path-from-root/your-app.apk is the path to the APK that you want to test, starting from your system's root directory:

    ./appcompat.sh --dex-file=/path-from-root/your-app.apk
    

লিনাক্স

To run the veridex tool on Linux, follow these steps:

  1. Download the veridex tool from the Android runtime prebuilts repository.
  2. Extract the contents of the appcompat.tar.gz file.
  3. In the extracted folder, locate the veridex-linux.zip file and extract it.
  4. Navigate to the unzipped folder and then run the following command, where your-app.apk is the APK that you want to test:

    ./appcompat.sh --dex-file=your-app.apk
    

Test using the Android Studio lint tool

Whenever you build your app in Android Studio, the lint tool inspects your code for potential issues. If your app uses non-SDK interfaces, you might see build errors or warnings, depending on which list those interfaces belong to.

You can also run the lint tool from the command line or run inspections manually on a specific project, folder, or file.

Test using the Play Console

When you upload your app to a testing track in the Play Console, your app is automatically tested for potential issues and a pre-launch report is generated. If your app uses non-SDK interfaces, an error or warning displays in the pre-launch report, depending on which list those interfaces belong to.

For more information, see the Android Compatibility section in Use pre-launch reports to identify issues .

Request a new public API

If you cannot find an alternative to using a non-SDK interface for a feature in your app, you can request a new public API by creating a feature request in our issue tracker.

When creating a feature request, provide the following information:

  • Which unsupported API you are using, including the full descriptor seen in the Accessing hidden ... logcat message.
  • Why you need to use these APIs, including details about the high-level feature that the API is necessary for, not just low level details.
  • Why any related public SDK APIs are insufficient for your purposes.
  • Any other alternatives you have tried and why these didn't work out.

When you provide these details in your feature request, you increase the likelihood that a new public API will be granted.

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

This section includes some answers to other questions that developers have frequently asked:

সাধারণ প্রশ্ন

How can Google be sure they can capture the needs of all apps through the issuetracker?

We created the initial lists for Android 9 (API level 28) through static analysis of apps that was supplemented using the following methods:

  • manual testing of top Play and non-Play apps
  • অভ্যন্তরীণ রিপোর্ট
  • automatic data collection from internal users
  • developer preview reports
  • additional static analysis that was designed to conservatively include more false positives

As we evaluate the lists for each new release, we take into account API usage as well as developer feedback through the issue tracker.

How can I enable access to non-SDK interfaces?

You can enable access to non-SDK interfaces on development devices by using adb commands to change the API enforcement policy. The commands that you use vary, depending on the API level. These commands don't require a rooted device.

Android 10 (API level 29) or higher

To enable access, use the following adb

আদেশ:

adb shell settings put global hidden_api_policy  1

To reset the API enforcement policy to the default settings, use the following command:

adb shell settings delete global hidden_api_policy
Android 9 (API level 28)

To enable access, use the following adb commands:

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

To reset the API enforcement policy to the default settings, use the following commands:

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

You can set the integer in the API enforcement policy to one of the following values:

  • 0: Disable all detection of non-SDK interfaces. Using this setting disables all log messages for non-SDK interface usage and prevents you from testing your app using the StrictMode API . এই সেটিং সুপারিশ করা হয় না.
  • 1: Enable access to all non-SDK interfaces, but print log messages with warnings for any non-SDK interface usage. Using this setting also lets you test your app using the StrictMode API .
  • 2: Disallow usage of non-SDK interfaces that belong to the blocklist or are conditionally blocked for your target API level .

Questions about non-SDK interface lists

Where can I find the non-SDK API lists in the system image?

They are encoded in the field and method access flag bits in platform dex files. There is no separate file in the system image that contains these lists.

Are the non-SDK API lists the same on different OEM devices with the same Android versions?

OEMs can add their own interfaces to the blocklist (blacklist), but they cannot remove interfaces from the AOSP non-SDK API lists. The CDD prevents such changes and CTS tests ensure that the Android Runtime is enforcing the list.

Is there any restriction on non-NDK interfaces in native code?

The Android SDK includes Java interfaces. The platform started restricting access to non-NDK interfaces for native C/C++ code in Android 7 (API level 26). For more information, see Improving Stability with Private C/C++ Symbol Restrictions in Android N .

Is there any plan to restrict dex2oat or DEX file manipulation?

We don't have active plans to restrict access to the dex2oat binary, but we don't intend for the DEX file format to be stable or a public interface beyond the portions that are publicly specified in the Dalvik Executable format . We reserve the right to modify or eliminate dex2oat and the unspecified portions of the DEX format at any time. Also note that derived files produced by dex2oat such as ODEX (also known as OAT), VDEX, and CDEX are all unspecified formats.

What if a crucial third-party SDK (for example, an obfuscator) cannot avoid using non-SDK interfaces, but does commit to maintain compatibility with future Android versions? Can Android waive its compatibility requirements in this case?

We don't have plans to waive compatibility requirements on a per-SDK basis. If an SDK developer can only maintain compatibility by depending on interfaces in the unsupported (formerly grey) lists, they should begin planning a migration to SDK interfaces or other alternatives, and request a new public API whenever they cannot find an alternative to using a non-SDK interface.

Do non-SDK interface restrictions apply to all apps including system and first-party apps, not just third-party apps?

Yes, however, we exempt apps signed with the platform key and some system image apps. Note that these exemptions only apply to apps that are part of the system image (or updated system image apps). The list is intended only for apps that build against the private platform APIs, rather than the SDK APIs (where LOCAL_PRIVATE_PLATFORM_APIS := true ).