स्कोप्ड स्टोरेज

स्कोप्ड स्टोरेज ऐप की बाहरी स्टोरेज तक पहुंच को सीमित करता है। एंड्रॉइड 11 या उच्चतर में, एपीआई 30 या उच्चतर को लक्षित करने वाले ऐप्स को स्कोप्ड स्टोरेज का उपयोग करना होगा। पहले एंड्रॉइड 10 में, ऐप्स स्कोप्ड स्टोरेज से ऑप्ट आउट कर सकते थे।

ऐप एक्सेस प्रतिबंध

स्कोप्ड स्टोरेज का लक्ष्य ऐप और उपयोगकर्ता डेटा की गोपनीयता की रक्षा करना है। इसमें उपयोगकर्ता की जानकारी (जैसे फोटो मेटाडेटा) की सुरक्षा करना, ऐप्स को स्पष्ट अनुमति के बिना उपयोगकर्ता फ़ाइलों को संशोधित करने या हटाने से रोकना और डाउनलोड या अन्य फ़ोल्डरों में डाउनलोड किए गए संवेदनशील उपयोगकर्ता दस्तावेज़ों की सुरक्षा करना शामिल है।

स्कोप्ड स्टोरेज का उपयोग करने वाले ऐप्स में पहुंच के निम्नलिखित स्तर हो सकते हैं (वास्तविक पहुंच कार्यान्वयन विशिष्ट है)।

  • बिना किसी अनुमति के अपनी स्वयं की फ़ाइलों तक पहुंच पढ़ें और लिखें
  • READ_EXTERNAL_STORAGE अनुमति के साथ अन्य ऐप्स की मीडिया फ़ाइलों तक पहुंच पढ़ें
  • अन्य ऐप्स की मीडिया फ़ाइलों तक पहुंच लिखने की अनुमति केवल प्रत्यक्ष उपयोगकर्ता की सहमति से ही दी जाती है (सिस्टम गैलरी और उन ऐप्स को अपवाद दिया गया है जो सभी फ़ाइलों तक पहुंच के लिए पात्र हैं)
  • अन्य ऐप्स की बाहरी ऐप डेटा निर्देशिकाओं को पढ़ने या लिखने की कोई पहुंच नहीं

FUSE के साथ स्कोप्ड स्टोरेज का उपयोग करें

एंड्रॉइड 11 या उच्चतर यूजरस्पेस (एफयूएसई) में फाइलसिस्टम का समर्थन करता है, जो मीडियाप्रोवाइडर मॉड्यूल को यूजर स्पेस में फ़ाइल संचालन की जांच करने और अनुमति देने, अस्वीकार करने या पहुंच को संशोधित करने की नीति के आधार पर फाइलों तक पहुंच प्राप्त करने में सक्षम बनाता है। स्कोप्ड स्टोरेज में FUSE का उपयोग करने वाले ऐप्स को स्कोप्ड स्टोरेज की गोपनीयता सुविधाएँ और सीधे फ़ाइल पथ (ऐप्स में फ़ाइल एपीआई को काम करते हुए) का उपयोग करके फ़ाइलों तक पहुंचने की क्षमता मिलती है।

एंड्रॉइड 10 ने मीडियाप्रोवाइडर द्वारा फ़ाइल एक्सेस पर स्कोप्ड स्टोरेज नियमों को लागू किया, लेकिन कर्नेल कॉल को इंटरसेप्ट करने में आवश्यक प्रयास के कारण सीधे फ़ाइल पथ एक्सेस (उदाहरण के लिए, फ़ाइल एपीआई और एनडीके एपीआई का उपयोग करके) के लिए नहीं। परिणामस्वरूप, स्कोप्ड स्टोरेज में ऐप्स सीधे फ़ाइल पथ का उपयोग करके फ़ाइलों तक नहीं पहुंच सके। इस प्रतिबंध ने ऐप डेवलपर्स की अनुकूलन क्षमता को प्रभावित किया क्योंकि मीडियाप्रोवाइडर एपीआई तक फ़ाइल एपीआई एक्सेस को फिर से लिखने के लिए पर्याप्त कोड परिवर्तनों की आवश्यकता थी।

FUSE और SDCardFS

FUSE के लिए Android 11 समर्थन SDCardFS के अवनति से असंबंधित है, लेकिन उन उपकरणों के लिए मीडिया स्टोर का एक विकल्प प्रदान करता है जो पहले SDCardFS का उपयोग करते थे। उपकरण:

  • कर्नेल 5.4 या उच्चतर का उपयोग करके एंड्रॉइड 11 या उच्चतर के साथ लॉन्च करने पर SDCardFS का उपयोग नहीं किया जा सकता है।
  • एंड्रॉइड 11 या उच्चतर में अपग्रेड करने से फ़ाइल संचालन को बाधित करने और गोपनीयता लक्ष्यों को पूरा करने के लिए SDCardFS के शीर्ष पर FUSE को होस्ट किया जा सकता है।

