আচরণ পরিবর্তন: Android 11 টার্গেট করা অ্যাপ

পূর্ববর্তী রিলিজের মতো, Android 11-এও আচরণগত পরিবর্তন রয়েছে যা আপনার অ্যাপকে প্রভাবিত করতে পারে। নিম্নলিখিত আচরণগত পরিবর্তনগুলি কেবলমাত্র Android 11 বা তার উচ্চতর সংস্করণগুলিকে লক্ষ্য করে এমন অ্যাপগুলির ক্ষেত্রে প্রযোজ্য। যদি আপনার অ্যাপ targetSdkVersion 30 তে সেট করে, তাহলে প্রযোজ্য ক্ষেত্রে এই আচরণগুলিকে সঠিকভাবে সমর্থন করার জন্য আপনার অ্যাপটি পরিবর্তন করা উচিত।

অ্যান্ড্রয়েড ১১-এ চলমান সমস্ত অ্যাপকে প্রভাবিত করে এমন আচরণগত পরিবর্তনের তালিকাটিও পর্যালোচনা করতে ভুলবেন না।

গোপনীয়তা

ব্যবহারকারীর গোপনীয়তা বাড়ানোর জন্য অ্যান্ড্রয়েড ১১ কিছু পরিবর্তন এবং বিধিনিষেধ প্রবর্তন করেছে, যার মধ্যে রয়েছে:

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

আরও জানতে, গোপনীয়তা পৃষ্ঠাটি দেখুন।

নিরাপত্তা

হিপ পয়েন্টার ট্যাগিং

বিবরণ পরিবর্তন করুন

নাম পরিবর্তন করুন : NATIVE_HEAP_POINTER_TAGGING

আইডি পরিবর্তন করুন : 135754954

কিভাবে টগল করবেন

অ্যান্ড্রয়েড ১১ এর সাথে আপনার অ্যাপের সামঞ্জস্যতা পরীক্ষা করার সময়, আপনি নিম্নলিখিত ADB কমান্ডগুলি ব্যবহার করে এই পরিবর্তনটি চালু বা বন্ধ করতে পারেন:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

সামঞ্জস্যতা কাঠামো এবং টগলিং পরিবর্তন সম্পর্কে আরও তথ্যের জন্য, আপনার অ্যাপে প্ল্যাটফর্ম আচরণের পরিবর্তনগুলি পরীক্ষা এবং ডিবাগ করুন দেখুন।

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

এই বৈশিষ্ট্যটি অক্ষম করতে, allowNativeHeapPointerTagging ম্যানিফেস্ট ডকুমেন্টেশন দেখুন।

টোস্টের আপডেট

ব্যাকগ্রাউন্ড থেকে কাস্টম টোস্ট ব্লক করা হয়েছে

নিরাপত্তার কারণে এবং ব্যবহারকারীর অভিজ্ঞতা ভালো রাখার জন্য, সিস্টেমটি কাস্টম ভিউ ধারণকারী টোস্টগুলিকে ব্লক করে, যদি সেই টোস্টগুলি ব্যাকগ্রাউন্ড থেকে এমন কোনও অ্যাপ দ্বারা পাঠানো হয় যা Android 11 বা তার বেশি ভার্সনকে লক্ষ্য করে। মনে রাখবেন যে টেক্সট টোস্টগুলি এখনও অনুমোদিত; এগুলি Toast.makeText() ব্যবহার করে তৈরি টোস্ট যা setView() কল করে না।

যদি আপনার অ্যাপটি ব্যাকগ্রাউন্ড থেকে একটি কাস্টম ভিউ সম্বলিত একটি টোস্ট পোস্ট করার চেষ্টা করে, তাহলে সিস্টেমটি ব্যবহারকারীকে বার্তাটি দেখায় না। পরিবর্তে, সিস্টেমটি logcat-এ নিম্নলিখিত বার্তাটি লগ করে:

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

টোস্ট কলব্যাক

