আচরণ পরিবর্তন: সমস্ত অ্যাপ্লিকেশন

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

শুধুমাত্র Android 11-কে লক্ষ্য করে এমন অ্যাপগুলিকে প্রভাবিত করে এমন আচরণগত পরিবর্তনের তালিকাটিও পর্যালোচনা করতে ভুলবেন না।

গোপনীয়তা

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

  • এককালীন অনুমতি : ব্যবহারকারীদের অবস্থান, মাইক্রোফোন এবং ক্যামেরার অনুমতিগুলিতে আরও অস্থায়ী অ্যাক্সেস দেওয়ার বিকল্প দেয়।
  • অনুমতি সংলাপের দৃশ্যমানতা : বারবার অনুমতি অস্বীকার করার অর্থ "আবার জিজ্ঞাসা করবেন না"।
  • ডেটা অ্যাক্সেস অডিটিং : আপনার অ্যাপটি কোথায় ব্যক্তিগত ডেটা অ্যাক্সেস করে সে সম্পর্কে অন্তর্দৃষ্টি অর্জন করুন, আপনার অ্যাপের নিজস্ব কোড এবং নির্ভরশীল লাইব্রেরির কোড উভয় ক্ষেত্রেই।
  • সিস্টেম অ্যালার্ট উইন্ডোর অনুমতি : অনুরোধের ভিত্তিতে নির্দিষ্ট শ্রেণীর অ্যাপগুলিকে স্বয়ংক্রিয়ভাবে SYSTEM_ALERT_WINDOW অনুমতি দেওয়া হয়। এছাড়াও, ACTION_MANAGE_OVERLAY_PERMISSION ইনটেন্ট অ্যাকশন অন্তর্ভুক্ত ইন্টেন্টগুলি ব্যবহারকারীদের সর্বদা সিস্টেম সেটিংসের একটি স্ক্রিনে নিয়ে আসে।
  • স্থায়ী সিম শনাক্তকারী : Android 11 এবং উচ্চতর ভার্সনে, getIccId() পদ্ধতির মাধ্যমে অ-রিসেটযোগ্য ICCID-গুলিতে অ্যাক্সেস সীমাবদ্ধ। পদ্ধতিটি একটি অ-নাল, খালি স্ট্রিং প্রদান করে। ডিভাইসে ইনস্টল করা সিম অনন্যভাবে সনাক্ত করতে, পরিবর্তে getSubscriptionId() পদ্ধতি ব্যবহার করুন। সাবস্ক্রিপশন আইডি একটি সূচক মান (1 থেকে শুরু) প্রদান করে যা ইনস্টল করা সিমগুলিকে অনন্যভাবে সনাক্ত করতে পারে, যার মধ্যে ফিজিক্যাল এবং ইলেকট্রনিক অন্তর্ভুক্ত। ডিভাইসটি ফ্যাক্টরি রিসেট না করা পর্যন্ত এই শনাক্তকারীর মান একটি নির্দিষ্ট সিমের জন্য স্থিতিশীল থাকে।

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

এক্সপোজার বিজ্ঞপ্তি

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

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

নিরাপত্তা

SSL সকেটগুলি ডিফল্টরূপে Conscrypt SSL ইঞ্জিন ব্যবহার করে

অ্যান্ড্রয়েডের ডিফল্ট SSLSocket বাস্তবায়ন Conscrypt এর উপর ভিত্তি করে। অ্যান্ড্রয়েড ১১ থেকে, সেই বাস্তবায়নটি অভ্যন্তরীণভাবে Conscrypt এর SSLEngine এর উপরে তৈরি করা হয়েছে।

স্কুডো হার্ডেনড অ্যালোকেটর

অ্যান্ড্রয়েড ১১ অভ্যন্তরীণভাবে হিপ অ্যালোকেশন পরিষেবা প্রদানের জন্য স্কুডো হার্ডেনড অ্যালোকেটর ব্যবহার করে। স্কুডো কিছু ধরণের মেমরি সুরক্ষা লঙ্ঘন সনাক্ত এবং প্রশমিত করতে সক্ষম। যদি আপনি নেটিভ ক্র্যাশ রিপোর্টে স্কুডো-সম্পর্কিত ক্র্যাশ (উদাহরণস্বরূপ, Scudo ERROR: ) দেখতে পান, তাহলে স্কুডো সমস্যা সমাধানের ডকুমেন্টেশনটি দেখুন।

