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

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

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

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

अगर स्टार्टअप क्लास, एक ही DEX फ़ाइल में फ़िट नहीं होती हैं, तो Android Studio आपको चेतावनी देता है. गड़बड़ी की जानकारी पाने के लिए, यह पक्का करें कि R8 कंपाइलर को कम से कम 8.3.36-dev वर्शन पर अपडेट किया गया हो. इसके लिए, स्टार्टअप प्रोफ़ाइल लागू करते समय 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.6-dev")
        }
    }
}

Groovy

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 का इस्तेमाल करके बिल्ड करते समय, नीचे दिए गए निर्देश में assembleRelease के बाद --info जोड़ना न भूलें.

./gradlew assembleRelease --info

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

अगर आपका ऐप्लिकेशन या कोई लाइब्रेरी, सुगरलेस किए गए एपीआई का रेफ़रंस देती है, तो इन क्लास के बंडल किए गए, काम करने के तरीके हमेशा आखिरी 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 की वैल्यू से मेल खाती हैं या नहीं. अपनी सभी 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 फ़ाइलों को आउटपुट करने की सुविधा में रुकावट डाल रहा हो.