Android 11 में पेश किया गया इंक्रीमेंटल फ़ाइल सिस्टम (IncFS) कर्नेल मॉड्यूल इस नीति से, Android OS को 'Android डीबग ब्रिज' पर स्ट्रीम किए गए APK पाने की सुविधा मिलती है (एडीबी).
इसमें मौजूद कर्नेल मॉड्यूल एक नया वर्चुअल फ़ाइल सिस्टम बनाता है, जो अपडेट किया जा सकता है. इससे उपयोगकर्ताओं को, फ़्रेमवर्क और SDK टूल की मदद से, ऐप्लिकेशन और गेम डेवलपर ADB को Android 11 या इसके बाद वाले वर्शन पर चलने वाले डिवाइस में जोड़ना.
कर्नेल परिवर्तन से एक नई APK सिग्नेचर स्कीम v4 फ़ॉर्मैट और Android पैकेज मैनेजर में Android फ़्रेमवर्क के बदलावों का समर्थन करता है, में बदलाव करना होगा.
लागू करना
IncFS लागू करने के लिए, OEM और SoC मैन्युफ़ैक्चरर को एक नया कर्नेल जोड़ना होगा ड्राइवर को अपने Android डिवाइस बिल्ड में जोड़ सकती हैं.
सिर्फ़ Android 11 के लिए, अगर कर्नेल ड्राइवर को एक मॉड्यूल के तौर पर बनाया जाता है. इसे मांग पर लोड किया जाता है. अगर आपने ADB इंक्रीमेंटल इंस्टॉलेशन से कोई भी ऐप्लिकेशन इंस्टॉल नहीं होता है, डिवाइस कर्नेल ड्राइवर लोड नहीं करता है.
या फिर, जब यह कर्नेल के हिस्से के तौर पर बनता है ड्राइवर हमेशा लोड होता है. यह तरीका इनके लिए मान्य है: Android 12 और उसके बाद वाले वर्शन को, Android 11 में इस्तेमाल किया जा सकता है. इसके लिए kernel ड्राइवर को Android 12 में अपग्रेड करने की जानकारी, देखें Kernel ड्राइवर अपग्रेड.
कर्नेल ड्राइवर, स्ट्रीम किए गए APK को चालू करने के लिए बड़े सिस्टम का हिस्सा है इंस्टॉल किए गए हैं. OEM और वेंडर को, दिए गए सटीक IncFS कोड का इस्तेमाल करने की ज़रूरत नहीं है देखें. हालांकि, सभी उपयोगकर्ताओं को एक जैसा अनुभव देने के लिए, डिवाइसों के लिए, आपको यह पक्का करना होगा कि एपीआई लागू करने के लिए एक फ़ाइल सिस्टम मौजूद हो जिसमें फ़ाइल पढ़ने की सुविधा और डायरेक्ट्री में पढ़ने-लिखने की सुविधा इंक्रीमेंटल FS के लिए यूज़रस्पेस इंटरफ़ेस दस्तावेज़ में बताया गया है.
इसके अलावा, लागू करने के लिए माउंट के विकल्प होने चाहिए और विशेष फ़ाइलें जो 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:+इंक्रीमेंटल+fs:%2522+branch:android-mainline+status:merg
- इनमें से कोई एक जोड़ें:
CONFIG_INCREMENTAL_FS=y
या सिर्फ़ Android 11 के लिए,CONFIG_INCREMENTAL_FS=m
defconfig
फ़ाइल के सबसे नीचे मौजूद होता है. उदाहरण देखने के लिए, नीचे दिए गए लिंक में से एक: - कर्नेल बनाएं
- कर्नेल को Android डिवाइस की इमेज बिल्ड में जोड़ें.
- अपने टारगेट Android डिवाइस के लिए, इनमें से कोई एक वेंडर खास जोड़ें
सिस्टम-प्रॉपर्टी की लाइनों को आपकी
device.mk
फ़ाइल से जोड़ना (Android 12 और इसके बाद के वर्शन वाले डिवाइसों के लिए ज़रूरी नहीं है): PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=yes
PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Android एम्युलेटर के लिए,
device.mk
फ़ाइलों का उदाहरण देखें और Pixel 4. - सिर्फ़ 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 के लिए),
फ़ाइल को इनमें से किसी एक के साथ जोड़ें:
vold.te
फ़ाइल बनाएं और अपने डिवाइस में जोड़ें
/system/sepolicy/vendor
फ़ोल्डर, जिसमें यह कॉन्टेंट है:
इसे इंंक्रीमेंटल फ़ाइल सिस्टम ड्राइवर को लोड करने की अनुमति दें:
मौजूदा file.te
फ़ाइल में, एसई Linux के इन नियमों को जोड़ें
आपके /system/sepolicy/vendor
फ़ोल्डर में मिला:
मौजूदा file_contents
में, एसई Linux के इन नियमों को जोड़ें
आपके /system/sepolicy/vendor
फ़ोल्डर में मिली फ़ाइल:
Kernel ड्राइवर अपग्रेड
Android 12 पर अपग्रेड किए जाने वाले डिवाइसों में, IncFS का पुराना वर्शन हो सकता है ड्राइवर. ऐसे डिवाइसों के लिए, एओएसपी का सुझाव है कि आप IncFS ड्राइवर को इस तरह अपडेट करें: का मौजूदा वर्शन (इस मामले में v2) क्यों दिया है:
- Android 11 के साथ रिलीज़ किया गया वर्शन, शुरुआती तौर पर लागू होता है है, जो सिर्फ़ ADB इंस्टॉलेशन में मदद करने के लिए टारगेट किया गया है.
- Android 12, Play Games के इंस्टॉलेशन को स्ट्रीम करने के लिए, IncFS ड्राइवर का इस्तेमाल करता है, जिसे बेहतर उपयोगकर्ता के लिए IncFS v2 की नई सुविधाओं और ऑप्टिमाइज़ेशन की ज़रूरत है अनुभव.
- V1 गेम स्ट्रीमिंग की सुविधा देता है, लेकिन ऐसा करने पर परफ़ॉर्मेंस पर जुर्माना लग सकता है और v2 की तुलना में ज़्यादा बैटरी, सीपीयू, और रैम का इस्तेमाल किया जाता है.
- V2 में आसानी से खेले जाने वाले ऐनिमेशन की मदद से, स्ट्रीमिंग के लिए बेहतर उपयोगकर्ता अनुभव (UX) मिलता है, डिस्क-स्पेस के इस्तेमाल की सटीक रिपोर्टिंग करना और तीसरे पक्ष के ऐप्लिकेशन की स्ट्रीमिंग को रोकना हस्तक्षेप करते हैं.
अपने कर्नेल में IncFS ड्राइवर को अपग्रेड करने के लिए, ये पैच लागू करें कर्नेल 4.14 या कर्नेल 4.19:
- Kernel 4.14 पैच
- Kernel 4.19 पैच
अन्य सभी कस्टम कर्नेल वर्शन के लिए, कृपया किसी एक पैचसेट को पोर्ट करें. वे
केवल fs/incfs
निर्देशिका को प्रभावित करता है और
मौजूदा v1 कोड के साथ काम करता है.
- Kernel 4.14 वर्शन को v1 ड्राइवर में ठीक किया गया
- Kernel 4.19 का वर्शन v1 drivr में सुधार
- Kernel 5.4 ने v1 ड्राइवर को ठीक किया
IncFS ड्राइवर को ओरिजनल खाते की तरह ही इस्तेमाल करना जारी रखें. हालांकि, अब Android 11 को अपग्रेड किया हो, जो कर्नेल इमेज के पहले से मौजूद हिस्से के तौर पर मौजूद हो, या एक अलग मॉड्यूल के रूप में दिखाया जा सकता है. सिस्टम बोर्ड या सिस्टम प्रॉपर्टी को न बदलें कॉन्फ़िगरेशन.
GKI कर्नेल इमेज का इस्तेमाल करने वाले नए डिवाइसों में, सबसे नया (v2) IncFS ड्राइवर मिलता है अपने-आप, कर्नेल इमेज के हिस्से के तौर पर कॉन्फ़िगर होता है. यह ज़रूरी नहीं है का पालन करना होगा.
Android 12 में, लोड किए जा सकने वाले मॉड्यूल के कॉन्फ़िगरेशन को बंद कर दिया गया था. नए डिवाइसों के साथ काम करता है. ऐसा सिर्फ़ अपग्रेड करने या वेंडर के लिए किया जा सकता है इमेज को फ़्रीज़ करता है, जब ओरिजनल कर्नेल के लिए पहले से ही यह मॉड्यूल के तौर पर बन चुका होता है.
रेफ़रंस फ़ाइलों को लागू करना
इस तरह के लागू करने को या तो कर्नेल इमेज के हिस्से के रूप में माना जा सकता है या ( सिर्फ़ Android 11 वर्शन वाले वर्शन).
लोड किया जा सकने वाला मॉड्यूल (Pixel 4 डिवाइस)- कर्नेल मॉड्यूल पहले से बनाए गए जोड़ें
- डिवाइस पर Kernel मॉड्यूल सिस्टम प्रॉपर्टी में बदलाव जोड़ें और चालू करें
- SE Linux नियम अपडेट करें
पुष्टि और जांच करना
फ़ीचर यूनिट टेस्ट, सीटीएस, और जीटीएस का इस्तेमाल करके लागू किए जाने की पुष्टि करें.
सीटीएस
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
Android SDK (ADB और apksigner) की मदद से, IncFS की जांच करना
- सेट अप करें डेवलपमेंट एनवायरमेंट होने चाहिए.
- लागू करने वाले सेक्शन में बताए गए टास्क पूरे करें.
- टारगेट किए गए फ़िज़िकल डिवाइस या एम्युलेटर पर बिल्ड को फ़्लैश करें.
- मौजूदा APK जनरेट करना या पाना.
- डीबग साइनिंग पासकोड बनाएं.
- APK पर
build-tools
फ़ोल्डर से v4 हस्ताक्षर फ़ॉर्मैट का इस्तेमाल करके हस्ताक्षर करें../apksigner sign --ks debug.keystore game.apk
- डिवाइस पर APK को
platform-tools
से इंस्टॉल करें फ़ोल्डर खोलें../adb install game.apk
इन टेस्ट का पता लगाएं
- /android/kernel/common/tools/testing/selftests/filesystems/incfs/
- /android/system/incremental_delivery/incfs/tests/incfs_test.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java