FUSE प्रदर्शन ट्यूनिंग

Android ने पहले Android 7 या उससे पहले के संस्करण में FUSE का समर्थन किया था, जिसमें बाहरी स्टोरेज को FUSE के रूप में माउंट किया गया था। FUSE कार्यान्वयन के साथ प्रदर्शन और गतिरोध संबंधी समस्याओं के कारण, Android 8 ने SDCardFS पेश किया। एंड्रॉइड 11 ने libfuse के बेहतर, बेहतर परीक्षण किए गए कार्यान्वयन का उपयोग करके FUSE के लिए समर्थन को फिर से प्रस्तुत किया है जिसे एंड्रॉइड 7 या उससे पहले के प्रदर्शन समस्याओं को हल करने के लिए ट्यून किया जा सकता है।

FUSE ट्यूनिंग में निम्नलिखित बदलाव शामिल हैं:

  • इन निर्देशिकाओं पर निर्भर गेम ऐप्स के प्रदर्शन को बेहतर बनाने के लिए Android/data और Android/obb निर्देशिकाओं के लिए FUSE को दरकिनार करना।
  • रीड्स परफ़ॉर्मेंट और मीडिया प्लेबैक को सुचारू रखने के लिए अनुकूलन (जैसे कि FUSE फ़ाइल सिस्टम के रीड-फ़ॉरवर्ड और डर्टी अनुपात को ट्यून करना)।
  • FUSE राइट-बैक कैश का उपयोग करना।
  • सिस्टम सर्वर पर आईपीसी को कम करने के लिए कैशिंग अनुमतियाँ।
  • बल्क संचालन को तेज़ बनाने के लिए सभी फ़ाइलों तक पहुंच वाले ऐप्स के लिए अनुकूलन।

उपरोक्त ट्यूनिंग बदलाव FUSE और गैर-FUSE उपकरणों के बीच तुलनीय प्रदर्शन उत्पन्न कर सकते हैं। उदाहरण के लिए, FUSE का उपयोग करके ट्यून किए गए Pixel 2 और मीडिया स्टोर का उपयोग करके Pixel 2 का परीक्षण करने पर फ़ाइल पथ एक्सेस और मीडिया स्टोर के बीच तुलनीय अनुक्रमिक पढ़ने का प्रदर्शन (उदाहरण के लिए, वीडियो प्लेबैक) पाया गया। हालाँकि, FUSE के साथ अनुक्रमिक लेखन थोड़ा खराब था, और यादृच्छिक पढ़ना और लिखना दोगुना धीमा हो सकता है।

प्रदर्शन माप एक डिवाइस से दूसरे डिवाइस और विशिष्ट उपयोग के मामलों के बीच भिन्न हो सकते हैं। क्योंकि MediaProvider API सबसे सुसंगत प्रदर्शन देते हैं, ऐसे ऐप डेवलपर्स जो प्रदर्शन के बारे में चिंतित हैं, उन्हें अपने ऐप्स के लिए MediaProvider API का उपयोग करना चाहिए।

FUSE प्रदर्शन प्रभाव को कम करें

FUSE प्रदर्शन प्रभाव केवल बाहरी साझा संग्रहण पर संग्रहीत फ़ाइलों के भारी उपयोगकर्ताओं तक सीमित है। बाहरी निजी भंडारण (जिसमें android/data और android/obb निर्देशिकाएं शामिल हैं) को FUSE द्वारा बायपास किया जाता है, जबकि आंतरिक भंडारण (जैसे कि /data/data , जहां कई ऐप्स डेटा को एन्क्रिप्टेड और सुरक्षित रखने के लिए संग्रहीत करते हैं) FUSE माउंटेड नहीं है।

  • जो ऐप्स साझा बाह्य संग्रहण के हल्के उपयोगकर्ता हैं, वे अक्सर फ़ाइलों के सीमित सेट (आमतौर पर 100 से कम फ़ाइलें) के साथ इंटरैक्ट करते हैं। ये ऐप्स सामान्य पढ़ने और लिखने के संचालन के मौजूदा अनुकूलन से लाभान्वित होते हैं और एंड्रॉइड 11 में कोई FUSE-संबंधित प्रदर्शन प्रभाव नहीं दिखना चाहिए।

  • जो ऐप्स साझा बाह्य संग्रहण के भारी उपयोगकर्ता हैं, वे आम तौर पर बल्क फ़ाइल संचालन करते हैं, जैसे 1000 फ़ाइलों वाली निर्देशिका को सूचीबद्ध करना या हटाना, या फ़ाइल सिस्टम पर दस लाख फ़ाइलों वाली निर्देशिका बनाना या हटाना। एंड्रॉइड 11 पर FUSE द्वारा बल्क फ़ाइल संचालन प्रभावित हो सकता है, लेकिन यदि ऐसे ऐप्स MANAGE_EXTERNAL_STORAGE अनुमति के लिए पात्र हैं, तो उन्हें अक्टूबर 2020 अपडेट में शामिल प्रदर्शन अनुकूलन से लाभ होता है।

