16 केबी वाले पेज साइज़ का इस्तेमाल करें

Google Play के साथ काम करने के लिए, 16 केबी के पेज साइज़ की ज़रूरी शर्त
Google Play पर सबमिट किए गए सभी नए ऐप्लिकेशन और मौजूदा ऐप्लिकेशन के अपडेट के लिए, 1 नवंबर, 2025 से 64-बिट डिवाइसों पर 16 केबी पेज साइज़ के साथ काम करना ज़रूरी होगा. साथ ही, इन ऐप्लिकेशन को Android 15 या इसके बाद के वर्शन वाले डिवाइसों को टारगेट करना होगा.

Android पर, अब तक सिर्फ़ 4 केबी मेमोरी वाले पेज साइज़ का इस्तेमाल किया जा सकता था. इससे, Android डिवाइसों में आम तौर पर मौजूद कुल मेमोरी के लिए, सिस्टम मेमोरी की परफ़ॉर्मेंस को ऑप्टिमाइज़ किया जाता था. Android 15 से, AOSP उन डिवाइसों के साथ काम करता है जिन्हें 16 केबी (16 केबी डिवाइस) के पेज साइज़ का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है. अगर आपका ऐप्लिकेशन, सीधे तौर पर या किसी SDK टूल के ज़रिए, NDK लाइब्रेरी का इस्तेमाल करता है, तो आपको अपने ऐप्लिकेशन को फिर से बनाना होगा, ताकि वह 16 केबी वाले डिवाइसों पर काम कर सके.

डिवाइस बनाने वाली कंपनियां, ज़्यादा फ़िज़िकल मेमोरी (रैम) वाले डिवाइस बना रही हैं. इसलिए, इनमें से कई डिवाइसों पर 16 केबी (और बाद में ज़्यादा) पेज साइज़ का इस्तेमाल किया जाएगा, ताकि डिवाइस की परफ़ॉर्मेंस को ऑप्टिमाइज़ किया जा सके. 16 केबी वाले पेज साइज़ वाले डिवाइसों के लिए, ऐप्लिकेशन को चलाने की सुविधा जोड़ने पर, आपका ऐप्लिकेशन इन डिवाइसों पर चल पाएगा. साथ ही, इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस में हुई सुधारों का फ़ायदा भी मिलेगा. फिर से कंपाइल किए बिना, ऐप्लिकेशन Android के आने वाले वर्शन में 16 KB वाले डिवाइसों पर काम नहीं करेंगे.

अपने ऐप्लिकेशन के लिए सहायता जोड़ने में आपकी मदद करने के लिए, हमने यह देखने का तरीका बताया है कि आपके ऐप्लिकेशन पर असर पड़ा है या नहीं. साथ ही, अगर लागू हो, तो अपने ऐप्लिकेशन को फिर से बनाने का तरीका और 16 केबी वाले एनवायरमेंट में अपने ऐप्लिकेशन की जांच करने का तरीका भी बताया है. इसके लिए, हमने Android 15 के सिस्टम इमेज वाले Android एमुलेटर का इस्तेमाल करने का तरीका भी बताया है.

फ़ायदे और परफ़ॉर्मेंस में सुधार

16 केबी वाले पेज साइज़ के साथ कॉन्फ़िगर किए गए डिवाइस औसतन थोड़ी ज़्यादा मेमोरी का इस्तेमाल करते हैं, लेकिन इससे सिस्टम और ऐप्लिकेशन, दोनों के लिए परफ़ॉर्मेंस में कई सुधार भी होते हैं:

  • सिस्टम में मेमोरी कम होने पर, ऐप्लिकेशन लॉन्च होने में लगने वाला समय कम हो गया है: औसतन 3.16% कम, जिन ऐप्लिकेशन की हमने जांच की है उनमें 30% तक का सुधार हुआ है
  • ऐप्लिकेशन के लॉन्च के दौरान, पावर सप्लाई में कमी: औसतन 4.56% की कमी
  • कैमरे को तेज़ी से लॉन्च करने की सुविधा: औसतन 4.48% ज़्यादा तेज़ी से हॉट स्टार्ट और 6.60% ज़्यादा तेज़ी से कोल्ड स्टार्ट
  • सिस्टम बूट होने का समय बेहतर हुआ: औसतन 8% (करीब 950 मिलीसेकंड) की बढ़ोतरी हुई

ये सुधार, हमारी शुरुआती जांच पर आधारित हैं. इसलिए, हो सकता है कि असल डिवाइसों पर नतीजे अलग हों. जैसे-जैसे हम अपनी टेस्टिंग को जारी रखेंगे, वैसे-वैसे हम ऐप्लिकेशन को मिलने वाले संभावित फ़ायदों का अतिरिक्त विश्लेषण देंगे.

