इंक्रीमेंटल फ़ाइल सिस्टम

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 सैंपल लागू करने के तरीके से मेल खाती हैं.

नीचे बताया गया है कि लागू करने के लिए ज़रूरी बदलाव कैसे किए जाते हैं:

  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. कर्नेल को Android डिवाइस की इमेज बिल्ड में जोड़ें.
  7. अपने टारगेट Android डिवाइस के लिए, इनमें से कोई एक वेंडर खास जोड़ें सिस्टम-प्रॉपर्टी की लाइनों को आपकी device.mk फ़ाइल से जोड़ना (Android 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 एम्युलेटर के लिए, device.mk फ़ाइलों का उदाहरण देखें और Pixel 4.
  10. सिर्फ़ Android 11 के लिए: अगर CONFIG_INCREMENTAL_FS=m का इस्तेमाल किया जा रहा है, तो SE Linux नियम जोड़ें.
  11. vold.te फ़ाइल बनाएं और अपने डिवाइस में जोड़ें /system/sepolicy/vendor फ़ोल्डर, जिसमें यह कॉन्टेंट है:

    • 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 फ़ाइल में, एसई Linux के इन नियमों को जोड़ें आपके /system/sepolicy/vendor फ़ोल्डर में मिला:

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

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

    • file_contents फ़ाइल - उदाहरण के लिए, यह file_contents फ़ाइल देखें.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

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:

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

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

GKI कर्नेल इमेज का इस्तेमाल करने वाले नए डिवाइसों में, सबसे नया (v2) IncFS ड्राइवर मिलता है अपने-आप, कर्नेल इमेज के हिस्से के तौर पर कॉन्फ़िगर होता है. यह ज़रूरी नहीं है का पालन करना होगा.

Android 12 में, लोड किए जा सकने वाले मॉड्यूल के कॉन्फ़िगरेशन को बंद कर दिया गया था. नए डिवाइसों के साथ काम करता है. ऐसा सिर्फ़ अपग्रेड करने या वेंडर के लिए किया जा सकता है इमेज को फ़्रीज़ करता है, जब ओरिजनल कर्नेल के लिए पहले से ही यह मॉड्यूल के तौर पर बन चुका होता है.

रेफ़रंस फ़ाइलों को लागू करना

इस तरह के लागू करने को या तो कर्नेल इमेज के हिस्से के रूप में माना जा सकता है या ( सिर्फ़ Android 11 वर्शन वाले वर्शन).

लोड किया जा सकने वाला मॉड्यूल (Pixel 4 डिवाइस) Android Emulator (कर्नेल इमेज के हिस्से के रूप में)

पुष्टि और जांच करना

फ़ीचर यूनिट टेस्ट, सीटीएस, और जीटीएस का इस्तेमाल करके लागू किए जाने की पुष्टि करें.

सीटीएस

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

Android SDK (ADB और apksigner) की मदद से, IncFS की जांच करना

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

इन टेस्ट का पता लगाएं