যদি আপনি চান যে কোনও টোস্ট (টেক্সট বা কাস্টম) প্রদর্শিত বা অদৃশ্য হয়ে গেলে আপনাকে অবহিত করা হোক, তাহলে addCallback() পদ্ধতিটি ব্যবহার করুন, যা Android 11-এ যোগ করা হয়েছিল।

টেক্সট টোস্ট API পরিবর্তন

অ্যান্ড্রয়েড ১১ বা তার পরবর্তী ভার্সনের জন্য তৈরি অ্যাপগুলি টেক্সট টোস্টের জন্য নিম্নলিখিত পার্শ্বপ্রতিক্রিয়াগুলি দেখতে পায়:

  • getView() পদ্ধতিটি null প্রদান করে।
  • নিম্নলিখিত পদ্ধতিগুলির রিটার্ন মানগুলি প্রকৃত মানগুলিকে প্রতিফলিত করে না, তাই আপনার অ্যাপে তাদের উপর নির্ভর করা উচিত নয়:
  • নিম্নলিখিত পদ্ধতিগুলি নো-অপস, তাই আপনার অ্যাপের এগুলি ব্যবহার করা উচিত নয়:

সংযোগ

APN ডাটাবেসে পঠন অ্যাক্সেস সীমিত করা হয়েছে

বিবরণ পরিবর্তন করুন

নাম পরিবর্তন করুন : APN_READING_PERMISSION_CHANGE_ID

আইডি পরিবর্তন করুন : 124107808

কিভাবে টগল করবেন

অ্যান্ড্রয়েড ১১ এর সাথে আপনার অ্যাপের সামঞ্জস্যতা পরীক্ষা করার সময়, আপনি নিম্নলিখিত ADB কমান্ডগুলি ব্যবহার করে এই পরিবর্তনটি চালু বা বন্ধ করতে পারেন:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

সামঞ্জস্যতা কাঠামো এবং টগলিং পরিবর্তন সম্পর্কে আরও তথ্যের জন্য, আপনার অ্যাপে প্ল্যাটফর্ম আচরণের পরিবর্তনগুলি পরীক্ষা এবং ডিবাগ করুন দেখুন।

অ্যান্ড্রয়েড ১১-কে টার্গেট করে এমন অ্যাপগুলির এখন টেলিফোনি প্রদানকারীর APN ডাটাবেস পড়ার বা অ্যাক্সেস করার জন্য Manifest.permission.WRITE_APN_SETTINGS বিশেষ অনুমতি প্রয়োজন। এই অনুমতি ছাড়া APN ডাটাবেস অ্যাক্সেস করার চেষ্টা করলে একটি নিরাপত্তা ব্যতিক্রম তৈরি হয়।

অ্যাক্সেসযোগ্যতা

ম্যানিফেস্ট ফাইলে TTS ইঞ্জিনের সাথে মিথস্ক্রিয়া ঘোষণা করুন

প্যাকেজ দৃশ্যমানতার পরিবর্তনের কারণে, যেসব অ্যাপ অ্যান্ড্রয়েড ১১-কে লক্ষ্য করে এবং টেক্সট-টু-স্পিচ (TTS) ইঞ্জিনের সাথে ইন্টারঅ্যাক্ট করে তাদের ম্যানিফেস্ট ফাইলগুলিতে নিম্নলিখিত <queries> উপাদান যোগ করতে হবে:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

মেটাডেটা ফাইলে অ্যাক্সেসিবিলিটি বোতামের ব্যবহার ঘোষণা করুন

বিবরণ পরিবর্তন করুন

নাম পরিবর্তন করুন : REQUEST_ACCESSIBILITY_BUTTON_CHANGE

আইডি পরিবর্তন করুন : 136293963

কিভাবে টগল করবেন

অ্যান্ড্রয়েড ১১ এর সাথে আপনার অ্যাপের সামঞ্জস্যতা পরীক্ষা করার সময়, আপনি নিম্নলিখিত ADB কমান্ডগুলি ব্যবহার করে এই পরিবর্তনটি চালু বা বন্ধ করতে পারেন:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