देखें कि आपके ऐप्लिकेशन पर इसका असर पड़ा है या नहीं

如果您的应用使用了任何原生代码,则应重新构建应用,使其支持 16 KB 设备。如果您不确定自己的应用是否使用了原生代码,可以使用 APK 分析器来确定是否存在任何原生代码,然后检查您找到的任何共享库的 ELF 段对齐情况。Android Studio 还提供了一些功能,可帮助您自动检测对齐问题

如果您的应用仅使用以 Java 或 Kotlin 编程语言编写的代码(包括所有库或 SDK),则该应用已支持 16 KB 设备。不过,我们建议您在 16 KB 环境中测试应用,以验证应用行为是否出现意外的回归。

क्या आपका ऐप्लिकेशन, नेटिव कोड का इस्तेमाल करता है?

अगर आपके ऐप्लिकेशन में इनमें से कोई भी स्थिति लागू होती है, तो इसका मतलब है कि वह नेटिव कोड का इस्तेमाल करता है:

  • आपका ऐप्लिकेशन, C/C++ (नेटिव) कोड का इस्तेमाल करता है. अगर आपका ऐप्लिकेशन Android NDK का इस्तेमाल करता है, तो इसका मतलब है कि आपका ऐप्लिकेशन नेटिव कोड का इस्तेमाल करता है.
  • आपका ऐप्लिकेशन, तीसरे पक्ष की ऐसी नेटिव लाइब्रेरी या डिपेंडेंसी (जैसे, एसडीके) से लिंक होता है जो इनका इस्तेमाल करती हैं.
  • आपके ऐप्लिकेशन को तीसरे पक्ष के ऐप्लिकेशन बिल्डर ने बनाया है. यह बिल्डर, डिवाइस पर नेटिव लाइब्रेरी का इस्तेमाल करता है.

APK ऐनालाइज़र का इस्तेमाल करके नेटिव लाइब्रेरी की पहचान करना

APK Analyzer एक ऐसा टूल है जिसकी मदद से, बनाए गए APK के अलग-अलग पहलुओं का आकलन किया जा सकता है. यह देखने के लिए कि आपका ऐप्लिकेशन नेटिव कोड का इस्तेमाल करता है या नहीं (इससे कोई फ़र्क़ नहीं पड़ता कि वह 16 केबी वाले पेजों के साथ काम करता है या नहीं):

  1. Android Studio खोलें. इसके बाद, File > Open पर क्लिक करें और कोई प्रोजेक्ट चुनें.
  2. मेन्यू बार में जाकर, Build > Analyze APK... पर क्लिक करें

    APK ऐनालाइज़र लॉन्च करने के लिए, Studio के Build मेन्यू का विकल्प
  3. वह APK चुनें जिसका विश्लेषण करना है.

  4. lib फ़ोल्डर में देखें. अगर कोई शेयर किया गया ऑब्जेक्ट (.so) फ़ाइल मौजूद है, तो वह इसी फ़ोल्डर में होगी. अगर शेयर की गई कोई ऑब्जेक्ट फ़ाइल मौजूद है, तो आपका ऐप्लिकेशन नेटिव कोड का इस्तेमाल करता है. अलाइनमेंट कॉलम में, अलाइनमेंट से जुड़ी समस्याओं वाली फ़ाइलों के लिए चेतावनी वाले मैसेज दिखते हैं. अगर शेयर की गई कोई ऑब्जेक्ट फ़ाइल मौजूद नहीं है या कोई lib फ़ोल्डर नहीं है, तो इसका मतलब है कि आपका ऐप्लिकेशन नेटिव कोड का इस्तेमाल नहीं करता है.

    APK एनालाइज़र व्यू में दिखाया गया है कि शेयर की गई ऑब्जेक्ट फ़ाइलें मौजूद हैं

अपने-आप होने वाली जांचों से, अलाइनमेंट से जुड़ी समस्याओं का पता लगाना

अगर आपकी पहले से बनी लाइब्रेरी या APK, 16 केबी के मुताबिक नहीं हैं, तो Android Studio आपको पहले से ही इसकी सूचना दे देता है. APK Analyzer टूल का इस्तेमाल करके देखें कि किन लाइब्रेरी को अपडेट करने की ज़रूरत है या कोड में कोई बदलाव करना ज़रूरी है या नहीं.