অ্যাপ ব্যবহারের পরিসংখ্যান

ব্যবহারকারীদের আরও ভালোভাবে সুরক্ষিত করার জন্য, Android 11 প্রতিটি ব্যবহারকারীর অ্যাপ ব্যবহারের পরিসংখ্যান ক্রেডেনশিয়াল এনক্রিপ্টেড স্টোরেজে সংরক্ষণ করে। অতএব, সিস্টেম বা কোনও অ্যাপই সেই ডেটা অ্যাক্সেস করতে পারবে না যদি না isUserUnlocked() true ফেরত দেয়, যা নিম্নলিখিতগুলির মধ্যে একটি ঘটার পরে ঘটে:

  • সিস্টেম স্টার্টআপের পর ব্যবহারকারী প্রথমবারের মতো তাদের ডিভাইসটি আনলক করে।
  • ব্যবহারকারী ডিভাইসে তাদের অ্যাকাউন্টে স্যুইচ করেন।

যদি আপনার অ্যাপটি ইতিমধ্যেই UsageStatsManager এর একটি ইনস্ট্যান্সের সাথে আবদ্ধ থাকে, তাহলে ব্যবহারকারী তাদের ডিভাইস আনলক করার পরে এই অবজেক্টে মেথড কল করেছেন কিনা তা পরীক্ষা করুন। অন্যথায়, API এখন null বা খালি মান ফেরত দেবে।

5G এর জন্য এমুলেটর সাপোর্ট

অ্যান্ড্রয়েড ১১ আপনার অ্যাপগুলিকে অত্যাধুনিক বৈশিষ্ট্য যোগ করতে সক্ষম করার জন্য 5G API যোগ করে। বৈশিষ্ট্যগুলি যোগ করার সাথে সাথে পরীক্ষা করার জন্য, আপনি অ্যান্ড্রয়েড SDK এমুলেটরের নতুন ক্ষমতা ব্যবহার করতে পারেন। নতুন কার্যকারিতাটি এমুলেটর সংস্করণ 30.0.22 এ যোগ করা হয়েছে। 5G নেটওয়ার্ক সেটিং নির্বাচন করলে TelephonyDisplayInfo OVERRIDE_NETWORK_TYPE_NR_NSA তে সেট হয়, আনুমানিক ব্যান্ডউইথ পরিবর্তন হয় এবং আপনার অ্যাপ NET_CAPABILITY_TEMPORARILY_NOT_METERED স্ট্যাটাসের পরিবর্তনের জন্য যথাযথভাবে সাড়া দেয় কিনা তা যাচাই করার জন্য আপনাকে মিটারডনেস সেট করার অনুমতি দেয়।

কর্মক্ষমতা এবং ডিবাগিং

JobScheduler API কল ডিবাগিং সীমাবদ্ধ করে

Android 11 অ্যাপগুলির জন্য ডিবাগিং সাপোর্ট অফার করে যাতে নির্দিষ্ট রেট সীমা অতিক্রম করে এমন সম্ভাব্য JobScheduler API ইনভোকেশন সনাক্ত করা যায়। ডেভেলপাররা সম্ভাব্য কর্মক্ষমতা সমস্যা সনাক্ত করতে এই সুবিধাটি ব্যবহার করতে পারেন। debuggable ম্যানিফেস্ট অ্যাট্রিবিউট সত্য হিসাবে সেট করা অ্যাপগুলির জন্য, JobScheduler API ইনভোকেশন রেট সীমার বাইরে RESULT_FAILURE ফেরত দেবে। সীমা এমনভাবে সেট করা হয়েছে যাতে বৈধ ব্যবহারের ক্ষেত্রে কোনও প্রভাব না পড়ে।

ফাইল বর্ণনাকারী স্যানিটাইজার (fdsan)

