स्टार्टअप प्रोफ़ाइल ऑप्टिमाइज़ेशन की पुष्टि करें

Android Studio का इस्तेमाल करके या R8 बिल्ड मेटाडेटा देखकर, यह पता लगाया जा सकता है कि आपकी स्टार्टअप प्रोफ़ाइलें काम कर रही हैं या नहीं.

Android Studio से पुष्टि करना

DEX लेआउट ऑप्टिमाइज़ेशन की पुष्टि करने के लिए, Android Studio का इस्तेमाल करके APK खोलें. इसके बाद, DEX फ़ाइलों में मौजूद क्लास की पुष्टि करें. पक्का करें कि प्राइमरी classes.dex पूरी तरह से न भरा हो. अगर आपके ऐप्लिकेशन में एक ही DEX फ़ाइल है, तो स्टार्टअप प्रोफ़ाइल चालू करने के बाद यह देखा जा सकता है कि ऐप्लिकेशन में दो DEX फ़ाइलें हैं या नहीं.

अगर स्टार्टअप क्लास, एक DEX फ़ाइल में फ़िट नहीं होती हैं, तो Android Studio आपको इसकी सूचना देता है. स्टार्टअप क्लास में स्टार्टअप के अलावा अन्य तरीकों की संख्या के बारे में डाइग्नोस्टिक जानकारी पाने के लिए, पक्का करें कि R8 कंपाइलर कम से कम 8.3.21 वर्शन पर अपडेट हो. इसके लिए, स्टार्टअप प्रोफ़ाइल लागू करते समय settings.gradle फ़ाइल में ये बदलाव करें:

Kotlin

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.21")
        }
    }
}

शानदार

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

Gradle का इस्तेमाल करके ऐप्लिकेशन बनाते समय, पक्का करें कि आपने नीचे दिए गए कमांड में --info के बाद assembleRelease जोड़ा हो.

./gradlew assembleRelease --info

इसके बाद, गड़बड़ी की जानकारी को टर्मिनल पर प्रिंट किया जाता है.

अगर आपका ऐप्लिकेशन या कोई लाइब्रेरी, किसी desugared APIs को रेफ़रंस करती है, तो इन क्लास के बंडल किए गए कंपैटिबिलिटी इंप्लीमेंटेशन हमेशा आखिरी DEX फ़ाइल में शामिल होते हैं. यह डिसुगर की गई आखिरी DEX फ़ाइल, DEX लेआउट ऑप्टिमाइज़ेशन में हिस्सा नहीं लेती.

बंडल के मेटाडेटा की मदद से पुष्टि करना

AGP 8.8 या इसके बाद के वर्शन में, R8 आपके Android ऐप्लिकेशन बंडल (AAB) में मेटाडेटा आउटपुट करता है. इसका इस्तेमाल करके, यह देखा जा सकता है कि DEX लेआउट ऑप्टिमाइज़ेशन सही तरीके से हुआ है या नहीं. यह देखने के लिए कि ऑप्टिमाइज़ेशन काम कर रहा है या नहीं, यह तरीका अपनाएं:

  1. अपने ऐप्लिकेशन का AAB बनाएं:

    ./gradlew app:bundleRelease
    
  2. देखें कि कम से कम एक ऐसी DEX फ़ाइल मौजूद हो जिसमें "startup": true टेक्स्ट शामिल हो.

    1. मेटाडेटा खोलें:

      unzip -j -o path-to-aab BUNDLE-METADATA/com.android.tools/r8.json && jq .dexFiles r8.json
      

      आपके AAB का पाथ कुछ ऐसा हो सकता है app/build/outputs/bundle/release/app-release.aab.

    2. आउटपुट देखें. यह कुछ ऐसा दिखना चाहिए:

          inflating: r8.json
      [
        {
          "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951",
          "startup": true
        }
      ]
      

    अगर आपको मेटाडेटा में सिर्फ़ "startup": false दिखता है, तो आपको स्टार्टअप प्रोफ़ाइलें चालू करनी होंगी. साथ ही, यह पक्का करना होगा कि आपकी स्टार्टअप प्रोफ़ाइल धुंधली न हो.

  3. देखें कि मेटाडेटा में मौजूद SHA-256 वैल्यू, AAB में मौजूद SHA-256 वैल्यू से मेल खाती हों. अपनी सभी DEX फ़ाइलों के लिए SHA-256 वैल्यू पाने के लिए, यह कमांड चलाएं:

    unzip -o path-to-aab */dex/*.dex && sha256sum */dex/*
    

    आउटपुट कुछ ऐसा दिखना चाहिए:

    Archive: app/build/outputs/bundle/release/myapp-release.aab
      inflating: base/dex/classes.dex
    f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951  base/dex/classes.dex
    

    हैश वैल्यू की तुलना, पहले चरण में दी गई "चेकसाम" वैल्यू से करें. अगर SHA-256 वैल्यू मेल नहीं खाती हैं, तो हो सकता है कि कंपाइलेशन का कोई चरण, R8 को DEX फ़ाइलें आउटपुट करने से रोक रहा हो.