किसी प्रोजेक्ट में अलाइनमेंट से जुड़ी समस्याओं के बारे में Studio की चेतावनियां

Android Studio में Lint, उन नेटिव लाइब्रेरी को भी हाइलाइट करता है जो 16 केबी के साथ अलाइन नहीं हैं.

Studio के लिंटर की ओर से, अलाइन नहीं की गई नेटिव लाइब्रेरी के बारे में चेतावनी

शेयर की गई लाइब्रेरी के लिए, ईएलएफ़ सेगमेंट के अलाइनमेंट की जांच करना

शेयर की गई किसी भी लाइब्रेरी के लिए, पुष्टि करें कि शेयर की गई लाइब्रेरी के ईएलएफ़ सेगमेंट, 16 केबी ईएलएफ़ अलाइनमेंट का इस्तेमाल करके सही तरीके से अलाइन किए गए हों. अगर Linux या macOS पर डेवलपमेंट किया जा रहा है, तो यहां दिए गए सेक्शन में बताए गए तरीके से check_elf_alignment.sh स्क्रिप्ट का इस्तेमाल किया जा सकता है. कमांड-लाइन टूल का सीधे तौर पर इस्तेमाल भी किया जा सकता है.

check_elf_alignment.sh स्क्रिप्ट का इस्तेमाल करें (Linux या macOS)

check_elf_alignment.sh स्क्रिप्ट का इस्तेमाल करके, ईएलएफ़ सेगमेंट के अलाइनमेंट की जांच करने के लिए, यह तरीका अपनाएं:

  1. check_elf_alignment.sh स्क्रिप्ट को किसी फ़ाइल में सेव करें.

  2. अपने ऐप्लिकेशन की APK फ़ाइल पर स्क्रिप्ट चलाएं:

    check_elf_alignment.sh APK_NAME.apk
    

    यह स्क्रिप्ट, शेयर की गई सभी arm64-v8a लाइब्रेरी के लिए, ALIGNED या UNALIGNED आउटपुट देती है.

  3. अगर कोई arm64-v8a या x86_64 शेयर की गई लाइब्रेरी UNALIGNED है, तो आपको उन लाइब्रेरी के लिए पैकेजिंग अपडेट करनी होगी. इसके बाद, अपने ऐप्लिकेशन को फिर से कंपाइल करें और इस सेक्शन में दिए गए चरणों का पालन करके, फिर से जांच करें.

कमांड-लाइन टूल का सीधे तौर पर इस्तेमाल करना

