নন-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" মানে পাই বা অ্যান্ড্রয়েড 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 ইন্টারফেসের তালিকা প্ল্যাটফর্মের অংশ হিসেবে তৈরি করা হয়েছে। প্রতিটি অ্যান্ড্রয়েড রিলিজ সম্পর্কে তথ্যের জন্য নিম্নলিখিত বিভাগগুলি দেখুন।

Android 16 (ডেভেলপার প্রিভিউ)

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

ফাইল: hiddenapi-flags.csv

SHA-256 চেকসাম: a22d5c2fa9c24ec0b864f0680208e9794222d1921114abe3245979143ce6d1c6

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 ইন্টারফেস বা অন্যান্য বিকল্পগুলিতে স্থানান্তরের পরিকল্পনা করা শুরু করা এবং যখনই তারা একটি নন ব্যবহার করার বিকল্প খুঁজে না পায় তখন একটি নতুন পাবলিক API অনুরোধ করা। -SDK ইন্টারফেস।

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

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