FUSE प्रदर्शन ओवरहेड से बचने के लिए, ऐप्स बाहरी निजी स्टोरेज में डेटा संग्रहीत कर सकते हैं या FUSE को बायपास करने और प्रदर्शन-अनुकूलित पथ प्राप्त करने के लिए ContentProvider क्लास में बल्क एपीआई का उपयोग कर सकते हैं। इसके अलावा, MediaProvider सिस्टम घटक के अक्टूबर 2020 अपडेट में फ़ाइल प्रबंधकों और समान ऐप्स (जैसे बैकअप/रिस्टोर, एंटीवायरस) के लिए प्रदर्शन अनुकूलन शामिल हैं जो MANAGE_EXTERNAL_STORAGE अनुमति रखते हैं।

प्रदर्शन से अधिक गोपनीयता

FUSE के लिए ट्यून किए गए उपकरणों पर, अधिकांश महत्वपूर्ण उपयोगकर्ता यात्राएं एंड्रॉइड 10 और एंड्रॉइड 11 के बीच समान रूप से प्रदर्शन करती हैं। हालांकि, फ़ाइल संचालन के एक सेट पर बेंचमार्क का परीक्षण करते समय, एंड्रॉइड 11 एंड्रॉइड 10 से भी बदतर प्रदर्शन कर सकता है। फ़ाइल एक्सेस पैटर्न के लिए जो प्रदर्शन करते हैं एंड्रॉइड 11 में बदतर (उदाहरण के लिए, यादृच्छिक पढ़ना या लिखना), हम ऐप्स को गैर-फ्यूज एक्सेस मोड देने के लिए मीडियाप्रोवाइडर एपीआई का उपयोग करने की सलाह देते हैं, जो सबसे अच्छा और लगातार प्रदर्शन करने वाला विकल्प है।

मीडियाप्रदाता और FUSE अद्यतन

MediaProvider सिस्टम घटक का व्यवहार एंड्रॉइड रिलीज़ के बीच भिन्न होता है।

  • एंड्रॉइड 10 और उससे पहले के संस्करण में, SDCardFS फ़ाइल सिस्टम था और MediaProvider ने फ़ाइलों के संग्रह (उदाहरण के लिए, चित्र, वीडियो, संगीत फ़ाइलें, आदि) के लिए एक इंटरफ़ेस प्रदान किया था। जब कोई ऐप फ़ाइल एपीआई का उपयोग करके एक फ़ाइल बनाता है, तो वह MediaProvider को फ़ाइल को स्कैन करने और डेटाबेस में रिकॉर्ड करने के लिए कह सकता है।

  • एंड्रॉइड 11 या उच्चतर में, SDCardFS को हटा दिया गया है और MediaProvider बाहरी स्टोरेज के लिए फ़ाइल सिस्टम हैंडलर (FUSE के लिए) बन जाता है, जिससे बाहरी स्टोरेज पर फ़ाइल सिस्टम और MediaProvider डेटाबेस सुसंगत हो जाता है। FUSE फ़ाइल सिस्टम के लिए यूज़रस्पेस हैंडलर के रूप में, MediaProvider कर्नेल कॉल को रोक सकता है और सुनिश्चित कर सकता है कि फ़ाइल संचालन गोपनीयता सुरक्षित है।

एंड्रॉइड 11 और उच्चतर में, MediaProvider एक मॉड्यूलर सिस्टम घटक (एक मेनलाइन मॉड्यूल) भी है जिसे एंड्रॉइड रिलीज़ के बाहर अपडेट किया जा सकता है। इसका मतलब यह है कि MediaProvider में पाए जाने वाले प्रदर्शन, गोपनीयता या सुरक्षा मुद्दों को Google Play Store या अन्य भागीदार-प्रदत्त तंत्रों से ठीक किया जा सकता है और प्रसारित किया जा सकता है। FUSE हैंडलर से जो अपेक्षा की जाती है उसके दायरे में कुछ भी अद्यतन करने योग्य है, जो FUSE प्रदर्शन प्रतिगमन और बग को ठीक करने के लिए अपडेट को सक्षम करता है।