कमांड-लाइन टूल का इस्तेमाल करके, सीधे तौर पर ईएलएफ़ सेगमेंट के अलाइनमेंट की जांच करने के लिए, यह तरीका अपनाएं:

  1. पक्का करें कि Android SDK बिल्ड-टूल का 35.0.0 या उसके बाद का वर्शन और Android NDK, दोनों इंस्टॉल हों. इसके लिए, Android Studio में एसडीके मैनेजर या sdkmanager कमांड-लाइन टूल का इस्तेमाल करें.
  2. अपने ऐप्लिकेशन की APK फ़ाइल निकालें:

    Linux या macOS

    unzip APK_NAME.apk -d /tmp/my_apk_out
    

    Windows (PowerShell)

    Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_out
    
  3. आपने जिस अस्थायी डायरेक्ट्री में अपनी APK फ़ाइल को एक्सट्रैक्ट किया है उसमें, शेयर की गई ऑब्जेक्ट (.so) फ़ाइलों के लिए lib डायरेक्ट्री का कॉन्टेंट देखें. ये वही शेयर की गई ऑब्जेक्ट फ़ाइलें हैं जो आपको APK Analyzer का इस्तेमाल करके नेटिव लाइब्रेरी की पहचान करने के दौरान दिखती हैं. हर शेयर की गई ऑब्जेक्ट फ़ाइल पर यह कमांड चलाएं:

    Linux या macOS

    SDK_ROOT_LOCATION/Android/sdk/ndk/NDK_VERSION/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-objdump -p SHARED_OBJECT_FILE.so | grep LOAD
    

    Windows (PowerShell)

    SDK_ROOT_LOCATION\Android\sdk\ndk\NDK_VERSION\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-objdump.exe -p SHARED_OBJECT_FILE.so | Select-String -Pattern "LOAD"
    

    यहां SDK_ROOT_LOCATION उस डायरेक्ट्री का पाथ है जहां आपने Android SDK इंस्टॉल किया है, SHARED_OBJECT_FILE उस शेयर की गई ऑब्जेक्ट फ़ाइल का नाम है जिसकी जांच की जा रही है, और NDK_VERSION Android NDK का वह वर्शन है जिसे आपने इंस्टॉल किया है. उदाहरण के लिए, 28.0.12433566. जांच की गई हर फ़ाइल के लिए, आउटपुट कुछ इस तरह दिखेगा:

    LOAD off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**14
    LOAD off    0x0000000000042a90 vaddr 0x0000000000043a90 paddr 0x0000000000043a90 align 2**14
    LOAD off    0x0000000000046230 vaddr 0x0000000000048230 paddr 0x0000000000048230 align 2**14
    
  4. आउटपुट लाइनों की जांच करें. इससे यह पक्का किया जा सकेगा कि लोड सेगमेंट में 2**14 से कम वैल्यू नहीं हैं. अगर लोड सेगमेंट 2**13, 2**12 या इससे कम वैल्यू वाले हैं, तो आपको उन लाइब्रेरी के लिए पैकेजिंग अपडेट करनी होगी. इसके बाद, अपने ऐप्लिकेशन को फिर से कंपाइल करें और इस सेक्शन में दिए गए चरणों का पालन करके, फिर से जांच करें.

  5. इसके बाद, अपने ऐप्लिकेशन की APK फ़ाइल पर zipalign कमांड-लाइन टूल चलाएं:

    Linux या macOS

    SDK_ROOT_LOCATION/Android/sdk/build-tools/35.0.0/zipalign -v -c -P 16 4 APK_NAME.apk
    

    Windows (PowerShell)

    SDK_ROOT_LOCATION\Android\sdk\build-tools\35.0.0\zipalign.exe -v -c -P 16 4 APK_NAME.apk
    

    यहां SDK_ROOT_LOCATION उस डायरेक्ट्री का पाथ है जहां आपने Android SDK इंस्टॉल किया है. साथ ही, APK_NAME आपके ऐप्लिकेशन की APK फ़ाइल का नाम है. अगर सभी शेयर की गई लाइब्रेरी सही तरीके से अलाइन की गई हैं, तो आउटपुट की आखिरी लाइन में "पुष्टि हो गई" लिखा होगा.

    अगर पुष्टि नहीं हो पाती है, तो शेयर की गई कुछ लाइब्रेरी को फिर से अलाइन करना होगा. इसलिए, आपको उन लाइब्रेरी के लिए पैकेजिंग अपडेट करनी होगी. इसके बाद, अपने ऐप्लिकेशन को फिर से कंपाइल करें और इस सेक्शन में दिए गए चरणों का पालन करके, फिर से जांच करें.

अपने ऐप्लिकेशन को 16 केबी वाले डिवाइसों के साथ काम करने के लिए बनाएं

अगर आपका ऐप्लिकेशन नेटिव कोड का इस्तेमाल करता है, तो पक्का करें कि आपका ऐप्लिकेशन 16 केबी डिवाइसों के साथ काम करता हो. इसके लिए, यहां दिए गए सेक्शन में बताया गया तरीका अपनाएं:

  1. शेयर की गई लाइब्रेरी के पैकेजिंग को अपडेट करना
  2. अपने ऐप्लिकेशन को 16 केबी ईएलएफ़ अलाइनमेंट का इस्तेमाल करके कंपाइल करें
  3. कोड ठीक करना और रनटाइम से जुड़ी समस्याएं हल करना
  4. एसडीके टूल की जांच करके पता लगाएं कि वे 16 केबी वाले पेज साइज़ के साथ काम करते हैं या नहीं

शेयर की गई लाइब्रेरी के पैकेजिंग को अपडेट करना

AGP को 8.5.1 या इसके बाद वाले वर्शन में अपग्रेड करें. साथ ही, बिना कंप्रेस की गई शेयर की गई लाइब्रेरी का इस्तेमाल करें.

ज़िप अलाइनमेंट की पुष्टि करने के लिए, bundletool का इस्तेमाल करना

अपने बंडल के अलाइनमेंट को देखने के लिए, इसका इस्तेमाल करें:

bundletool dump config --bundle=<my .aab>  | grep alignment

अगर आपको PAGE_ALIGNMENT_16K दिखता है, तो इसका मतलब है कि आपके बंडल के लिए 16 केबी ज़िप अलाइनमेंट की ज़रूरत है. अगर आपको PAGE_ALIGNMENT_4K दिखता है, तो इसका मतलब है कि इस AAB से बनाए गए APK में, zip फ़ाइल में 4 केबी अलाइन की गई .so फ़ाइलें होंगी.

AGP 8.5.1 या इसके बाद का वर्शन

