वृद्धिशील फ़ाइल सिस्टम

एंड्रॉइड 11 में पेश किया गया इंक्रीमेंटल फाइल सिस्टम (इंकएफएस) कर्नेल मॉड्यूल एंड्रॉइड ओएस को एंड्रॉइड डिबग ब्रिज (एडीबी) पर स्ट्रीम किए गए एपीके प्राप्त करने में सक्षम बनाता है।

यह स्व-निहित कर्नेल मॉड्यूल एक नया वर्चुअल फ़ाइल सिस्टम बनाता है जो मौजूदा एंड्रॉइड फ़ाइल सिस्टम के शीर्ष पर बैठता है। यह ऐप और गेम डेवलपर्स को एंड्रॉइड 11 या उच्चतर पर चलने वाले डिवाइस पर एडीबी के माध्यम से बड़े एपीके तैनात करने में सक्षम करने के लिए फ्रेमवर्क और एसडीके में बदलाव को पूरक करता है।

कर्नेल परिवर्तन एक नए एपीके सिग्नेचर स्कीम v4 प्रारूप को सक्षम करता है और एंड्रॉइड पैकेज मैनेजर में एंड्रॉइड फ्रेमवर्क परिवर्तन, नई सिस्टम सेवाओं और एडीबी में परिवर्तनों का समर्थन करता है।

कार्यान्वयन

IncFS को लागू करने के लिए, OEM और SoC निर्माताओं को अपने एंड्रॉइड डिवाइस बिल्ड में एक नया कर्नेल ड्राइवर जोड़ना होगा।

केवल एंड्रॉइड 11 के लिए , यदि कर्नेल ड्राइवर को मॉड्यूल के रूप में बनाया गया है तो इसे मांग पर लोड किया जाता है। यदि एडीबी वृद्धिशील इंस्टॉलेशन के माध्यम से कोई ऐप इंस्टॉल नहीं है, तो डिवाइस कर्नेल ड्राइवर को लोड नहीं करता है।

अन्यथा, जब यह कर्नेल छवि के एक भाग के रूप में बनता है, तो ड्राइवर हमेशा लोड होता है। यह कार्यान्वयन Android 12 और उच्चतर के लिए मान्य है, और इसका उपयोग Android 11 के साथ किया जा सकता है । कर्नेल ड्राइवर को Android 12 में अपग्रेड करने के बारे में जानकारी के लिए, कर्नेल ड्राइवर अपग्रेड देखें।

स्ट्रीम किए गए एपीके इंस्टॉलेशन को सक्षम करने के लिए कर्नेल ड्राइवर एक बड़े सिस्टम का हिस्सा है। OEM और विक्रेताओं को नमूना कार्यान्वयन में प्रदान किए गए सटीक IncFS कोड का उपयोग करने की आवश्यकता नहीं है। हालाँकि, सभी डिवाइसों में एक सुसंगत अनुभव सुनिश्चित करने के लिए, आपको यह सुनिश्चित करना होगा कि एपीआई कार्यान्वयन में एक फ़ाइल सिस्टम है जिसमें फ़ाइल-रीड कार्यक्षमता और निर्देशिका रीड-राइट कार्यक्षमता है जैसा कि इंक्रीमेंटल एफएस दस्तावेज़ीकरण के लिए यूजरस्पेस इंटरफ़ेस में परिभाषित किया गया है।

इसके अतिरिक्त, कार्यान्वयन में माउंट विकल्प और विशेष फ़ाइलें होनी चाहिए जो कार्यात्मक रूप से IncFS नमूना कार्यान्वयन से मेल खाती हों।

