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

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

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

গোপনীয়তা

অ্যান্ড্রয়েড 11 নিম্নলিখিতগুলি সহ ব্যবহারকারীর গোপনীয়তা বাড়ানোর জন্য একটি পরিবর্তন এবং বিধিনিষেধ প্রবর্তন করে:

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

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

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

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

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

নিরাপত্তা

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

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

স্কুডো শক্ত বরাদ্দকারী

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

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

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

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

যদি আপনার অ্যাপটি ইতিমধ্যেই UsageStatsManager এর একটি উদাহরণের সাথে আবদ্ধ হয়ে থাকে, তাহলে ব্যবহারকারী তাদের ডিভাইসটি আনলক করার পরে আপনি এই অবজেক্টে পদ্ধতিগুলি কল করেন কিনা তা পরীক্ষা করুন৷ অন্যথায়, API এখন শূন্য বা খালি মান প্রদান করে।

5G এর জন্য এমুলেটর সমর্থন

আপনার অ্যাপগুলিকে অত্যাধুনিক বৈশিষ্ট্যগুলি যোগ করতে সক্ষম করতে Android 11 5G API যোগ করে। আপনি বৈশিষ্ট্যগুলি যোগ করার সাথে সাথে পরীক্ষা করতে, আপনি Android 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)

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

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

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

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

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

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

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

অ্যান্ড্রয়েড 11-এ ম্যাপ শেয়ার্ড লাইব্রেরির V1 সম্পূর্ণভাবে মুছে ফেলা হয়েছে। এই লাইব্রেরিটি আগে অবহেলিত হয়েছিল এবং অ্যান্ড্রয়েড 10-এ অ্যাপগুলির জন্য কাজ করা বন্ধ করে দেওয়া হয়েছিল। যে অ্যাপগুলি আগে Android 9 (API লেভেল 28) বা তার কম চলমান ডিভাইসগুলির জন্য এই শেয়ার্ড লাইব্রেরির উপর নির্ভর করেছিল সেগুলি ব্যবহার করা উচিত। পরিবর্তে Android এর জন্য Maps SDK

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

কন্টেন্ট ইউআরআই শেয়ার করুন

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

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

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

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

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

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