16 केबी वाले डिवाइसों के लिए, कंप्रेस न की गई शेयर की गई लाइब्रेरी के साथ शिप किए गए ऐप्लिकेशन को, उन्हें 16 केबी वाले ज़िप-अलाइन किए गए बाउंड्री पर अलाइन करना होगा. इसके लिए, आपको Android Gradle Plugin (AGP) को 8.5.1 या इसके बाद के वर्शन पर अपग्रेड करना होगा. अपग्रेड करने की प्रोसेस के बारे में जानने के लिए, Android Gradle प्लगिन अपग्रेड असिस्टेंट सेक्शन देखें.

AGP का 8.5 या इससे पहले का वर्शन

अगर AGP को 8.5.1 या इसके बाद के वर्शन पर अपग्रेड नहीं किया जा सकता, तो कंप्रेस की गई शेयर की गई लाइब्रेरी का इस्तेमाल करें. अपने Gradle कॉन्फ़िगरेशन को अपडेट करें, ताकि Gradle आपके ऐप्लिकेशन को पैकेज करते समय शेयर की गई लाइब्रेरी को कंप्रेस कर सके. इससे, अलाइन न की गई शेयर की गई लाइब्रेरी की वजह से, ऐप्लिकेशन इंस्टॉल करने में आने वाली समस्याओं से बचा जा सकेगा.

शानदार

अपनी build.gradle फ़ाइल में, यह विकल्प जोड़ें:

android {
  ...
  packagingOptions {
      jniLibs {
        useLegacyPackaging true
      }
  }
}

Kotlin

अपनी build.gradle.kts फ़ाइल में, यह विकल्प जोड़ें:

android {
  ...
  packagingOptions {
      jniLibs {
        useLegacyPackaging = true
      }
  }
}
AGP का 8.0 या इससे पहले का वर्शन

अगर AGP का वर्शन 8.0 या इससे पहले का है, तो आपको gradle.properties फ़ाइल में जाकर, ऐप्लिकेशन बंडलों के लिए कंप्रेस न की गई नेटिव लाइब्रेरी का विकल्प भी बंद करना होगा:

android.bundle.enableUncompressedNativeLibs=false

अपने ऐप्लिकेशन को 16 केबी ईएलएफ़ अलाइनमेंट का इस्तेमाल करके कंपाइल करें

16 केबी वाले डिवाइसों पर, आपके ऐप्लिकेशन को चलाने के लिए, शेयर की गई लाइब्रेरी के ईएलएफ़ सेगमेंट को 16 केबी ईएलएफ़ अलाइनमेंट का इस्तेमाल करके सही तरीके से अलाइन करना ज़रूरी है.

गेम डेवलपर के लिए: अगर आपका गेम Unity गेम इंजन पर चलता है, तो Unity गाइड देखें. अगर आपका गेम Unreal गेम इंजन पर चलता है, तो Unreal गाइड देखें. नेटिव गेम इंजन के लिए, इस गाइड को पढ़ें.

16 केबी ईएलएफ़ अलाइनमेंट का इस्तेमाल करके अपने ऐप्लिकेशन को कंपाइल करने के लिए, यहां दिए गए सेक्शन में से किसी एक में दिया गया तरीका अपनाएं. यह तरीका, आपके इस्तेमाल किए जा रहे Android NDK के वर्शन पर निर्भर करता है.

Android NDK r28 और इसके बाद के वर्शन

एनडीके के r28 और उसके बाद के वर्शन, डिफ़ॉल्ट रूप से 16 केबी के हिसाब से अलाइन किए जाते हैं.

Android NDK r27 और इससे पहले के वर्शन

Android NDK के r27 या इससे पुराने वर्शन के साथ, 16 केबी अलाइनमेंट वाली शेयर की गई लाइब्रेरी को कंपाइल करने के लिए, इन लिंकर फ़्लैग का इस्तेमाल करें:

-Wl,-z,max-page-size=16384
-Wl,-z,common-page-size=16384

यहां अपने बिल्ड सिस्टम की कॉन्फ़िगरेशन फ़ाइलों को अपडेट करने का तरीका बताया गया है:

ndk-build

अगर ndk-build का इस्तेमाल किया जा रहा है, तो 16 केबी ईएलएफ़ अलाइनमेंट की सुविधा चालू करने के लिए, Android.mk को अपडेट करें:

LOCAL_LDFLAGS += -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384

CMake

अगर CMake का इस्तेमाल किया जा रहा है, तो 16 केबी ईएलएफ़ अलाइनमेंट चालू करने के लिए, CMakeLists.txt को अपडेट करें:

