স্কোপড স্টোরেজ এক্সটার্নাল স্টোরেজে অ্যাপ অ্যাক্সেস সীমিত করে। Android 11 বা এর পরের যেকোনও ভার্সনে, API 30 বা এর পরের যেকোনও ভার্সনকে টার্গেট করা অ্যাপকে অবশ্যই স্কোপ করা স্টোরেজ ব্যবহার করতে হবে। আগে Android 10-এ, অ্যাপ স্কোপ করা স্টোরেজ থেকে বেরিয়ে আসতে পারত।
অ্যাপ অ্যাক্সেস সংক্রান্ত বিধিনিষেধ
অ্যাপ ও ব্যবহারকারীর ডেটার গোপনীয়তা রক্ষা করাই হল স্কোপড স্টোরেজের লক্ষ্য। এর মধ্যে ব্যবহারকারীর তথ্য (যেমন, ফটোর মেটাডেটা) সুরক্ষিত রাখা, স্পষ্ট অনুমতি ছাড়া অ্যাপকে ব্যবহারকারীর ফাইল পরিবর্তন বা মুছে ফেলা থেকে আটকানো এবং Download বা অন্যান্য ফোল্ডারে ডাউনলোড করা সংবেদনশীল ব্যবহারকারীর ডকুমেন্ট সুরক্ষিত রাখা অন্তর্ভুক্ত।
স্কোপ করা স্টোরেজ ব্যবহার করা অ্যাপের নিম্নলিখিত লেভেলের অ্যাক্সেস থাকতে পারে (প্রকৃত অ্যাক্সেস হল প্রয়োগ-নির্দিষ্ট)।
- কোনও অনুমতি ছাড়াই নিজের ফাইল পড়া ও লেখার অ্যাক্সেস
- পড়ুন,
READ_EXTERNAL_STORAGEঅনুমতি সহ অন্যান্য অ্যাপের মিডিয়া ফাইল অ্যাক্সেস করা - অন্যান্য অ্যাপের মিডিয়া ফাইলে রাইট অ্যাক্সেস শুধুমাত্র ব্যবহারকারীর সরাসরি সম্মতি (সিস্টেম গ্যালারি এবং যেসব অ্যাপ 'সব ফাইল অ্যাক্সেস' ফিচারের জন্য উপযুক্ত সেগুলিকে ব্যতিক্রম হিসেবে গণ্য করা হয়) থাকলে দেওয়া হয়
- অন্য অ্যাপের এক্সটার্নাল অ্যাপ ডেটা ডিরেক্টরি পড়া বা লেখার অ্যাক্সেস নেই
FUSE-এর সাথে স্কোপড স্টোরেজ ব্যবহার করুন
Android 11 বা এর পরের যেকোনও ভার্সনে Userspace-এ ফাইলসিস্টেম (FUSE) কাজ করে। এটি MediaProvider মডিউলকে ইউজার স্পেসে ফাইল অপারেশন পরীক্ষা করতে এবং অনুমতি, প্রত্যাখ্যান, বা অ্যাক্সেস সম্পাদনা করার জন্য নীতি অনুযায়ী ফাইল অ্যাক্সেস করতে দেয়। স্কোপ করা স্টোরেজে থাকা যেসব অ্যাপ FUSE ব্যবহার করে সেগুলি স্কোপ করা স্টোরেজের গোপনীয়তা ফিচার এবং সরাসরি ফাইল পাথ ব্যবহার করে ফাইল অ্যাক্সেস করার ক্ষমতা পায় (এর ফলে অ্যাপে ফাইল API কাজ করতে থাকে)।
Android 10, MediaProvider-এর মাধ্যমে ফাইল অ্যাক্সেসের ক্ষেত্রে স্কোপড স্টোরেজ সংক্রান্ত নিয়ম এনফোর্স করে, কিন্তু কার্নেল কল ইন্টারসেপ্ট করার জন্য প্রয়োজনীয় প্রচেষ্টার কারণে সরাসরি ফাইল পাথ অ্যাক্সেসের (যেমন, File API এবং NDK API ব্যবহার করে) ক্ষেত্রে তা করে না। এর ফলে, স্কোপড স্টোরেজে থাকা অ্যাপগুলি সরাসরি ফাইল পাথ ব্যবহার করে ফাইল অ্যাক্সেস করতে পারেনি। এই বিধিনিষেধের কারণে অ্যাপ ডেভেলপারদের মানিয়ে নেওয়ার ক্ষমতা প্রভাবিত হয়েছে কারণ MediaProvider API-তে File API অ্যাক্সেস আবার লেখার জন্য কোডে যথেষ্ট পরিবর্তন করতে হয়েছে।
FUSE এবং SDCardFS
FUSE-এর জন্য Android 11 সহায়তা SDCardFS-এর অবলোপন সম্পর্কিত নয়, তবে যেসব ডিভাইস আগে SDCardFS ব্যবহার করত সেগুলির জন্য Media Store-এর বিকল্প প্রদান করে। ডিভাইস:
- Android 11 বা এর পরের যেকোনও ভার্সন ব্যবহার করে লঞ্চ করা হলে, kernel 5.4 বা এর পরের যেকোনও ভার্সন SDCardFS ব্যবহার করতে পারবে না।
- Android 11 বা তার পরবর্তী যেকোনও ভার্সনে আপগ্রেড করলে, ফাইল অপারেশন ইন্টারসেপ্ট করতে এবং গোপনীয়তা সংক্রান্ত লক্ষ্য পূরণ করতে SDCardFS-এর উপরে FUSE হোস্ট করা যেতে পারে।
FUSE পারফর্ম্যান্স টিউনিং
Android 7 বা তার আগের যেকোনও ভার্সনে Android আগে FUSE-এ কাজ করত, যেখানে এক্সটার্নাল
স্টোরেজ FUSE হিসেবে মাউন্ট করা থাকত। FUSE প্রয়োগের ক্ষেত্রে পারফর্ম্যান্স ও ডেডলক সংক্রান্ত সমস্যার কারণে, Android 8-এ SDCardFS চালু করা হয়েছে। Android
11-এ FUSE-এর জন্য সহায়তা আবার চালু করা হয়েছে। এর জন্য libfuse-এর উন্নত,
আরও ভালোভাবে পরীক্ষা করা ইমপ্লিমেন্টেশন ব্যবহার করা হয়েছে যা Android 7 বা তার আগের ভার্সনে
পারফর্ম্যান্স সংক্রান্ত সমস্যা সমাধান করার জন্য টিউন করা যেতে পারে।
FUSE টিউনিংয়ে নিম্নলিখিত পরিবর্তন অন্তর্ভুক্ত:
Android/dataএবংAndroid/obbডিরেক্টরির জন্য FUSE বাইপাস করা যাতে এইসব ডিরেক্টরির উপর নির্ভর করে এমন গেম অ্যাপের পারফর্ম্যান্স উন্নত করা যায়।- রিড পারফর্ম্যান্ট এবং মিডিয়া প্লেব্যাক মসৃণ রাখতে অপ্টিমাইজেশন (যেমন, FUSE ফাইল সিস্টেমের রিড-অ্যাহেড এবং ডার্টি রেশিও টিউনিং)।
- FUSE রাইট-ব্যাক ক্যাশে ব্যবহার করা হচ্ছে।
- সিস্টেম সার্ভারে IPC কমানোর জন্য ক্যাশিং সংক্রান্ত অনুমতি।
- বাল্ক অপারেশন আরও দ্রুত করার জন্য 'সব ফাইল' অ্যাক্সেস আছে এমন অ্যাপের জন্য অপ্টিমাইজেশন।
উপরের টিউনিং টুইকগুলি FUSE এবং নন-FUSE ডিভাইসের মধ্যে তুলনামূলক পারফর্ম্যান্স তৈরি করতে পারে। যেমন, FUSE ব্যবহার করে টিউন করা Pixel 2 এবং Media Store ব্যবহার করে Pixel 2 পরীক্ষা করে দেখা গেছে যে ফাইল পাথ অ্যাক্সেস এবং Media Store-এর মধ্যে তুলনামূলক সিকোয়েন্সিয়াল রিড পারফর্ম্যান্স (যেমন, ভিডিও প্লেব্যাক) পাওয়া গেছে। তবে, FUSE-এর সাথে সিকোয়েন্সিয়াল রাইট কিছুটা খারাপ ছিল এবং র্যান্ডম রিড ও রাইট দ্বিগুণ ধীর হতে পারে।
পারফর্ম্যান্স পরিমাপ করার পদ্ধতি ডিভাইস থেকে ডিভাইসে এবং নির্দিষ্ট ব্যবহারের ক্ষেত্রে আলাদা হতে পারে। MediaProvider API সবচেয়ে ধারাবাহিক পারফর্ম্যান্স দেয় বলে, পারফর্ম্যান্স নিয়ে চিন্তিত অ্যাপ ডেভেলপারদের উচিত তাদের অ্যাপের জন্য MediaProvider API ব্যবহার করা।
FUSE পারফর্ম্যান্সের উপর প্রভাব কমানো
FUSE পারফর্ম্যান্সের উপর প্রভাব শুধুমাত্র এক্সটার্নাল
শেয়ার করা স্টোরেজে সেভ করা ফাইলের হেভি ব্যবহারকারীদের ক্ষেত্রে সীমাবদ্ধ। FUSE-এর মাধ্যমে এক্সটার্নাল প্রাইভেট স্টোরেজ (যার মধ্যে android/data
ও android/obb ডিরেক্টরি অন্তর্ভুক্ত) বাইপাস করা হয়, তবে ইন্টার্নাল স্টোরেজ (যেমন, /data/data, যেখানে অনেক অ্যাপ এনক্রিপ্ট ও সুরক্ষিত রাখার জন্য ডেটা স্টোর করে)
FUSE মাউন্ট করা হয় না।
শেয়ার করা এক্সটার্নাল স্টোরেজ কম ব্যবহার করে এমন অ্যাপগুলি প্রায়ই সীমিত সংখ্যক ফাইলের (সাধারণত ১০০টির কম ফাইল) সাথে ইন্টার্যাক্ট করে। এইসব অ্যাপ সাধারণ রিড ও রাইট অপারেশনের বর্তমান অপ্টিমাইজেশন থেকে সুবিধা পায় এবং Android 11-এ FUSE-সম্পর্কিত পারফর্ম্যান্সের উপর কোনও প্রভাব দেখতে পাবে না।
যেসব অ্যাপ শেয়ার করা এক্সটার্নাল স্টোরেজ খুব বেশি ব্যবহার করে, সেগুলি সাধারণত একসাথে অনেক ফাইল অপারেশন পারফর্ম করে, যেমন ১০০০ ফাইল সহ ডিরেক্টরি তালিকাভুক্ত করা বা সরানো অথবা ফাইল সিস্টেমে এক মিলিয়ন ফাইল সহ ডিরেক্টরি তৈরি করা বা মুছে ফেলা। Android 11-এ FUSE-এর কারণে বাল্ক ফাইল অপারেশন প্রভাবিত হতে পারে, কিন্তু এই ধরনের অ্যাপ
MANAGE_EXTERNAL_STORAGEঅনুমতির জন্য উপযুক্ত হলে, অক্টোবর, ২০২০ আপডেটে অন্তর্ভুক্ত পারফর্ম্যান্স অপ্টিমাইজেশন থেকে সুবিধা পায়।
FUSE পারফর্ম্যান্স ওভারহেড এড়াতে, অ্যাপগুলি এক্সটার্নাল প্রাইভেট
স্টোরেজে ডেটা সেভ করতে পারে অথবা FUSE বাইপাস করতে এবং পারফর্ম্যান্স-অপ্টিমাইজ করা পাথ পেতে ContentProvider ক্লাসে
বাল্ক API ব্যবহার করতে পারে। এছাড়াও, MediaProvider সিস্টেম কম্পোনেন্টের অক্টোবর ২০২০-এর আপডেটে ফাইল ম্যানেজার এবং একই ধরনের অ্যাপের (যেমন ব্যাক-আপ/রিস্টোর, অ্যান্টিভাইরাস) জন্য পারফর্ম্যান্স অপ্টিমাইজেশন অন্তর্ভুক্ত রয়েছে, যার কাছে MANAGE_EXTERNAL_STORAGE অনুমতি রয়েছে।
পারফর্ম্যান্সের চেয়ে গোপনীয়তা বেশি গুরুত্বপূর্ণ
FUSE-এর জন্য টিউন করা ডিভাইসে, Android 10 ও Android 11-এর মধ্যে বেশিরভাগ গুরুত্বপূর্ণ ইউজার জার্নি একই রকম পারফর্ম করে। তবে, ফাইল অপারেশন সেটের উপর বেঞ্চমার্ক পরীক্ষা করার সময়, Android 11, Android 10-এর চেয়ে খারাপ পারফর্ম করতে পারে। Android 11-এ খারাপ পারফর্ম করা ফাইল অ্যাক্সেস প্যাটার্নের (যেমন, র্যান্ডম রিড বা রাইট) জন্য, আমরা অ্যাপকে নন-FUSE অ্যাক্সেস মোড দিতে MediaProvider API ব্যবহার করার সাজেশন দিই, এটি হল সবচেয়ে ভালো এবং ধারাবাহিকভাবে পারফর্ম করা বিকল্প।
MediaProvider ও FUSE আপডেট
MediaProvider সিস্টেম কম্পোনেন্ট এর আচরণ Android রিলিজের মধ্যে আলাদা আলাদা হয়।
Android 10 এবং তার আগের ভার্সনে, SDCardFS ছিল ফাইল সিস্টেম এবং MediaProvider ফাইলের সংগ্রহের (যেমন, ছবি, ভিডিও, মিউজিক ফাইল ইত্যাদি) জন্য একটি ইন্টারফেস প্রদান করে। কোনও অ্যাপ File API ব্যবহার করে ফাইল তৈরি করলে, সেটি MediaProvider-কে ফাইলটি স্ক্যান করতে এবং ডেটাবেসে রেকর্ড করতে বলতে পারে।
Android 11 বা তার পরবর্তী ভার্সনে, SDCardFS বন্ধ করে দেওয়া হয়েছে এবং এক্সটার্নাল স্টোরেজের জন্য MediaProvider ফাইল সিস্টেম হ্যান্ডলার (FUSE-এর জন্য) হয়ে যায়, যা এক্সটার্নাল স্টোরেজে ফাইল সিস্টেম এবং MediaProvider ডেটাবেসকে একই রকম করে তোলে। FUSE ফাইল সিস্টেমের জন্য ব্যবহারকারী স্পেস হ্যান্ডলার হিসেবে, MediaProvider কার্নেল কল ইন্টারসেপ্ট করতে এবং ফাইল অপারেশন গোপনীয়তা সুরক্ষিত কিনা তা নিশ্চিত করতে পারে।
Android 11 ও তার পরবর্তী যেকোনও ভার্সনে, MediaProvider হল একটি মডুলার সিস্টেম কম্পোনেন্ট (একটি Mainline মডিউল) যা Android রিলিজের বাইরে আপডেট করা যেতে পারে। এর অর্থ হল MediaProvider-এ পারফর্ম্যান্স, গোপনীয়তা বা নিরাপত্তা সংক্রান্ত সমস্যা পাওয়া গেলে তা Google Play Store বা পার্টনারের প্রদান করা অন্যান্য মেকানিজম থেকে ওভার-দ্য-এয়ার সমাধান করা ও ডেলিভার করা যাবে। FUSE হ্যান্ডলারের থেকে যা আশা করা হয় তার মধ্যে থাকা যেকোনও কিছু আপডেট করা যায়, এর ফলে FUSE পারফর্ম্যান্স রিগ্রেশন ও বাগ সংক্রান্ত সমস্যার সমাধান করা যায়।