कार्यान्वयन के लिए आवश्यक परिवर्तन निम्नलिखित सूचीबद्ध हैं:

  1. कर्नेल बनाने के लिए विकास मशीन स्थापित करें
  2. common-android-mainline शाखा से सामान्य कर्नेल को लक्षित करें।
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. सत्यापित करें कि IncFS के लिए आवश्यक निम्नलिखित परिवर्तन शाखा चेकआउट में हैं:
  4. या तो CONFIG_INCREMENTAL_FS=y या केवल Android 11 के लिए, CONFIG_INCREMENTAL_FS=m defconfig फ़ाइल के नीचे जोड़ें। उदाहरण देखने के लिए, नीचे दिए गए किसी एक लिंक पर क्लिक करें:
  5. कर्नेल का निर्माण करें
  6. कर्नेल को एंड्रॉइड डिवाइस इमेज बिल्ड में एम्बेड करें।
  7. अपने लक्षित एंड्रॉइड डिवाइस के लिए, निम्नलिखित विक्रेता-विशिष्ट सिस्टम-प्रॉपर्टी लाइनों में से एक को अपनी device.mk फ़ाइल में जोड़ें ( एंड्रॉइड 12 और उच्चतर के साथ लॉन्च किए गए डिवाइसों में वैकल्पिक ):
  8. जब आप CONFIG_INCREMENTAL_FS=y का उपयोग कर रहे हों, तो फ़ाइल को इनमें से किसी एक के साथ जोड़ें:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes

    जब आप CONFIG_INCREMENTAL_FS=m ( केवल Android 11 के लिए) का उपयोग कर रहे हों, तो फ़ाइल को इनमें से किसी एक के साथ जोड़ें:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. एंड्रॉइड एमुलेटर और Pixel 4 के लिए उदाहरण device.mk फ़ाइलें देखें।
  10. केवल Android 11 के लिए : यदि आप CONFIG_INCREMENTAL_FS=m का उपयोग कर रहे हैं, तो SE Linux नियम जोड़ें।
  11. निम्नलिखित सामग्री के साथ अपने डिवाइस /system/sepolicy/vendor फ़ोल्डर में एक vold.te फ़ाइल बनाएं और जोड़ें:

    • vold.te

    इसे वृद्धिशील फ़ाइल सिस्टम ड्राइवर लोड करने की अनुमति दें:

    • allow vold self:capability sys_module;
    • allow vold vendor_incremental_module:file r_file_perms;
    • allow vold vendor_incremental_module:system module_load;

    अपने /system/sepolicy/vendor फ़ोल्डर में मौजूद मौजूदा file.te फ़ाइल में निम्नलिखित SE Linux नियम जोड़ें:

    • file.te फ़ाइल - उदाहरण के लिए यह file.te फ़ाइल देखें।)
    • वृद्धिशील फ़ाइल सिस्टम ड्राइवर
    • type vendor_incremental_module, vendor_file_type, file_type;

    अपने /system/sepolicy/vendor फ़ोल्डर में मौजूद मौजूदा file_contents फ़ाइल में निम्नलिखित SE Linux नियम जोड़ें:

कर्नेल ड्राइवर अपग्रेड

Android 12 में अपग्रेड करने वाले उपकरणों में IncFS ड्राइवर का पुराना संस्करण शामिल हो सकता है। उन उपकरणों के लिए, AOSP अनुशंसा करता है कि आप इन कारणों से IncFS ड्राइवर को वर्तमान संस्करण (इस मामले में v2) में अपडेट करें:

  • एंड्रॉइड 11 के साथ जारी किया गया संस्करण IncFS का प्रारंभिक कार्यान्वयन है, जो केवल ADB इंस्टॉलेशन समर्थन के लिए लक्षित है।
  • एंड्रॉइड 12 प्ले गेम्स के स्ट्रीमिंग इंस्टॉलेशन के लिए IncFS ड्राइवर का उपयोग करता है, जिसे बेहतर उपयोगकर्ता अनुभव के लिए IncFS v2 की नई सुविधाओं और अनुकूलन की आवश्यकता होती है।
  • V1 गेम स्ट्रीमिंग का समर्थन करता है, लेकिन ऐसा करने पर v2 की तुलना में प्रदर्शन दंड और अधिक बैटरी, सीपीयू और रैम का उपयोग होता है।
  • V2 सुचारू प्रगति एनिमेशन, सटीक डिस्क-स्पेस उपयोग रिपोर्टिंग और तृतीय-पक्ष ऐप्स-स्ट्रीमिंग हस्तक्षेप की रोकथाम के साथ स्ट्रीमिंग के लिए बेहतर UX प्रदान करता है।