target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
    "-Wl,-z,max-page-size=16384"
    "-Wl,-z,common-page-size=16384"
)

कोड ठीक करना और रनटाइम से जुड़ी समस्याएं हल करना

अगर आपका ऐप्लिकेशन 16 केबी वाले पेज साइज़ के साथ काम करता है, तब भी उसमें गड़बड़ियां हो सकती हैं. ऐसा तब होता है, जब आपके कोड में यह अनुमान लगाया गया हो कि डिवाइस में किसी खास साइज़ का पेज इस्तेमाल किया जा रहा है. इससे बचने के लिए, यह तरीका अपनाएं:

  1. अपने कोड लॉजिक से, PAGE_SIZE कॉन्सटेंट या इंस्टेंस को रेफ़रंस करने वाली किसी भी हार्ड-कोडेड डिपेंडेंसी को हटाएं. साथ ही, ऐसे इंस्टेंस को भी हटाएं जो यह मानते हैं कि डिवाइस के पेज का साइज़ 4 केबी (4096) है.

    इसके बजाय, getpagesize() या sysconf(_SC_PAGESIZE) का इस्तेमाल करें.

  2. mmap() और अन्य ऐसे एपीआई के इस्तेमाल का पता लगाएं जिनके लिए पेज के साथ अलाइन किए गए आर्ग्युमेंट की ज़रूरत होती है. साथ ही, ज़रूरी होने पर उन्हें अन्य विकल्पों से बदलें.

कुछ मामलों में, अगर आपका ऐप्लिकेशन PAGE_SIZE का इस्तेमाल ऐसी वैल्यू के तौर पर करता है जो पेज के साइज़ से जुड़ी नहीं है, तो 16 केबी मोड में इस्तेमाल करने पर, आपका ऐप्लिकेशन काम करना बंद नहीं करेगा. हालांकि, अगर इस वैल्यू को MAP_FIXED के बिना mmap के साथ कर्नल को पास किया जाता है, तो कर्नल अब भी पूरे पेज का इस्तेमाल करता है. इससे कुछ मेमोरी बर्बाद हो जाती है. इन वजहों से, NDK r27 और इसके बाद के वर्शन पर 16 केबी मोड चालू होने पर, PAGE_SIZE को तय नहीं किया जाता.

अगर आपका ऐप्लिकेशन इस तरह से PAGE_SIZE का इस्तेमाल करता है और इस वैल्यू को कभी भी सीधे तौर पर कर्नल को नहीं भेजता है, तो PAGE_SIZE का इस्तेमाल करने के बजाय, एक नया वैरिएबल बनाएं. इसका नाम ऐसा रखें जिससे पता चले कि इसका इस्तेमाल अन्य कामों के लिए किया जाता है और यह असली मेमोरी पेज को नहीं दिखाता है.

देखें कि एसडीके, 16 केबी वाले पेज साइज़ के साथ काम करते हैं या नहीं

कई एसडीके, 16 केबी वाले पेज साइज़ के साथ काम करते हैं. खास तौर पर, अगर आपने उन्हें खुद बनाया है या आपको हाल ही में प्रीबिल्ट एसडीके मिले हैं. हालांकि, एसडीके के कुछ प्रीबिल्ट या एसडीके के वर्शन 16 केबी के साथ काम नहीं करते. इसलिए, आपको एसडीके टूल की सेवा देने वाली हर कंपनी की वेबसाइट पर जाकर यह देखना चाहिए कि 16 केबी के साथ कौनसा वर्शन इस्तेमाल किया जा सकता है.

अपने ऐप्लिकेशन को उन डिवाइसों पर टेस्ट करें जो 16 केबी वाले पेज साइज़ पर काम करते हों

16 केबी वाले डिवाइसों के साथ काम करने वाला ऐप्लिकेशन बनाने के बाद, आपको इसे 16 केबी वाले डिवाइसों पर टेस्ट करना होगा. इससे यह पता चलेगा कि ऐप्लिकेशन में कोई गड़बड़ी तो नहीं है. ऐसा करने के लिए, इन चरणों का अनुसरण करें:

  1. Android 15 SDK या इसके बाद का वर्शन सेट अप करें.

  2. इनमें से कोई एक टेस्टिंग एनवायरमेंट सेट अप करें:

  3. अपने टेस्ट डिवाइस को चालू करें. इसके बाद, यह पुष्टि करने के लिए कि यह 16 केबी वाले एनवायरमेंट का इस्तेमाल कर रहा है, यह कमांड चलाएं:

    adb shell getconf PAGE_SIZE
    

    इस कमांड से 16384 वैल्यू मिलनी चाहिए.

  4. यह पुष्टि करने के लिए कि आपका ऐप्लिकेशन 16 केबी के साथ अलाइन है, नीचे दी गई zipalign कमांड चलाएं. यहां APK_NAME, आपके ऐप्लिकेशन की APK फ़ाइल का नाम है:

    zipalign -c -P 16 -v 4 APK_NAME.apk
    
  5. अपने ऐप्लिकेशन की अच्छी तरह से जांच करें. साथ ही, उन सभी जगहों पर फ़ोकस करें जिन पर पेज के साइज़ के हिसाब से कोड इंस्टेंस में बदलाव करने का असर पड़ सकता है.

