Android সময়ের সাথে সাথে বিভিন্ন ধরনের স্টোরেজ ডিভাইস ও ফিচার সাপোর্ট করার জন্য উন্নত হয়েছে। Android-এর সব ভার্সন প্রথাগত স্টোরেজ সহ ডিভাইসে কাজ করে, যার মধ্যে পোর্টেবল ও এমুলেট করা স্টোরেজ অন্তর্ভুক্ত। পোর্টেবল স্টোরেজ প্রদান করা যেতে পারে SD কার্ড বা USB-এর মতো ফিজিক্যাল মিডিয়ার মাধ্যমে, যা সাময়িক ডেটা ট্রান্সফার/ ফাইল স্টোরেজের জন্য ব্যবহার করা হয়। ফিজিক্যাল মিডিয়া ডিভাইসের সাথে দীর্ঘ সময় ধরে থাকতে পারে, তবে এটি ডিভাইসের সাথে যুক্ত নয় এবং সরিয়ে দেওয়া হতে পারে। Android 1.0 থেকে পোর্টেবল স্টোরেজ হিসেবে এসডি কার্ড উপলভ্য; Android 6.0-এ USB সাপোর্ট যোগ করা হয়েছে। এমুলেটেড স্টোরেজ প্রদান করা হয় এমুলেশন লেয়ারের মাধ্যমে ইন্টার্নাল স্টোরেজের একটি অংশ এক্সপোজ করে এবং এটি Android 3.0 থেকে উপলভ্য।
Android 6.0 থেকে শুরু করে, Android অ্যাডপ্টেবেল স্টোরেজ সাপোর্ট করে, যা এসডি কার্ড বা ইউএসবির মতো ফিজিক্যাল মিডিয়া দ্বারা প্রদান করা হয়, যা এনক্রিপ্ট করা এবং ইন্টার্নাল স্টোরেজের মতো কাজ করার জন্য ফর্ম্যাট করা হয়। অ্যাডপ্টেবল স্টোরেজে সব ধরনের অ্যাপ্লিকেশন ডেটা সেভ করা যায়।
অনুমতি
এক্সটার্নাল স্টোরেজে অ্যাক্সেস বিভিন্ন Android অনুমতির মাধ্যমে সুরক্ষিত করা হয়।
Android 1.0 থেকে শুরু করে, রাইট অ্যাক্সেস
WRITE_EXTERNAL_STORAGE অনুমতির মাধ্যমে সুরক্ষিত করা হয়। Android 4.1 থেকে শুরু করে, read
অ্যাক্সেস READ_EXTERNAL_STORAGE অনুমতি দিয়ে সুরক্ষিত করা হয়।
Android 4.4 থেকে শুরু করে, এক্সটার্নাল
স্টোরেজ ডিভাইসে ফাইলের মালিক, গ্রুপ ও মোড এখন ডিরেক্টরি স্ট্রাকচারের উপর ভিত্তি করে সিন্থেসাইজ করা হয়। এর ফলে,
অ্যাপগুলি এক্সটার্নাল স্টোরেজে তাদের প্যাকেজ-নির্দিষ্ট ডিরেক্টরিগুলি ম্যানেজ করতে পারে,
যার জন্য তাদের WRITE_EXTERNAL_STORAGE-এর মতো বিস্তৃত অনুমতি প্রয়োজন হয় না।
যেমন, com.example.foo প্যাকেজ নামের অ্যাপটি এখন
কোনও অনুমতি ছাড়াই এক্সটার্নাল স্টোরেজ
ডিভাইসে Android/data/com.example.foo/ অবাধে অ্যাক্সেস করতে পারবে। এইসব সিন্থেসাইজ করা অনুমতি FUSE ডেমনে কাঁচা স্টোরেজ ডিভাইস
র্যাপ করার মাধ্যমে সম্পন্ন করা হয়।
Android 10 থেকে শুরু করে, Android 9
ও তার আগের ভার্সনের জন্য তৈরি করা অ্যাপ ডিফল্ট হিসেবে লেগ্যাসি স্টোরেজ ব্যবহার করে এবং আইসোলেটেড স্টোরেজে অপ্ট-ইন করতে পারে।
Android 10-কে টার্গেট করে এবং ডিফল্ট হিসেবে আইসোলেটেড
স্টোরেজ ব্যবহার করে এমন অ্যাপ এটি থেকে সাময়িকভাবে অপ্ট-আউট করতে পারে। ডিফল্ট স্টেট পরিবর্তন করতে, স্টোরেজ মডেল কন্ট্রোল করে এমন ম্যানিফেস্ট অ্যাট্রিবিউট
requestLegacyExternalStorage, ব্যবহার করুন।
যেহেতু READ_EXTERNAL_STORAGE এবং
WRITE_EXTERNAL_STORAGE উভয় অনুমতিই
সফ্ট-সীমাবদ্ধ, তাই ইনস্টলার যদি অ্যাপটিকে হোয়াইটলিস্ট না করে, তাহলে
অনুমতিটি শুধুমাত্র অডিও এবং ভিজ্যুয়াল সংগ্রহের অ্যাক্সেস নিয়ন্ত্রণ করে, এসডি কার্ডে কোনও অ্যাক্সেস থাকে না। অ্যাপটি লিগ্যাসি স্টোরেজের জন্য অনুরোধ করলেও
এটি প্রযোজ্য। হার্ড বিধিনিষেধ ও সফট বিধিনিষেধ সম্পর্কে আরও জানতে,
Android 10-এ হার্ড ও সফট বিধিনিষেধ দেখুন।
ইনস্টলার অনুমতিটি হোয়াইটলিস্টে যোগ করলে, লিগ্যাসি মোডে চলমান অ্যাপ আইসোলেট করা নয় এমন অনুমতি সংক্রান্ত আচরণ পায়। এই অনুমতি এসডি কার্ড অ্যাক্সেস এবং অডিও ও ভিজ্যুয়াল কালেকশন নিয়ন্ত্রণ করে। অ্যাপ Android 9 বা এর নিচের ভার্সনকে টার্গেট করলে এবং আইসোলেটেড স্টোরেজ বেছে না নিলে অথবা Android 10-কে টার্গেট করলে এবং আইসোলেটেড স্টোরেজ বেছে না নিলে এটি ঘটে।
হোয়াইটলিস্টের স্ট্যাটাস শুধুমাত্র ইনস্টল করার সময়েই নির্দিষ্ট করা যায় এবং অ্যাপ ইনস্টল না হওয়া পর্যন্ত তা পরিবর্তন করা যায় না।
READ_EXTERNAL_STORAGE
অনুমতি সেট করার ব্যাপারে আরও তথ্যের জন্য,
PackageInstaller.SessionParams ক্লাসে
setWhitelistedRestrictedPermissions() দেখুন।
Android 13, অন্যান্য অ্যাপের তৈরি করা মিডিয়া ফাইল অ্যাক্সেস করে এমন অ্যাপকে সহায়তা করতে
গ্র্যানুলার মিডিয়া অনুমতি চালু করে। অ্যাপকে READ_EXTERNAL_STORAGE অনুমতির পরিবর্তে
গ্র্যানুলার মিডিয়া অনুমতিতে তালিকাভুক্ত এক বা একাধিক গ্র্যানুলার
মিডিয়া অনুমতির অনুরোধ করতে হবে।
অ্যাপ মিডিয়া সংক্রান্ত অনুমতির অনুরোধ করলে, ব্যবহারকারীদের তাদের ভিজ্যুয়াল মিডিয়া লাইব্রেরিতে আংশিক অ্যাক্সেস দেওয়ার অনুমতি দিতে, Android 14 গ্র্যানুলার মিডিয়া সংক্রান্ত অনুমতির উপর ভিত্তি করে তৈরি করা হয়েছে। আরও তথ্যের জন্য ফটো ও ভিডিওতে আংশিক অ্যাক্সেস দেওয়া দেখুন।
রানটাইম অনুমতি
Android 6.0 একটি নতুন
রানটাইম অনুমতি মডেল নিয়ে এসেছে যেখানে
রানটাইমে প্রয়োজন হলে অ্যাপগুলি ক্ষমতা অনুরোধ করে। নতুন মডেলে
READ/WRITE_EXTERNAL_STORAGE অনুমতি অন্তর্ভুক্ত থাকার কারণে, প্ল্যাটফর্মকে
আগে থেকেই চলছে এমন অ্যাপ বন্ধ বা রিস্টার্ট না করেই
ডায়নামিক উপায়ে স্টোরেজ অ্যাক্সেস দিতে হবে। এটি মাউন্ট করা সব স্টোরেজ ডিভাইসের
তিনটি আলাদা ভিউ বজায় রাখার মাধ্যমে এটি করে:
/mnt/runtime/defaultসেইসব অ্যাপকে দেখানো হয় যাদের কোনও বিশেষ স্টোরেজ পার্মিশন নেই এবং সেইসব রুট নেমস্পেসকে দেখানো হয় যেখানেadbdও অন্যান্য সিস্টেম কম্পোনেন্ট থাকে।/mnt/runtime/readঅ্যাপে দেখানো হয়, যেখানেREAD_EXTERNAL_STORAGE(Android 10-এর জন্যLEGACY_STORAGEসেট করুন)/mnt/runtime/write-কে অ্যাপে দেখানো হয়, যার সাথেWRITE_EXTERNAL_STORAGEআছে
জাইগোট ফর্ক টাইমে, আমরা প্রতিটি রান করা অ্যাপের জন্য একটি মাউন্ট নেমস্পেস তৈরি করি এবং
উপযুক্ত প্রাথমিক ভিউকে জায়গায় বাইন্ড মাউন্ট করি। পরে, রানটাইম
অনুমতি দেওয়া হলে, vold আগে থেকেই চলছে এমন অ্যাপের
মাউন্ট নেমস্পেসে জাম্প করে এবং আপগ্রেড করা ভিউকে জায়গায় বাইন্ড মাউন্ট করে। মনে রাখবেন যে
অনুমতি ডাউনগ্রেড করা হলে অ্যাপটি সবসময় বন্ধ হয়ে যায়।
এই ফিচার প্রয়োগ করার জন্য ব্যবহৃত setns() ফাংশনালিটির
জন্য অন্তত Linux 3.8 প্রয়োজন, তবে প্যাচগুলি সফলভাবে
Linux 3.4-এ ব্যাকপোর্ট করা হয়েছে। PermissionsHostTest CTS টেস্ট ব্যবহার করে
সঠিক কার্নেল আচরণ যাচাই করা যায়।