Android, ঐতিহ্যবাহী স্টোরেজ সহ ডিভাইস সমর্থন করে, যা অপরিবর্তনীয় POSIX অনুমতি ক্লাস এবং মোড সহ কেস-ইনসেনসিটিভ ফাইল সিস্টেম হিসেবে সংজ্ঞায়িত করা হয়। প্রচলিত স্টোরেজের ধারণার মধ্যে এমুলেটেড ও পোর্টেবল স্টোরেজ অন্তর্ভুক্ত। পোর্টেবল স্টোরেজ বলতে এমন যেকোনও এক্সটার্নাল স্টোরেজকে বোঝায় যা সিস্টেমের দ্বারা অ্যাডপ্ট করা হয় না এবং সেই কারণে ফর্ম্যাট ও এনক্রিপ্ট করা হয় না অথবা নির্দিষ্ট কোনও ডিভাইসের সাথে যুক্ত থাকে না। কারণ, ঐতিহ্যবাহী এক্সটার্নাল স্টোরেজ সেভ করা ডেটার জন্য ন্যূনতম সুরক্ষা প্রদান করে, সিস্টেম কোড এক্সটার্নাল স্টোরেজে সংবেদনশীল ডেটা সেভ করে না। বিশেষ করে, কনফিগারেশন এবং লগ ফাইল শুধুমাত্র ইন্টার্নাল স্টোরেজে সেভ করা উচিত যেখানে সেগুলি কার্যকরভাবে সুরক্ষিত করা যেতে পারে।
একাধিক ব্যবহারকারীর এক্সটার্নাল স্টোরেজ
Android 4.2 থেকে শুরু করে, ডিভাইস একাধিক ব্যবহারকারীকে সাপোর্ট করতে পারে এবং এক্সটার্নাল স্টোরেজকে অবশ্যই নিম্নলিখিত সীমাবদ্ধতা পূরণ করতে হবে:
- প্রত্যেক ব্যবহারকারীর নিজস্ব আলাদা প্রাইমারি এক্সটার্নাল স্টোরেজ থাকতে হবে এবং অন্য ব্যবহারকারীর প্রাইমারি এক্সটার্নাল স্টোরেজে অ্যাক্সেস থাকলে চলবে না।
/sdcardপাথকে অবশ্যই ব্যবহারকারী-নির্দিষ্ট সঠিক প্রাইমারি এক্সটার্নাল স্টোরেজ হিসেবে সমাধান করতে হবে, এটি ব্যবহারকারীর উপর ভিত্তি করে একটি প্রসেস হিসেবে রান করছে।Android/obbডিরেক্টরিতে বড় OBB ফাইলের স্টোরেজ অপ্টিমাইজেশন হিসেবে একাধিক ব্যবহারকারীর মধ্যে শেয়ার করা হতে পারে।- সিন্থেটিক অনুমতি দ্বারা অনুমোদিত প্যাকেজ-নির্দিষ্ট ডিরেক্টরি ছাড়া, অ্যাপের মাধ্যমে সেকেন্ডারি এক্সটার্নাল স্টোরেজে লেখা যাবে না।
এই ফিচারের ডিফল্ট প্ল্যাটফর্ম ইমপ্লিমেন্টেশন, প্রতিটি জাইগোট-ফর্কড প্রসেসের জন্য আইসোলেটেড মাউন্ট টেবিল তৈরি করতে Linux kernel নেমস্পেস ব্যবহার করে, এবং তারপরে সেই প্রাইভেট নেমস্পেসে সঠিক ব্যবহারকারী-নির্দিষ্ট প্রাথমিক এক্সটার্নাল স্টোরেজ অফার করতে বাইন্ড মাউন্ট ব্যবহার করে।
বুট করার সময়, সিস্টেম EMULATED_STORAGE_SOURCE-এ একটি এমুলেট করা এক্সটার্নাল স্টোরেজ FUSE ডেমন মাউন্ট করে, যা অ্যাপ থেকে লুকানো থাকে। Zygote ফর্ক করার পরে, এটি FUSE ডেমনের অধীনে থেকে EMULATED_STORAGE_TARGET-এ উপযুক্ত ব্যবহারকারী-নির্দিষ্ট সাবডিরেক্টরি
বাইন্ড মাউন্ট করে, যাতে
অ্যাপের জন্য এক্সটার্নাল স্টোরেজ পাথ সঠিকভাবে সমাধান করা যায়। কারণ, কোনও অ্যাপের কাছে
অন্যান্য ব্যবহারকারীর স্টোরেজের জন্য অ্যাক্সেসযোগ্য মাউন্ট পয়েন্ট থাকে না, তাই এটি শুধুমাত্র
যে ব্যবহারকারীর জন্য শুরু করা হয়েছে তার স্টোরেজ অ্যাক্সেস করতে পারে।
এছাড়াও, এই প্রয়োগ শেয়ার করা সাবট্রি কার্নেল ফিচার ব্যবহার করে ডিফল্ট রুট নেমস্পেস থেকে অ্যাপ নেমস্পেসে মাউন্ট ইভেন্ট প্রোপাগেট করে, যা নিশ্চিত করে যে ASEC কন্টেনার এবং OBB মাউন্টিংয়ের মতো ফিচার সঠিকভাবে কাজ করা চালিয়ে যাবে। এটি rootfs-কে শেয়ার করা হিসেবে মাউন্ট করে এবং তারপরে প্রতিটি Zygote নেমস্পেস তৈরি হওয়ার পরে এটিকে স্লেভ হিসেবে রিমউন্ট করে।
একাধিক এক্সটার্নাল স্টোরেজ ডিভাইস
Android 4.4 থেকে শুরু করে, একাধিক এক্সটার্নাল স্টোরেজ ডিভাইসকে Context.getExternalFilesDirs(),
Context.getExternalCacheDirs() এবং
Context.getObbDirs()-এর মাধ্যমে
ডেভেলপারদের কাছে দেখানো হয়।
WRITE_EXTERNAL_STORAGE অনুমতির মাধ্যমে কোনও ডিভাইসের প্রাথমিক এক্সটার্নাল স্টোরেজে
শুধুমাত্র লেখার অ্যাক্সেস দিতে হবে। অ্যাপকে সেকেন্ডারি এক্সটার্নাল স্টোরেজ ডিভাইসে লেখার অনুমতি দেওয়া যাবে না, তবে সিন্থেসাইজ করা অনুমতি অনুযায়ী প্যাকেজ-নির্দিষ্ট ডিরেক্টরিতে লেখার অনুমতি দেওয়া যেতে পারে। এইভাবে রাইট করার সুবিধা সীমাবদ্ধ করলে, অ্যাপ্লিকেশন আনইনস্টল করার সময় সিস্টেম
ফাইল ক্লিন-আপ করতে পারে।
USB মিডিয়া সাপোর্ট
Android 6.0 পোর্টেবল স্টোরেজ ডিভাইস সাপোর্ট করে যা শুধুমাত্র USB ফ্ল্যাশ ড্রাইভের মতো অল্প সময়ের জন্য ডিভাইসের সাথে কানেক্ট করা হয়। ব্যবহারকারী নতুন পোর্টেবল ডিভাইস ইনসার্ট করলে, প্ল্যাটফর্ম একটি বিজ্ঞপ্তি দেখায় যাতে তিনি সেই ডিভাইসের কন্টেন্ট কপি বা ম্যানেজ করতে পারেন।
Android 6.0-এ, অ্যাডপ্ট করা হয়নি এমন যেকোনও ডিভাইসকে পোর্টেবল হিসেবে বিবেচনা করা হয়। যেহেতু পোর্টেবল স্টোরেজ শুধুমাত্র অল্প সময়ের জন্য কানেক্ট করা হয়, তাই প্ল্যাটফর্মটি মিডিয়া স্ক্যানিংয়ের মতো ভারী অপারেশন এড়িয়ে যায়। পোর্টেবল স্টোরেজে থাকা ফাইলের সাথে ইন্টার্যাক্ট করতে, থার্ড-পার্টি অ্যাপকে অবশ্যই স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্কের মাধ্যমে যেতে হবে; গোপনীয়তা ও নিরাপত্তা সংক্রান্ত কারণে সরাসরি অ্যাক্সেস স্পষ্টভাবে ব্লক করা আছে।