16 केबी पर आधारित सिस्टम इमेज के साथ Android Emulator सेट अप करना

Android Emulator का इस्तेमाल करके, 16 केबी वाला एनवायरमेंट सेट अप करने के लिए, यह तरीका अपनाएं:

  1. Android Studio में, Tools > SDK Manager पर क्लिक करें.
  2. एसडीके प्लैटफ़ॉर्म टैब में, पैकेज की जानकारी दिखाएं को चुनें. इसके बाद, Android VanillaIceCream या इसके बाद के वर्शन वाले सेक्शन को बड़ा करें. इसके बाद, आपको जितने वर्चुअल डिवाइस बनाने हैं उसके हिसाब से, नीचे दी गई एक या दोनों एम्युलेटर सिस्टम इमेज चुनें:

    • Google APIs Experimental 16 केबी पेज साइज़ ARM 64 v8a सिस्टम इमेज
    • Google APIs Experimental 16 KB Page Size Intel x86_64 Atom System Image
    Android Studio में एसडीके मैनेजर का इस्तेमाल करके, 16 केबी वाली एम्युलेटर सिस्टम इमेज डाउनलोड करना
  3. आपने जो सिस्टम इमेज चुनी हैं उन्हें डाउनलोड करने के लिए, लागू करें > ठीक है पर क्लिक करें.

  4. Android 15 के लिए वर्चुअल डिवाइस सेट अप करने का तरीका अपनाएं. इसके बाद, जब आपको सिस्टम इमेज चुनने के लिए कहा जाए, तब डाउनलोड की गई 16 केबी वाली सिस्टम इमेज चुनें. अगर सिस्टम इमेज अपने-आप नहीं दिखती है, तो 16 केबी की सिस्टम इमेज को अन्य इमेज टैब में जाकर देखा जा सकता है.

    &#39;अन्य इमेज&#39; टैब में जाकर, 16 केबी वाली एम्युलेटर इमेज ढूंढें

एम्युलेटर लॉन्च करना

Android Emulator और वर्चुअल डिवाइसों को सेट अप करने के बाद, एम्युलेटर को टारगेट डिवाइस मेन्यू से या कमांड लाइन से लॉन्च करें.

डेवलपर के लिए सेटिंग और टूल का इस्तेमाल करके, किसी डिवाइस पर 16 केबी मोड चालू करना

डिवाइस को 16 केबी मोड में बूट करने के लिए, डेवलपर विकल्प में जाकर 16 केबी पेज साइज़ के साथ बूट करें को टॉगल करें.

Android 15 के QPR वर्शन में, डेवलपर विकल्प का इस्तेमाल किया जा सकता है. यह विकल्प, कुछ डिवाइसों पर उपलब्ध होता है. इससे डिवाइस को 16 केबी मोड में बूट किया जा सकता है और डिवाइस पर टेस्टिंग की जा सकती है. डेवलपर के लिए सेटिंग और टूल का इस्तेमाल करने से पहले, सेटिंग > सिस्टम > सॉफ़्टवेयर अपडेट पर जाएं और उपलब्ध अपडेट लागू करें.

यह डेवलपर विकल्प, इन डिवाइसों पर उपलब्ध है:

  • Pixel 8 और 8 Pro (Android 15 QPR1 या उसके बाद के वर्शन के साथ)

  • Pixel 8a (Android 15 QPR1 या इसके बाद के वर्शन के साथ)

  • Pixel 9, 9 Pro, और 9 Pro XL (Android 15 QPR2 या इसके बाद के वर्शन के साथ)

  • Pixel 9a (Android 16 या इसके बाद के वर्शन के साथ)

16 केबी बैककॉम्पैट मोड

पेज साइज़ कंपैटबिलिटी मोड में चेतावनी

पेज साइज़ कंपैटबिलिटी मोड में चेतावनी

