স্কোপড স্টোরেজ অ্যাপের এক্সটার্নাল স্টোরেজ ব্যবহারের সুযোগ সীমিত করে। অ্যান্ড্রয়েড ১১ বা তার পরবর্তী সংস্করণগুলোতে, যে অ্যাপগুলো এপিআই ৩০ বা তার উচ্চতর সংস্করণকে টার্গেট করে, সেগুলোকে অবশ্যই স্কোপড স্টোরেজ ব্যবহার করতে হবে। এর আগে অ্যান্ড্রয়েড ১০-এ, অ্যাপগুলো স্কোপড স্টোরেজ ব্যবহার না করার সুযোগ পেত।
অ্যাপ অ্যাক্সেস সীমাবদ্ধতা
স্কোপড স্টোরেজের লক্ষ্য হলো অ্যাপ এবং ব্যবহারকারীর ডেটার গোপনীয়তা রক্ষা করা। এর মধ্যে অন্তর্ভুক্ত রয়েছে ব্যবহারকারীর তথ্য (যেমন ছবির মেটাডেটা) সুরক্ষিত রাখা, সুস্পষ্ট অনুমতি ছাড়া অ্যাপকে ব্যবহারকারীর ফাইল পরিবর্তন বা মুছে ফেলা থেকে বিরত রাখা এবং ডাউনলোড বা অন্যান্য ফোল্ডারে ডাউনলোড করা সংবেদনশীল ব্যবহারকারী নথি সুরক্ষিত রাখা।
স্কোপড স্টোরেজ ব্যবহারকারী অ্যাপগুলির নিম্নলিখিত স্তরের অ্যাক্সেস থাকতে পারে (প্রকৃত অ্যাক্সেস বাস্তবায়ন-নির্ভর)।
- কোনো অনুমতি ছাড়াই তাদের নিজেদের ফাইলগুলিতে পড়া এবং লেখার অ্যাক্সেস।
-
READ_EXTERNAL_STORAGEঅনুমতির মাধ্যমে অন্যান্য অ্যাপের মিডিয়া ফাইল পড়ার অ্যাক্সেস। - অন্যান্য অ্যাপের মিডিয়া ফাইলে লেখার অনুমতি শুধুমাত্র ব্যবহারকারীর সরাসরি সম্মতির মাধ্যমেই দেওয়া হয় (ব্যতিক্রম হিসেবে সিস্টেম গ্যালারি এবং ‘সকল ফাইল’ অ্যাক্সেসের জন্য যোগ্য অ্যাপগুলোকে অনুমতি দেওয়া হয়)।
- অন্যান্য অ্যাপের বাহ্যিক অ্যাপ ডেটা ডিরেক্টরিতে পড়া বা লেখার অ্যাক্সেস নেই।
FUSE-এর সাথে স্কোপড স্টোরেজ ব্যবহার করুন
অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণ ফাইলসিস্টেম ইন ইউজারস্পেস (FUSE) সমর্থন করে, যা মিডিয়াপ্রোভাইডার মডিউলকে ইউজার স্পেসে ফাইল অপারেশনগুলো পরীক্ষা করতে এবং পলিসির উপর ভিত্তি করে ফাইল অ্যাক্সেস অনুমোদন , প্রত্যাখ্যান বা গোপন করার জন্য নিয়ন্ত্রণ করতে সক্ষম করে। স্কোপড স্টোরেজে থাকা যে অ্যাপগুলো FUSE ব্যবহার করে, তারা স্কোপড স্টোরেজের গোপনীয়তার বৈশিষ্ট্যগুলো পায় এবং সরাসরি ফাইল পাথ ব্যবহার করে ফাইল অ্যাক্সেস করার ক্ষমতা লাভ করে (অ্যাপগুলোতে ফাইল এপিআই সচল রেখে)।
অ্যান্ড্রয়েড ১০ মিডিয়াপ্রোভাইডার দ্বারা ফাইল অ্যাক্সেসের ক্ষেত্রে স্কোপড স্টোরেজ নিয়ম প্রয়োগ করেছিল, কিন্তু কার্নেল কল ইন্টারসেপ্ট করার জন্য প্রয়োজনীয় প্রচেষ্টার কারণে সরাসরি ফাইল পাথ অ্যাক্সেসের (উদাহরণস্বরূপ, ফাইল এপিআই এবং এনডিকে এপিআই ব্যবহার করে) ক্ষেত্রে তা করেনি। ফলে, স্কোপড স্টোরেজে থাকা অ্যাপগুলো সরাসরি ফাইল পাথ ব্যবহার করে ফাইল অ্যাক্সেস করতে পারত না। এই সীমাবদ্ধতা অ্যাপ ডেভেলপারদের মানিয়ে নেওয়ার ক্ষমতাকে প্রভাবিত করেছিল, কারণ ফাইল এপিআই অ্যাক্সেসকে মিডিয়াপ্রোভাইডার এপিআই-তে নতুন করে লেখার জন্য কোডে যথেষ্ট পরিবর্তন আনার প্রয়োজন হতো।
FUSE এবং SDCardFS
অ্যান্ড্রয়েড ১১-এ FUSE-এর সমর্থন SDCardFS-এর ব্যবহার বন্ধ করার সাথে সম্পর্কিত নয়, তবে এটি সেইসব ডিভাইসের জন্য মিডিয়া স্টোরের একটি বিকল্প প্রদান করে যেগুলো আগে SDCardFS ব্যবহার করত। ডিভাইসসমূহ:
- কার্নেল ৫.৪ বা তার উচ্চতর সংস্করণ ব্যবহার করে অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণে লঞ্চ করলে SDCardFS ব্যবহার করা যাবে না।
- অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণে আপগ্রেড করলে ফাইল অপারেশনগুলো ইন্টারসেপ্ট করতে এবং গোপনীয়তার লক্ষ্য পূরণের জন্য SDCardFS-এর উপরে FUSE হোস্ট করা যায়।
ফিউজ পারফরম্যান্স টিউনিং
পূর্বে অ্যান্ড্রয়েড ৭ বা তার নিচের সংস্করণগুলোতে FUSE সাপোর্ট করত, যেখানে এক্সটার্নাল স্টোরেজ FUSE হিসেবে মাউন্ট করা হতো। সেই FUSE ইমপ্লিমেন্টেশনের পারফরম্যান্স এবং ডেডলক সমস্যার কারণে, অ্যান্ড্রয়েড ৮-এ SDCardFS চালু করা হয়। অ্যান্ড্রয়েড ১১-এ libfuse এর একটি উন্নত ও ভালোভাবে পরীক্ষিত ইমপ্লিমেন্টেশন ব্যবহার করে FUSE-এর সাপোর্ট পুনরায় চালু করা হয়েছে, যা অ্যান্ড্রয়েড ৭ বা তার নিচের সংস্করণগুলোর পারফরম্যান্স সমস্যা সমাধানের জন্য টিউন করা যেতে পারে।
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-এর পারফরম্যান্সের উপর প্রভাব শুধুমাত্র এক্সটার্নাল শেয়ার্ড স্টোরেজে সংরক্ষিত ফাইলগুলির ভারী ব্যবহারকারীদের মধ্যেই সীমাবদ্ধ। এক্সটার্নাল প্রাইভেট স্টোরেজ (যার মধ্যে android/data এবং android/obb ডিরেক্টরি অন্তর্ভুক্ত) FUSE দ্বারা বাইপাস করা হয়, অন্যদিকে ইন্টারনাল স্টোরেজ (যেমন /data/data , যেখানে অনেক অ্যাপ তাদের ডেটা এনক্রিপ্টেড ও সুরক্ষিত রাখতে সংরক্ষণ করে) FUSE দ্বারা মাউন্ট করা হয় না।
যেসব অ্যাপ শেয়ার করা এক্সটার্নাল স্টোরেজ খুব কম ব্যবহার করে, সেগুলো প্রায়শই সীমিত সংখ্যক ফাইলের (সাধারণত ১০০টিরও কম ফাইল) সাথে কাজ করে। এই অ্যাপগুলো সাধারণ রিড এবং রাইট অপারেশনের বিদ্যমান অপটিমাইজেশন থেকে সুবিধা পায় এবং অ্যান্ড্রয়েড ১১-এ FUSE-সম্পর্কিত কোনো পারফরম্যান্সের প্রভাব এদের উপর পড়ার কথা নয়।
যেসব অ্যাপ শেয়ার করা এক্সটার্নাল স্টোরেজ ব্যাপকভাবে ব্যবহার করে, সেগুলো সাধারণত একসাথে অনেকগুলো ফাইল নিয়ে কাজ করে থাকে; যেমন—১০০০ ফাইলসহ কোনো ডিরেক্টরির তালিকা তৈরি করা বা তা মুছে ফেলা, অথবা ফাইল সিস্টেমে দশ লক্ষ ফাইলসহ কোনো ডিরেক্টরি তৈরি বা ডিলিট করা। অ্যান্ড্রয়েড ১১-এ 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 সিস্টেম কম্পোনেন্টের আচরণ ভিন্ন হয়ে থাকে।
অ্যান্ড্রয়েড ১০ এবং এর পূর্ববর্তী সংস্করণগুলোতে SDCardFS ছিল ফাইল সিস্টেম এবং MediaProvider ফাইল কালেকশনগুলোর (যেমন, ছবি, ভিডিও, মিউজিক ফাইল ইত্যাদি) জন্য একটি ইন্টারফেস প্রদান করত। যখন কোনো অ্যাপ File API ব্যবহার করে একটি ফাইল তৈরি করত, তখন সেটি MediaProvider-কে ফাইলটি স্ক্যান করে ডেটাবেসে রেকর্ড করার জন্য অনুরোধ করতে পারত।
অ্যান্ড্রয়েড ১১ বা তার পরবর্তী সংস্করণগুলিতে, SDCardFS অপ্রচলিত হয়ে গেছে এবং MediaProvider এক্সটার্নাল স্টোরেজের জন্য (FUSE-এর) ফাইল সিস্টেম হ্যান্ডলার হিসেবে কাজ করে, যা এক্সটার্নাল স্টোরেজের ফাইল সিস্টেম এবং MediaProvider ডেটাবেসকে সামঞ্জস্যপূর্ণ করে তোলে। FUSE ফাইল সিস্টেমের ইউজারস্পেস হ্যান্ডলার হিসেবে, MediaProvider কার্নেল কলগুলিকে ইন্টারসেপ্ট করতে পারে এবং ফাইল অপারেশনগুলির গোপনীয়তা সুরক্ষিত রাখতে পারে।
অ্যান্ড্রয়েড ১১ এবং তার পরবর্তী সংস্করণগুলিতে, মিডিয়াপ্রোভাইডার একটি মডিউলার সিস্টেম কম্পোনেন্ট (একটি মেইনলাইন মডিউল) হিসেবেও কাজ করে, যা অ্যান্ড্রয়েড রিলিজের বাইরেও আপডেট করা যায়। এর মানে হলো, মিডিয়াপ্রোভাইডারে পাওয়া পারফরম্যান্স, গোপনীয়তা বা নিরাপত্তা সংক্রান্ত সমস্যাগুলো গুগল প্লে স্টোর বা অন্যান্য পার্টনার-প্রদত্ত পদ্ধতির মাধ্যমে ওভার-দ্য-এয়ার (OTA) পদ্ধতিতে সমাধান ও সরবরাহ করা যেতে পারে। একটি FUSE হ্যান্ডলার থেকে যা কিছু প্রত্যাশিত, তার আওতাভুক্ত সবকিছুই আপডেটযোগ্য, যা FUSE-এর পারফরম্যান্স রিগ্রেশন এবং বাগগুলো ঠিক করার জন্য আপডেটগুলোকে সক্ষম করে।