সামঞ্জস্যতা কাঠামো এবং টগলিং পরিবর্তন সম্পর্কে আরও তথ্যের জন্য, আপনার অ্যাপে প্ল্যাটফর্ম আচরণের পরিবর্তনগুলি পরীক্ষা এবং ডিবাগ করুন দেখুন।

অ্যান্ড্রয়েড ১১ থেকে শুরু করে, আপনার অ্যাক্সেসিবিলিটি পরিষেবা রানটাইম ঘোষণা করতে পারে না যে এটি সিস্টেমের অ্যাক্সেসিবিলিটি বোতামের সাথে সম্পর্কিত । যদি আপনি AccessibilityServiceInfo অবজেক্টের flags সম্পত্তিতে AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON যোগ করেন, তাহলে ফ্রেমওয়ার্কটি আপনার পরিষেবাতে অ্যাক্সেসিবিলিটি বোতাম কলব্যাক ইভেন্টগুলি পাস করে না।

আপনার অ্যাক্সেসিবিলিটি পরিষেবাতে অ্যাক্সেসিবিলিটি কলব্যাক ইভেন্টগুলি পেতে, অ্যাক্সেসিবিলিটি বোতামের সাথে আপনার পরিষেবার সম্পর্ক ঘোষণা করতে আপনার অ্যাক্সেসিবিলিটি পরিষেবা মেটাডেটা ফাইলটি ব্যবহার করুন। accessibilityFlags অ্যাট্রিবিউটের সংজ্ঞায় flagRequestAccessibilityButton মানটি অন্তর্ভুক্ত করুন। অ্যাক্সেসিবিলিটি পরিষেবা মেটাডেটা ফাইলের জন্য একটি সাধারণ অবস্থান হল res/raw/accessibilityservice.xml

ক্যামেরা

মিডিয়া ইন্টেন্ট অ্যাকশনের জন্য সিস্টেম ডিফল্ট ক্যামেরা প্রয়োজন

অ্যান্ড্রয়েড ১১ থেকে শুরু করে, শুধুমাত্র আগে থেকে ইনস্টল করা সিস্টেম ক্যামেরা অ্যাপগুলি নিম্নলিখিত উদ্দেশ্যমূলক ক্রিয়াগুলিতে সাড়া দিতে পারে:

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

অ্যাপ প্যাকেজিং এবং ইনস্টলেশন

সংকুচিত রিসোর্স ফাইল

বিবরণ পরিবর্তন করুন

নাম পরিবর্তন করুন : RESOURCES_ARSC_COMPRESSED

আইডি পরিবর্তন করুন : 132742131

কিভাবে টগল করবেন

অ্যান্ড্রয়েড ১১ এর সাথে আপনার অ্যাপের সামঞ্জস্যতা পরীক্ষা করার সময়, আপনি নিম্নলিখিত ADB কমান্ডগুলি ব্যবহার করে এই পরিবর্তনটি চালু বা বন্ধ করতে পারেন:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

সামঞ্জস্যতা কাঠামো এবং টগলিং পরিবর্তন সম্পর্কে আরও তথ্যের জন্য, আপনার অ্যাপে প্ল্যাটফর্ম আচরণের পরিবর্তনগুলি পরীক্ষা এবং ডিবাগ করুন দেখুন।

Android 11 (API লেভেল 30) বা তার বেশি ভার্সনের অ্যাপগুলি ইনস্টল করা যাবে না যদি সেগুলিতে একটি সংকুচিত resources.arsc ফাইল থাকে অথবা যদি এই ফাইলটি 4-বাইট সীমানায় সারিবদ্ধ না থাকে। এই শর্তগুলির মধ্যে কোন একটি উপস্থিত থাকলে সিস্টেম দ্বারা এই ফাইলটি মেমোরি-ম্যাপ করা যাবে না। যে রিসোর্স টেবিলগুলি মেমোরি-ম্যাপ করা যাবে না সেগুলি RAM-এর একটি বাফারে পড়তে হবে, যার ফলে সিস্টেমের উপর অপ্রয়োজনীয় মেমোরি চাপ পড়বে এবং ডিভাইসে RAM ব্যবহার অনেক বেড়ে যাবে।