16 केबी वाला बैककंपैट विकल्प तब उपलब्ध होता है, जब डिवाइस 16 केबी कर्नेल के साथ चल रहा हो. पैकेज मैनेजर, ऐप्लिकेशन को 16 केबी वाले बैककंपैट मोड में तब चलाता है, जब ये शर्तें पूरी होती हैं:

  • अगर ऐप्लिकेशन में 4 केबी के LOAD सेगमेंट अलाइनमेंट वाली ELF फ़ाइलें (.so एक्सटेंशन वाली) हैं.
  • अगर ज़िप किए गए APK में, बिना कंप्रेस की गई ऐसी ELF फ़ाइलें हैं जो 4 केबी ZIP अलाइन की गई हैं.

अगर पैकेज मैनेजर ने किसी ऐप्लिकेशन के लिए 16 केबी बैककंपैट मोड चालू किया है, तो ऐप्लिकेशन को पहली बार लॉन्च करने पर एक चेतावनी दिखती है. इसमें बताया जाता है कि ऐप्लिकेशन 16 केबी बैककंपैट मोड में चल रहा है.

16 केबी बैककॉम्पैट मोड की मदद से, कुछ ऐप्लिकेशन काम कर सकते हैं. हालांकि, बेहतर तरीके से काम करने और स्थिरता के लिए, ऐप्लिकेशन अब भी 16 केबी के हिसाब से होने चाहिए.

ऐप्लिकेशन की जानकारी वाले पेज पर, ऐडवांस में जाकर, ऐप्लिकेशन को पेज साइज़ कंपैटबिलिटी मोड में चलाएं सेटिंग को टॉगल करें. इससे किसी ऐप्लिकेशन के लिए, 16 केबी वाला बैककंपैट मोड चालू या बंद किया जा सकता है. यह सेटिंग सिर्फ़ तब दिखती है, जब डिवाइस 16 केबी वाले पेज साइज़ पर चल रहा हो.

पेज साइज़ कंपैटबिलिटी मोड की सेटिंग

पेज साइज़ कंपैटबिलिटी मोड की सेटिंग

डिवाइस पर मौजूद हर ऐप्लिकेशन के लिए, 16 केबी वाले पेज साइज़ के साथ काम करने की सुविधा को डिफ़ॉल्ट रूप से चालू करने के लिए:

adb shell setprop bionic.linker.16kb.app_compat.enabled true
adb shell setprop pm.16kb.app_compat.disabled false

डिवाइस पर मौजूद हर ऐप्लिकेशन के लिए, 16 केबी वाले पेजों के साथ काम करने की सुविधा को बंद करने के लिए:

adb shell setprop bionic.linker.16kb.app_compat.enabled false
adb shell setprop pm.16kb.app_compat.disabled true

Android 17 में, हर ऐप्लिकेशन के लिए 16 केबी बैककंपैट को बंद किया जा सकता है. साथ ही, किसी भी बाइनरी को तुरंत बंद किया जा सकता है जो इस सुविधा के साथ काम नहीं करती:

    adb shell setprop bionic.linker.16kb.app_compat.enabled fatal
    adb shell setprop pm.16kb.app_compat.disabled true

AndroidManifest.xml में किसी ऐप्लिकेशन के लिए, बैककॉम्पैट मोड को चालू या बंद करने के लिए, android:pageSizeCompat प्रॉपर्टी को चालू या बंद पर सेट करें. इस प्रॉपर्टी को सेट करने पर, ऐप्लिकेशन लॉन्च होने पर, बैककंपैट मोड की चेतावनियां नहीं दिखाएगा.

Google Play के साथ काम करने की ज़रूरी शर्तें

डिवाइस बनाने वाली कंपनियां, परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए डिवाइसों में ज़्यादा रैम लगाती हैं. इसलिए, कई कंपनियां 16 केबी जैसे बड़े पेज साइज़ को अपनाएंगी. आने वाले इन डिवाइसों को लॉन्च करने की तैयारी के लिए, Google Play एक नई ज़रूरी शर्त लागू कर रहा है: 1 नवंबर, 2025 से, Google Play पर सबमिट किए गए सभी नए ऐप्लिकेशन और मौजूदा ऐप्लिकेशन के अपडेट, 16 केबी वाले पेज साइज़ के साथ काम करने चाहिए. साथ ही, उन्हें Android 15 (एपीआई लेवल 35) और इसके बाद के वर्शन वाले डिवाइसों को टारगेट करना चाहिए.

इस बारे में ज़्यादा जानने के लिए, यह ब्लॉग पोस्ट देखें.