অ্যান্ড্রয়েড ১১ প্ল্যাটফর্মে এমন কিছু আচরণগত পরিবর্তন আনা হয়েছে যা আপনার অ্যাপকে প্রভাবিত করতে পারে। targetSdkVersion নির্বিশেষে, অ্যান্ড্রয়েড ১১-এ চালিত সমস্ত অ্যাপের ক্ষেত্রে নিম্নলিখিত আচরণগত পরিবর্তনগুলো প্রযোজ্য। আপনার অ্যাপটি পরীক্ষা করে দেখা উচিত এবং তারপর, যেখানে প্রযোজ্য, এই পরিবর্তনগুলো সঠিকভাবে সমর্থন করার জন্য প্রয়োজন অনুযায়ী তাতে পরিবর্তন আনা উচিত।
অ্যান্ড্রয়েড ১১-কে লক্ষ্য করে তৈরি অ্যাপগুলোর ক্ষেত্রে প্রযোজ্য আচরণগত পরিবর্তনের তালিকাটিও পর্যালোচনা করতে ভুলবেন না।
গোপনীয়তা
ব্যবহারকারীর গোপনীয়তা বাড়াতে অ্যান্ড্রয়েড ১১ কিছু পরিবর্তন ও বিধিনিষেধ এনেছে, যার মধ্যে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত:
- এককালীন অনুমতি : ব্যবহারকারীদের অবস্থান, মাইক্রোফোন এবং ক্যামেরার অনুমতিতে আরও অস্থায়ী অ্যাক্সেস দেওয়ার বিকল্প দেয়।
- অনুমতি ডায়ালগের দৃশ্যমানতা : বারবার অনুমতি প্রত্যাখ্যান করার অর্থ হলো "আর জিজ্ঞাসা করবেন না।"
- ডেটা অ্যাক্সেস অডিটিং : আপনার অ্যাপের নিজস্ব কোড এবং নির্ভরশীল লাইব্রেরির কোড, উভয় ক্ষেত্রেই অ্যাপটি কোথা থেকে ব্যক্তিগত ডেটা অ্যাক্সেস করে, সে সম্পর্কে ধারণা লাভ করুন।
- সিস্টেম অ্যালার্ট উইন্ডোর অনুমতি : নির্দিষ্ট শ্রেণীর অ্যাপ অনুরোধের ভিত্তিতে স্বয়ংক্রিয়ভাবে
SYSTEM_ALERT_WINDOWঅনুমতি পেয়ে থাকে। এছাড়াও, যে ইন্টেন্টগুলোতেACTION_MANAGE_OVERLAY_PERMISSIONইন্টেন্ট অ্যাকশন অন্তর্ভুক্ত থাকে, সেগুলো সর্বদা ব্যবহারকারীদের সিস্টেম সেটিংসের একটি স্ক্রিনে নিয়ে যায়। - স্থায়ী সিম শনাক্তকারী : অ্যান্ড্রয়েড ১১ এবং তার পরবর্তী সংস্করণগুলিতে,
getIccId()পদ্ধতির মাধ্যমে রিসেট-অযোগ্য ICCID-গুলিতে অ্যাক্সেস সীমাবদ্ধ। এই পদ্ধতিটি একটি নন-নাল, খালি স্ট্রিং রিটার্ন করে। ডিভাইসে ইনস্টল করা কোনো সিমকে স্বতন্ত্রভাবে শনাক্ত করতে, এর পরিবর্তেgetSubscriptionId()পদ্ধতিটি ব্যবহার করুন। সাবস্ক্রিপশন আইডি ইনস্টল করা সিমগুলিকে (ফিজিক্যাল এবং ইলেকট্রনিক উভয়ই) স্বতন্ত্রভাবে শনাক্ত করার জন্য একটি ইনডেক্স ভ্যালু (১ থেকে শুরু) প্রদান করে। ডিভাইসটি ফ্যাক্টরি রিসেট না করা পর্যন্ত একটি নির্দিষ্ট সিমের জন্য এই শনাক্তকারীর মান স্থিতিশীল থাকে।
আরও জানতে, গোপনীয়তা পৃষ্ঠাটি দেখুন।
এক্সপোজার বিজ্ঞপ্তি
অ্যান্ড্রয়েড ১১ এক্সপোজার নোটিফিকেশন সিস্টেমকে মাথায় রেখে প্ল্যাটফর্মটি আপডেট করেছে। ব্যবহারকারীরা এখন ডিভাইসের লোকেশন সেটিং চালু না করেই অ্যান্ড্রয়েড ১১-এ এক্সপোজার নোটিফিকেশন অ্যাপ চালাতে পারবেন। তবে এটি শুধুমাত্র এক্সপোজার নোটিফিকেশন সিস্টেমের ক্ষেত্রেই একটি ব্যতিক্রম, কারণ এটিকে এমনভাবে ডিজাইন করা হয়েছে যে, এটি ব্যবহারকারী অ্যাপগুলো ব্লুটুথ স্ক্যানিংয়ের মাধ্যমে ডিভাইসের অবস্থান অনুমান করতে পারে না।
ব্যবহারকারীর গোপনীয়তা রক্ষার জন্য, ডিভাইসের লোকেশন সেটিং চালু না থাকলে এবং ব্যবহারকারী লোকেশনের অনুমতি না দিলে, অন্য সব অ্যাপের জন্য ব্লুটুথ স্ক্যানিং এখনও নিষিদ্ধ। আপনি আমাদের ‘এক্সপোজার নোটিফিকেশন সংক্রান্ত আপডেট’ পোস্টে এ বিষয়ে আরও বিস্তারিত পড়তে পারেন।
নিরাপত্তা
ডিফল্টরূপে SSL সকেটগুলো Conscrypt SSL ইঞ্জিন ব্যবহার করে।
অ্যান্ড্রয়েডের ডিফল্ট SSLSocket ইমপ্লিমেন্টেশনটি Conscrypt-এর উপর ভিত্তি করে তৈরি। অ্যান্ড্রয়েড ১১ থেকে, এই ইমপ্লিমেন্টেশনটি অভ্যন্তরীণভাবে Conscrypt-এর SSLEngine এর উপর নির্মিত হয়।
স্কুডো হার্ডেন্ড অ্যালোকেটর
অ্যান্ড্রয়েড ১১ হিপ অ্যালোকেশন পরিষেবা দেওয়ার জন্য অভ্যন্তরীণভাবে স্কুডো হার্ডেনড অ্যালোকেটর ব্যবহার করে। স্কুডো কিছু নির্দিষ্ট ধরণের মেমরি সেফটি ভায়োলেশন শনাক্ত ও প্রশমিত করতে সক্ষম। আপনি যদি নেটিভ ক্র্যাশ রিপোর্টে স্কুডো-সম্পর্কিত ক্র্যাশ (উদাহরণস্বরূপ, Scudo ERROR: ) দেখতে পান, তাহলে স্কুডো ট্রাবলশুটিং ডকুমেন্টেশন দেখুন।
অ্যাপ ব্যবহারের পরিসংখ্যান
ব্যবহারকারীদের আরও ভালোভাবে সুরক্ষিত রাখতে, অ্যান্ড্রয়েড ১১ প্রতিটি ব্যবহারকারীর অ্যাপ ব্যবহারের পরিসংখ্যান ক্রেডেনশিয়াল এনক্রিপ্টেড স্টোরেজে সংরক্ষণ করে। তাই, সিস্টেম বা কোনো অ্যাপই সেই ডেটা অ্যাক্সেস করতে পারে না, যতক্ষণ না isUserUnlocked() ফাংশনটি true রিটার্ন করে, যা নিম্নলিখিত ঘটনাগুলোর মধ্যে কোনো একটি ঘটার পরে ঘটে থাকে:
- সিস্টেম চালু হওয়ার পর ব্যবহারকারী প্রথমবারের মতো তার ডিভাইসটি আনলক করেন।
- ব্যবহারকারী ডিভাইসে নিজের অ্যাকাউন্টে প্রবেশ করেন।
আপনার অ্যাপ যদি আগে থেকেই UsageStatsManager এর কোনো ইনস্ট্যান্সের সাথে বাইন্ড করা থাকে, তবে ব্যবহারকারী তাদের ডিভাইস আনলক করার পর এই অবজেক্টের মেথডগুলো কল করা হচ্ছে কিনা তা নিশ্চিত করুন। অন্যথায়, API-টি এখন null বা খালি ভ্যালু রিটার্ন করবে।
5G এর জন্য এমুলেটর সমর্থন
অ্যান্ড্রয়েড ১১-এ ৫জি এপিআই যুক্ত করা হয়েছে, যা আপনার অ্যাপে অত্যাধুনিক ফিচার যোগ করার সুযোগ দেবে। ফিচারগুলো যোগ করার সাথে সাথে তা পরীক্ষা করার জন্য, আপনি অ্যান্ড্রয়েড এসডিকে এমুলেটরের নতুন সুবিধাগুলো ব্যবহার করতে পারেন। এই নতুন কার্যকারিতাটি এমুলেটর ভার্সন ৩০.০.২২-এ যোগ করা হয়েছে। ৫জি নেটওয়ার্ক সেটিং নির্বাচন করলে TelephonyDisplayInfo মান OVERRIDE_NETWORK_TYPE_NR_NSA তে সেট হয়, আনুমানিক ব্যান্ডউইথ পরিবর্তিত হয় এবং NET_CAPABILITY_TEMPORARILY_NOT_METERED স্ট্যাটাসের পরিবর্তনে আপনার অ্যাপ যথাযথভাবে সাড়া দিচ্ছে কিনা তা যাচাই করার জন্য মিটারডনেস সেট করার সুযোগ দেয়।

