एंड्रॉइड 11 में पेश किया गया इंक्रीमेंटल फाइल सिस्टम (इंकएफएस) कर्नेल मॉड्यूल एंड्रॉइड ओएस को एंड्रॉइड डिबग ब्रिज (एडीबी) पर स्ट्रीम किए गए एपीके प्राप्त करने में सक्षम बनाता है।
यह स्व-निहित कर्नेल मॉड्यूल एक नया वर्चुअल फ़ाइल सिस्टम बनाता है जो मौजूदा एंड्रॉइड फ़ाइल सिस्टम के शीर्ष पर बैठता है। यह ऐप और गेम डेवलपर्स को एंड्रॉइड 11 या उच्चतर पर चलने वाले डिवाइस पर एडीबी के माध्यम से बड़े एपीके तैनात करने में सक्षम करने के लिए फ्रेमवर्क और एसडीके में बदलाव को पूरक करता है।
कर्नेल परिवर्तन एक नए एपीके सिग्नेचर स्कीम v4 प्रारूप को सक्षम करता है और एंड्रॉइड पैकेज मैनेजर में एंड्रॉइड फ्रेमवर्क परिवर्तन, नई सिस्टम सेवाओं और एडीबी में परिवर्तनों का समर्थन करता है।
कार्यान्वयन
IncFS को लागू करने के लिए, OEM और SoC निर्माताओं को अपने एंड्रॉइड डिवाइस बिल्ड में एक नया कर्नेल ड्राइवर जोड़ना होगा।
केवल एंड्रॉइड 11 के लिए , यदि कर्नेल ड्राइवर को मॉड्यूल के रूप में बनाया गया है तो इसे मांग पर लोड किया जाता है। यदि एडीबी वृद्धिशील इंस्टॉलेशन के माध्यम से कोई ऐप इंस्टॉल नहीं है, तो डिवाइस कर्नेल ड्राइवर को लोड नहीं करता है।
अन्यथा, जब यह कर्नेल छवि के एक भाग के रूप में बनता है, तो ड्राइवर हमेशा लोड होता है। यह कार्यान्वयन Android 12 और उच्चतर के लिए मान्य है, और इसका उपयोग Android 11 के साथ किया जा सकता है। कर्नेल ड्राइवर को Android 12 में अपग्रेड करने के बारे में जानकारी के लिए, कर्नेल ड्राइवर अपग्रेड देखें।
स्ट्रीम किए गए एपीके इंस्टॉलेशन को सक्षम करने के लिए कर्नेल ड्राइवर एक बड़े सिस्टम का हिस्सा है। OEM और विक्रेताओं को नमूना कार्यान्वयन में प्रदान किए गए सटीक IncFS कोड का उपयोग करने की आवश्यकता नहीं है। हालाँकि, सभी डिवाइसों में एक सुसंगत अनुभव सुनिश्चित करने के लिए, आपको यह सुनिश्चित करना होगा कि एपीआई कार्यान्वयन में एक फ़ाइल सिस्टम है जिसमें फ़ाइल-रीड कार्यक्षमता और निर्देशिका रीड-राइट कार्यक्षमता है जैसा कि इंक्रीमेंटल एफएस दस्तावेज़ीकरण के लिए यूजरस्पेस इंटरफ़ेस में परिभाषित किया गया है।
इसके अतिरिक्त, कार्यान्वयन में माउंट विकल्प और विशेष फ़ाइलें होनी चाहिए जो कार्यात्मक रूप से IncFS नमूना कार्यान्वयन से मेल खाती हों।
कार्यान्वयन के लिए आवश्यक परिवर्तन निम्नलिखित सूचीबद्ध हैं:
- कर्नेल बनाने के लिए विकास मशीन स्थापित करें ।
-
common-android-mainline
शाखा से सामान्य कर्नेल को लक्षित करें।repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
repo sync
- सत्यापित करें कि IncFS के लिए आवश्यक निम्नलिखित परिवर्तन शाखा चेकआउट में हैं:
- https://android-review.googlesource.com/c/kernel/common/+/1222869/
- https://android-review.googlesource.com/c/kernel/common/+/1222870
- https://android-review.googlesource.com/c/kernel/common/+/1222871
- https://android-review.googlesource.com/q/%2522ANDROID:+Incremental+fs:%2522+branch:android-mainline+status:merg
- या तो
CONFIG_INCREMENTAL_FS=y
या केवल Android 11 के लिए,CONFIG_INCREMENTAL_FS=m
defconfig
फ़ाइल के नीचे जोड़ें। उदाहरण देखने के लिए, नीचे दिए गए किसी एक लिंक पर क्लिक करें: - कर्नेल का निर्माण करें
- कर्नेल को एंड्रॉइड डिवाइस इमेज बिल्ड में एम्बेड करें।
- अपने लक्षित एंड्रॉइड डिवाइस के लिए, निम्नलिखित विक्रेता-विशिष्ट सिस्टम-प्रॉपर्टी लाइनों में से एक को अपनी
device.mk
फ़ाइल में जोड़ें ( एंड्रॉइड 12 और उच्चतर के साथ लॉन्च किए गए डिवाइसों में वैकल्पिक ): -
PRODUCT_PROPERTY_OVERRIDES += \
-
ro.incremental.enable=yes
-
PRODUCT_PROPERTY_OVERRIDES += \
-
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- एंड्रॉइड एमुलेटर और Pixel 4 के लिए उदाहरण
device.mk
फ़ाइलें देखें। - केवल Android 11 के लिए : यदि आप
CONFIG_INCREMENTAL_FS=m
का उपयोग कर रहे हैं, तो SE Linux नियम जोड़ें। -
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;
-
file.te
फ़ाइल - उदाहरण के लिए यहfile.te
फ़ाइल देखें।) - वृद्धिशील फ़ाइल सिस्टम ड्राइवर
-
type vendor_incremental_module, vendor_file_type, file_type;
-
file_contents
फ़ाइल - उदाहरण के लिए, यहfile_contents
फ़ाइल देखें। -
# Incremental file system driver
-
/vendor/lib/modules/incrementalfs\.ko
-
u:object_r:vendor_incremental_module:s0
जब आप CONFIG_INCREMENTAL_FS=y
का उपयोग कर रहे हों, तो फ़ाइल को इनमें से किसी एक के साथ जोड़ें:
जब आप CONFIG_INCREMENTAL_FS=m
( केवल Android 11 के लिए) का उपयोग कर रहे हों, तो फ़ाइल को इनमें से किसी एक के साथ जोड़ें:
निम्नलिखित सामग्री के साथ अपने डिवाइस /system/sepolicy/vendor
फ़ोल्डर में एक vold.te
फ़ाइल बनाएं और जोड़ें:
इसे वृद्धिशील फ़ाइल सिस्टम ड्राइवर लोड करने की अनुमति दें:
अपने /system/sepolicy/vendor
फ़ोल्डर में मौजूद मौजूदा file.te
फ़ाइल में निम्नलिखित SE Linux नियम जोड़ें:
अपने /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 के लिए निम्नलिखित पैच लागू करें:
- कर्नेल 4.14 पैच
- कर्नेल 4.19 पैच
अन्य सभी कस्टम कर्नेल संस्करणों के लिए कृपया पैचसेट में से एक को पोर्ट करें। वे केवल fs/incfs
निर्देशिका को प्रभावित करते हैं और मौजूदा v1 कोड पर स्पष्ट रूप से लागू होते हैं।
- कर्नेल 4.14 को v1 ड्राइवर पर ठीक करें
- कर्नेल 4.19 को v1 ड्राइवर पर ठीक करें
- कर्नेल 5.4 को 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
इंकएफएस का परीक्षण करें
- एक विकास वातावरण स्थापित करें .
- कार्यान्वयन अनुभाग में उल्लिखित कार्यान्वयन कार्यों को पूरा करें।
- निम्नलिखित मैन्युअल परीक्षण चलाएँ:
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

इन परीक्षणों का पता लगाएँ
- /एंड्रॉइड/कर्नेल/कॉमन/टूल्स/टेस्टिंग/सेल्फटेस्ट्स/फाइलसिस्टम्स/इंसीएफएस/
- /android/system/incremental_delivery/incfs/tests/incfs_test.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java