Android File System

Introduction to Android File System

Android file system में जितनी भी directories होती है उन सबका अलग अलग purpose होता है। इनमे से कुछ directories ऐसी भी होती है जिनके बिना android system काम नहीं कर सकता। Android के file system में device से related data भी होता है और साथ ही user का data भी होता है। User की files core file system को corrupt न करे इसके लिए user files और system files को अलग अलग directories में स्टोर किया जाता है।

Android system files के unauthorized access से बचने के लये permissions भी provide करता है। कुछ ऐसी फाइल्स होती है जो device run करने के लिए necessary होती है। ऐसी files को आप delete भी नहीं कर सकते है। इसलिए ऐसी files के लिए सिर्फ read permission होती है। User files के लिए complete permission दी जाती है। आप read भी कर सकते है और file को modify भी कर सकते है और delete भी कर सकते है।

Android file system एक hierarchy के द्वारा represent किया जाता है। Android file system में बहुत सी directories है। लेकिन जरुरी नहीं की आपको इन सबका ज्ञान हो कुछ necessary directories है जिनके बारे में मै आपको बताऊंगा।

Directories of Android File System

  • /Boot - इस directory में वो सभी tools available होते है जो android system को start होने के लिए necessary होते है। इस directory में kernel और ram-disk होती है। इस directory के बिना आपका device start नहीं हो सकता है। यदि इस directory को delete कर दिया जाये तो आपका device तब तक start नहीं होगा जब तक की आप वापस इसे ना डाले।
  • /System - इस directory में आपका पूरा android operating system होता है। इस directory में android का graphical user interface होता है। साथ ही वो सभी application जो आपके device में पहले से installed की हुई आती है इसी directory में होती है। यदि इस directory को delete कर दिया जाये तो आपका phone तो on रहेगा लेकिन उसमे android operating system नहीं होता है। इसलिए आप device से कुछ भी नहीं कर सकते है।
  • /Recovery - ये directory backup के लिए बनायीं गयी है। यदि आपके system की boot directory corrupt हो जाती है तो आपके पास ये एक विकल्प होता है। इस directory के द्वारा आप pure system को फिर से recover कर सकते है।
  • /Data - इस directory में यूज़र का data store किया जाता है। इस directory में user की images, files, videos और contacts होते है। User जो android applications install करता है वह भी इसी directory में store की जाती है। यदि आप अपने devices को reset करते है तो ये directory पूरी खाली हो जाती है।
  • /Cache - इस directory में वो files और applications होती है। जिन्हे आप frequently यूज़ करते है। इस directory को format करने से user और system data पर कोई फर्क नहीं पड़ता है। इस directory को format करके आप RAM memory को फ्री कर सकते है।
  • /Misc - इस directory में यूज़र की settings store की जाती है जो device को personalize करती है।

Sharing Files

कई बार एक application द्वारा दूसरी application को files share करने की आवश्यकता होती है। उदाहरण के लिए जब आप अपने किसी मित्र को कोई picture भेजना चाहते है तो picture gallery application whats-app application के साथ picture शेयर करती है। यदि आप चाहे तो अपनी application की किसी file को शेयर कर सकते है। File को एक application से दूसरी application तक पहुँचाने के लिए आपको अपनी application को configure करना होता है। आप files को content URI की form में शेयर करते है।

Android में FileProvider class content URI generate करती है। किसी भी application के साथ files शेयर करने का सबसे अच्छा तरीका होता है की आप files को send ना करके उनके URI (files URL ) को शेयर करे और दूसरी application को कुछ देर के लिए file को access करने की permission दे दे।

Send की जाने वाली files का URL शेयर करना safe होता है इससे आप receive करने वाली application को uniquely identify कर सकते है और उस application के अलावा और कोई application files को access नहीं कर सकती है। Content URI कुछ समय बाद अपने आप expire हो जाते है।

FileProvider क्लास का getUriForFile() method किसी भी file का URI generate करने के लिए यूज़ किया जाता है। इस method में आप file का नाम argument की तरह पास करते है और ये function आपको उस file का URI return करता है।

Files शेयर करने के लिए आपको अपनी application में FileProvider को define करना होता है। ऐसा आप FileProvider की entry AndroidManifest.xml file में करके कर सकते है। इसके लिए आप element यूज़ करते है। इस element के 4 attributes होते है -

  • andriod:name - इसमें आप FileProvider क्लास का URI देते है।
  • android:authorities - इसमें आप उस authority का नाम देते है जो आप FileProvider क्लास के द्वारा generated content URI के लिए यूज़ करना चाहते है। ex. yrPackage.fileprovider.
  • android:grantUriPermission - इस attribute को आप true set करते है।
  • android:exported - इस attribute को आप initially false set करते है।
<provider android:name="URI-of-file-provider-URI" android:authorities="name-Of-Authority" android:grantUriPermission="true" android:exported="false">

<meta-data> element <provider> element का एक sub element होता है। ये element एक XML file को दर्शाता है जिसमे ये define होता है की आप कौन कौन सी directories share करना चाहते है। इस element के 2 attributes होते है-

  • android:name - इसमें आप FileProvider के paths वाली क्लास का URI देते है।
  • android:resource - इसमें आप XML file का URI देते है।
<meta-data android:name="file-provider-paths-URI" resource="name-of-XML-file" >

XML file में जो directories आप share करना चाहते है उन्हें define करना बिलकुल आसान होता है। इसके लिए आप element यूज़ करते है। इस element का एक sub element होता है . इस element में आप directory का path देते है। इस element के 2 attribute होते है name और path.

<paths>
<files-path  path ="yourDirectory/" name="nameOfFile">
</paths>

जब आप अपनी class के लिए file provider define कर ले तो दूसरी applications से आने वाली requests को आप handle कर सकते है। ऐसा करने का एक तरीका ये है की आप एक activity create करे जो file selection interface provide करे। और जब files select की जाए तो आप उस selection पर action ले सकते है। लेकिन action लेने से पहले आपको दूसरी application को access permissions देनी चाहिए।