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

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

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

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

कार्यान्वयन

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

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

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

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

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

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

  1. कर्नेल बनाने के लिए विकास मशीन स्थापित करें
  2. common-android-mainline शाखा से सामान्य कर्नेल को लक्षित करें।
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. पुष्टि करें कि शाखा चेकआउट में IncFS के लिए आवश्यक निम्नलिखित परिवर्तन हैं:
  4. defconfig फ़ाइल के निचले भाग में CONFIG_INCREMENTAL_FS=y या केवल Android 11 , CONFIG_INCREMENTAL_FS=m को जोड़ें। एक उदाहरण देखने के लिए, नीचे दिए गए लिंक में से किसी एक पर क्लिक करें:
  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. Android एमुलेटर और 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;

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

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

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

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

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

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

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

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

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

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

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

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

इस कार्यान्वयन को या तो कर्नेल छवि के भाग के रूप में माना जा सकता है, या ( केवल Android 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
    3
    atest libincfs-test
    4
    atest IncrementalServiceTest
    atest PackageManagerShellCommandTest
    PackageManagerShellCommandIncrementalTest

Android SDK (ADB और apksigner) के साथ IncFS का परीक्षण कैसे करें

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

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