অ্যান্ড্রয়েড ১০ চালু করেছে fdsan (ফাইল বর্ণনাকারী স্যানিটাইজার)। fdsan ফাইল বর্ণনাকারীর মালিকানার ভুল ব্যবস্থাপনা সনাক্ত করে, যেমন use-after-close এবং double-close। অ্যান্ড্রয়েড ১১-তে fdsan এর ডিফল্ট মোড পরিবর্তন হচ্ছে। fdsan এখন একটি ত্রুটি সনাক্ত করার পরে বাতিল হয়ে যায়; পূর্ববর্তী আচরণ ছিল একটি সতর্কতা লগ করা এবং চালিয়ে যাওয়া। যদি আপনি আপনার অ্যাপ্লিকেশনে fdsan এর কারণে ক্র্যাশ দেখতে পান, তাহলে fdsan documentation দেখুন।

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

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

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

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

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

Maps v1 শেয়ার্ড লাইব্রেরি সরানো হয়েছে

অ্যান্ড্রয়েড ১১-তে ম্যাপস শেয়ার্ড লাইব্রেরির V1 সম্পূর্ণরূপে সরিয়ে ফেলা হয়েছে। এই লাইব্রেরিটি পূর্বে বন্ধ করে দেওয়া হয়েছিল এবং অ্যান্ড্রয়েড ১০-এর অ্যাপগুলির জন্য কাজ করা বন্ধ করে দেওয়া হয়েছিল। যেসব অ্যাপ আগে অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) বা তার নিচের ভার্সন চালিত ডিভাইসগুলির জন্য এই শেয়ার্ড লাইব্রেরির উপর নির্ভর করেছিল, তাদের পরিবর্তে অ্যান্ড্রয়েডের জন্য ম্যাপস SDK ব্যবহার করা উচিত।

অন্যান্য অ্যাপের সাথে মিথস্ক্রিয়া

কন্টেন্টের URI শেয়ার করুন

যদি আপনার অ্যাপটি অন্য অ্যাপের সাথে একটি কন্টেন্ট URI শেয়ার করে, তাহলে ইনটেন্টকে নিম্নলিখিত ইনটেন্ট ফ্ল্যাগগুলির মধ্যে অন্তত একটি সেট করে URI অ্যাক্সেসের অনুমতি দিতে হবে: FLAG_GRANT_READ_URI_PERMISSION এবং FLAG_GRANT_WRITE_URI_PERMISSION । এইভাবে, যদি অন্য অ্যাপটি Android 11-কে টার্গেট করে, তবুও এটি কন্টেন্ট URI অ্যাক্সেস করতে পারে। আপনার অ্যাপটি এমন কোনও কন্টেন্ট প্রদানকারীর সাথে যুক্ত থাকলেও, যার মালিক আপনার অ্যাপ নয়, আপনার অ্যাপটিকে অবশ্যই ইনটেন্ট ফ্ল্যাগগুলি অন্তর্ভুক্ত করতে হবে।

যদি আপনার অ্যাপটি কন্টেন্ট URI-এর সাথে সম্পর্কিত কন্টেন্ট প্রদানকারীর মালিক হয়, তাহলে যাচাই করুন যে কন্টেন্ট প্রদানকারীটি রপ্তানি করা হয়নি । আমরা ইতিমধ্যেই এই নিরাপত্তা সর্বোত্তম অনুশীলনটি সুপারিশ করছি।

লাইব্রেরি লোড হচ্ছে

পরম পথ সহ ICU সাধারণ লাইব্রেরি লোড হচ্ছে

API 28 এবং তার নিচের ভার্সনগুলিকে লক্ষ্য করে এমন অ্যাপগুলি "/system/lib/libicuuc.so" পরম পাথ সহ libicuuc লোড করার জন্য dlopen(3) ব্যবহার করতে পারে না। এই অ্যাপগুলির জন্য, dlopen("/system/lib/libicuuc.so", ...) একটি নাল হ্যান্ডেল ফেরত দেবে।

পরিবর্তে, লাইব্রেরি লোড করার জন্য, দয়া করে ফাইলের নাম হিসেবে লাইব্রেরির নাম ব্যবহার করুন, উদাহরণস্বরূপ dlopen("libicuuc.so", ...)