अपने कर्नेल में IncFS ड्राइवर को अपग्रेड करने के लिए, कर्नेल 4.14 या कर्नेल 4.19 के लिए निम्नलिखित पैच लागू करें:

अन्य सभी कस्टम कर्नेल संस्करणों के लिए कृपया पैचसेट में से एक को पोर्ट करें। वे केवल fs/incfs निर्देशिका को प्रभावित करते हैं और मौजूदा v1 कोड पर स्पष्ट रूप से लागू होते हैं।

IncFS ड्राइवर का उपयोग उसी तरीके से जारी रखें जैसे मूल लेकिन अब अपग्रेड किए गए Android 11 के लिए, या तो कर्नेल छवि के अंतर्निहित भाग के रूप में, या एक अलग मॉड्यूल के रूप में। सिस्टम बोर्ड या सिस्टम प्रॉपर्टी कॉन्फ़िगरेशन को न बदलें.

GKI कर्नेल छवि का उपयोग करने वाले नए उपकरणों को स्वचालित रूप से नवीनतम (v2) IncFS ड्राइवर मिलता है, जो कर्नेल छवि के एक भाग के रूप में कॉन्फ़िगर किया गया है। इसके लिए अतिरिक्त कदमों की आवश्यकता नहीं है.

लोड करने योग्य मॉड्यूल कॉन्फ़िगरेशन को एंड्रॉइड 12 में हटा दिया गया था, और यह नए उपकरणों के लिए समर्थित नहीं है। इसे केवल अपग्रेड के लिए, या विक्रेता छवि फ़्रीज़ के लिए अनुमति दी गई है जब मूल कर्नेल ने इसे पहले से ही एक मॉड्यूल के रूप में बनाया था।

संदर्भ कार्यान्वयन

इस कार्यान्वयन को या तो कर्नेल छवि के भाग के रूप में माना जा सकता है, या ( केवल एंड्रॉइड 11 के लिए ) लोड करने योग्य मॉड्यूल के रूप में।

लोड करने योग्य मॉड्यूल (पिक्सेल 4 डिवाइस) एंड्रॉइड एमुलेटर (कर्नेल छवि के एक भाग के रूप में)

सत्यापन और परीक्षण

फ़ीचर यूनिट टेस्ट, सीटीएस और जीटीएस का उपयोग करके कार्यान्वयन को मान्य करें।

सीटीएस

CtsIncrementalInstallHostTestCases उपयोग करें।

जीटी

atest GtsIncrementalInstallTestCases :

/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java

इंकएफएस का परीक्षण करें

  1. एक विकास वातावरण स्थापित करें .
  2. कार्यान्वयन अनुभाग में उल्लिखित कार्यान्वयन कार्यों को पूरा करें।
  3. निम्नलिखित मैन्युअल परीक्षण चलाएँ:
    mmma system/incremental_delivery/incfs/tests
    atest libincfs-test
    atest IncrementalServiceTest
    atest PackageManagerShellCommandTest
    PackageManagerShellCommandIncrementalTest

एंड्रॉइड एसडीके (एडीबी और एपीकेसिग्नर) के साथ इंकएफएस का परीक्षण कैसे करें

  • एक विकास वातावरण स्थापित करें .
  • कार्यान्वयन अनुभाग में उल्लिखित कार्यान्वयन कार्यों को पूरा करें।
  • लक्ष्य भौतिक डिवाइस या एम्यूलेटर पर बिल्ड को फ्लैश करें।
  • मौजूदा एपीके जेनरेट करें या प्राप्त करें।
  • एक डिबग साइनिंग कुंजी बनाएं.
  • build-tools फ़ोल्डर से v4 हस्ताक्षर प्रारूप के साथ एपीके पर हस्ताक्षर करें
    ./apksigner sign --ks debug.keystore game.apk
  • platform-tools फ़ोल्डर से डिवाइस पर एपीके इंस्टॉल करें
    ./adb install game.apk
इंस्टॉल का उदाहरण
चित्र 1 : उदाहरण स्थापित करें

इन परीक्षणों का पता लगाएँ