পারফরম্যান্স এবং ডিবাগিং
JobScheduler API কল ডিবাগিং সীমাবদ্ধ করে
অ্যান্ড্রয়েড ১১ অ্যাপগুলোকে নির্দিষ্ট রেট লিমিট অতিক্রম করা সম্ভাব্য JobScheduler API ইনভোকেশন শনাক্ত করার জন্য ডিবাগিং সাপোর্ট প্রদান করে। ডেভেলপাররা সম্ভাব্য পারফরম্যান্স সমস্যা শনাক্ত করতে এই সুবিধাটি ব্যবহার করতে পারেন। যেসব অ্যাপের debuggable manifest’ অ্যাট্রিবিউট ‘true’ সেট করা আছে, সেগুলোতে রেট লিমিট অতিক্রমকারী JobScheduler API ইনভোকেশন RESULT_FAILURE রিটার্ন করবে। লিমিটগুলো এমনভাবে নির্ধারণ করা হয়েছে যাতে বৈধ ব্যবহারের ক্ষেত্রগুলো প্রভাবিত না হয়।
ফাইল বর্ণনাকারী স্যানিটাইজার (fdsan)
অ্যান্ড্রয়েড ১০-এ fdsan (ফাইল ডেসক্রিপ্টর স্যানিটাইজার) চালু করা হয়েছে। fdsan ফাইল ডেসক্রিপ্টরের মালিকানার ভুল পরিচালনা, যেমন use-after-close এবং double-close, শনাক্ত করে। অ্যান্ড্রয়েড ১১-এ fdsan এর ডিফল্ট মোড পরিবর্তিত হচ্ছে। fdsan এখন কোনো ত্রুটি শনাক্ত করলে প্রক্রিয়াটি বন্ধ করে দেয়; এর আগের আচরণ ছিল একটি সতর্কবার্তা লগ করে কাজ চালিয়ে যাওয়া। আপনার অ্যাপ্লিকেশনে fdsan এর কারণে ক্র্যাশ হতে দেখলে, fdsan documentation দেখুন।
নন-এসডিকে ইন্টারফেস সীমাবদ্ধতা
অ্যান্ড্রয়েড ডেভেলপারদের সাথে সহযোগিতা এবং সর্বশেষ অভ্যন্তরীণ পরীক্ষার উপর ভিত্তি করে অ্যান্ড্রয়েড ১১-এ সীমাবদ্ধ নন-এসডিকে ইন্টারফেসের হালনাগাদ তালিকা অন্তর্ভুক্ত করা হয়েছে। যখনই সম্ভব, আমরা নন-এসডিকে ইন্টারফেস সীমাবদ্ধ করার আগে নিশ্চিত করি যে সেগুলোর পাবলিক বিকল্প উপলব্ধ আছে।
আপনার অ্যাপটি যদি অ্যান্ড্রয়েড ১১-কে টার্গেট না করে, তবে এই পরিবর্তনগুলোর কিছু হয়তো আপনাকে তাৎক্ষণিকভাবে প্রভাবিত করবে না। তবে, যদিও আপনি বর্তমানে কিছু নন-এসডিকে ইন্টারফেস ব্যবহার করতে পারবেন ( যা আপনার অ্যাপের টার্গেট এপিআই লেভেলের উপর নির্ভর করে ), যেকোনো নন-এসডিকে মেথড বা ফিল্ড ব্যবহার করলে আপনার অ্যাপটি ভেঙে যাওয়ার উচ্চ ঝুঁকি সবসময়ই থাকে।
আপনার অ্যাপ নন-এসডিকে ইন্টারফেস ব্যবহার করে কিনা, সে বিষয়ে আপনি অনিশ্চিত থাকলে, তা জানার জন্য আপনার অ্যাপটি পরীক্ষা করে দেখতে পারেন। যদি আপনার অ্যাপ নন-এসডিকে ইন্টারফেসের উপর নির্ভরশীল হয়, তবে আপনার এসডিকে বিকল্পগুলিতে স্থানান্তরের পরিকল্পনা শুরু করা উচিত। তা সত্ত্বেও, আমরা বুঝি যে কিছু অ্যাপের ক্ষেত্রে নন-এসডিকে ইন্টারফেস ব্যবহারের যৌক্তিক কারণ থাকে। যদি আপনি আপনার অ্যাপের কোনো ফিচারের জন্য নন-এসডিকে ইন্টারফেস ব্যবহারের কোনো বিকল্প খুঁজে না পান, তবে আপনার একটি নতুন পাবলিক এপিআই-এর জন্য অনুরোধ করা উচিত।
অ্যান্ড্রয়েডের এই সংস্করণের পরিবর্তনগুলো সম্পর্কে আরও জানতে, অ্যান্ড্রয়েড ১১-এ নন-এসডিকে ইন্টারফেস সীমাবদ্ধতার আপডেট দেখুন। সাধারণভাবে নন-এসডিকে ইন্টারফেস সম্পর্কে আরও জানতে, নন-এসডিকে ইন্টারফেসের উপর সীমাবদ্ধতা দেখুন।
Maps v1 শেয়ার্ড লাইব্রেরি সরানো হয়েছে
অ্যান্ড্রয়েড ১১-এ ম্যাপস শেয়ার্ড লাইব্রেরির ভি১ (V1) সম্পূর্ণরূপে সরিয়ে ফেলা হয়েছে। এই লাইব্রেরিটি আগেই ডেপ্রিকেটেড (deprecated) করা হয়েছিল এবং অ্যান্ড্রয়েড ১০-এর অ্যাপগুলোর জন্য এটি কাজ করা বন্ধ করে দিয়েছিল। যেসব অ্যাপ আগে অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) বা তার নিচের সংস্করণের ডিভাইসের জন্য এই শেয়ার্ড লাইব্রেরির ওপর নির্ভর করত, তাদের পরিবর্তে অ্যান্ড্রয়েডের জন্য ম্যাপস এসডিকে (Maps SDK for Android ) ব্যবহার করা উচিত।
অন্যান্য অ্যাপের সাথে মিথস্ক্রিয়া
কন্টেন্ট ইউআরআই শেয়ার করুন
যদি আপনার অ্যাপ অন্য কোনো অ্যাপের সাথে একটি কন্টেন্ট ইউআরআই শেয়ার করে, তাহলে ইন্টেন্টটিকে অবশ্যই নিম্নলিখিত ইন্টেন্ট ফ্ল্যাগগুলির মধ্যে অন্তত একটি সেট করে ইউআরআই অ্যাক্সেসের অনুমতি দিতে হবে : FLAG_GRANT_READ_URI_PERMISSION এবং FLAG_GRANT_WRITE_URI_PERMISSION । এর ফলে, যদি অন্য অ্যাপটি অ্যান্ড্রয়েড ১১ টার্গেট করে, তবুও এটি কন্টেন্ট ইউআরআইটি অ্যাক্সেস করতে পারবে। আপনার অ্যাপের মালিকানাধীন নয় এমন কোনো কন্টেন্ট প্রোভাইডারের সাথে কন্টেন্ট ইউআরআইটি যুক্ত থাকলেও আপনার অ্যাপকে অবশ্যই ইন্টেন্ট ফ্ল্যাগগুলি অন্তর্ভুক্ত করতে হবে।
যদি আপনার অ্যাপটি কন্টেন্ট URI-এর সাথে যুক্ত কন্টেন্ট প্রোভাইডারটির মালিক হয়, তবে যাচাই করুন যে কন্টেন্ট প্রোভাইডারটি এক্সপোর্ট করা হয়নি । আমরা ইতিমধ্যেই এই নিরাপত্তা সংক্রান্ত সর্বোত্তম অনুশীলনটির সুপারিশ করে থাকি।
লাইব্রেরি লোড হচ্ছে
অ্যাবসোলিউট পাথ ব্যবহার করে ICU কমন লাইব্রেরি লোড করা হচ্ছে
API 28 এবং তার নিচের সংস্করণকে লক্ষ্য করে তৈরি অ্যাপগুলি "/system/lib/libicuuc.so" এই অ্যাবসোলিউট পাথ দিয়ে libicuuc লোড করার জন্য dlopen(3) ব্যবহার করতে পারে না। সেইসব অ্যাপের ক্ষেত্রে, dlopen("/system/lib/libicuuc.so", ...) একটি নাল হ্যান্ডেল রিটার্ন করবে।
এর পরিবর্তে, লাইব্রেরি লোড করার জন্য ফাইলের নাম হিসেবে লাইব্রেরির নামটি ব্যবহার করুন, যেমন dlopen("libicuuc.so", ...) ।