যদি আপনি আগে একটি সংকুচিত resources.arsc ফাইল ব্যবহার করে থাকেন, তাহলে বিকল্প কৌশলগুলি চেষ্টা করে দেখুন, যেমন অ্যাপ রিসোর্স সঙ্কুচিত করা অথবা আপনার অ্যাপ সঙ্কুচিত, অস্পষ্ট এবং অপ্টিমাইজ করার অন্যান্য পদ্ধতি।

APK সিগনেচার স্কিম v2 এখন প্রয়োজন

যেসব অ্যাপ অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) টার্গেট করে এবং বর্তমানে শুধুমাত্র APK সিগনেচার স্কিম v1 ব্যবহার করে স্বাক্ষরিত, সেগুলোকে এখন APK সিগনেচার স্কিম v2 বা তার উচ্চতর ব্যবহার করে স্বাক্ষরিত হতে হবে। ব্যবহারকারীরা অ্যান্ড্রয়েড ১১ চালিত ডিভাইসে শুধুমাত্র APK সিগনেচার স্কিম v1 দিয়ে স্বাক্ষরিত অ্যাপ ইনস্টল বা আপডেট করতে পারবেন না।

আপনার অ্যাপটি APK Signature Scheme v2 বা উচ্চতর সংস্করণ দিয়ে স্বাক্ষরিত হচ্ছে কিনা তা যাচাই করতে, আপনি Android Studio অথবা কমান্ড লাইনে apksigner টুল ব্যবহার করতে পারেন।

ফায়ারবেস

ফায়ারবেস জবডিসপ্যাচার এবং জিসিএমনেটওয়ার্ক ম্যানেজার

যদি আপনার অ্যাপটি API লেভেল 30 বা তার বেশি টার্গেট করে, তাহলে Android 6.0 (API লেভেল 23) বা তার বেশি চলমান ডিভাইসগুলিতে Firebase JobDispatcher এবং GcmNetworkManager API কলগুলি অক্ষম করা হয়। মাইগ্রেশন সম্পর্কিত তথ্যের জন্য, Firebase JobDispatcher থেকে WorkManager এ মাইগ্রেট করা এবং GCMNetworkManager থেকে WorkManager এ মাইগ্রেট করা দেখুন।

বক্তৃতা স্বীকৃতি

প্যাকেজ দৃশ্যমানতার পরিবর্তনের কারণে, যেসব অ্যাপ Android 11-কে লক্ষ্য করে এবং স্পিচ রিকগনিশন পরিষেবার সাথে ইন্টারঅ্যাক্ট করে তাদের ম্যানিফেস্ট ফাইলগুলিতে নিম্নলিখিত <queries> উপাদান যোগ করতে হবে:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

OnSharedPreferenceChangeListener এর জন্য কলব্যাক পরিবর্তন

বিবরণ পরিবর্তন করুন

নাম পরিবর্তন করুন : CALLBACK_ON_CLEAR_CHANGE

আইডি পরিবর্তন করুন : 119147584

কিভাবে টগল করবেন

অ্যান্ড্রয়েড ১১ এর সাথে আপনার অ্যাপের সামঞ্জস্যতা পরীক্ষা করার সময়, আপনি নিম্নলিখিত ADB কমান্ডগুলি ব্যবহার করে এই পরিবর্তনটি চালু বা বন্ধ করতে পারেন:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

সামঞ্জস্যতা কাঠামো এবং টগলিং পরিবর্তন সম্পর্কে আরও তথ্যের জন্য, আপনার অ্যাপে প্ল্যাটফর্ম আচরণের পরিবর্তনগুলি পরীক্ষা এবং ডিবাগ করুন দেখুন।

Android 11 (API লেভেল 30) টার্গেট করা অ্যাপগুলির জন্য, যখনই Editor.clear কল করা হয়, তখনই OnSharedPreferenceChangeListener.onSharedPreferenceChanged এ একটি null কী দিয়ে কলব্যাক করা হয়।

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

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

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

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

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