Potwierdź optymalizację profili uruchamiania

Aby sprawdzić, czy profile uruchamiania działają, możesz użyć Android Studio lub przejrzeć metadane kompilacji R8.

Potwierdzenie w Android Studio

Aby potwierdzić optymalizację układu DEX, otwórz plik APK w Android Studio i sprawdź klasy w plikach DEX. Upewnij się, że główny classes.dex nie jest całkowicie wypełniony. Jeśli Twoja aplikacja składa się z pojedynczego pliku DEX, możesz sprawdzić, czy zawiera on 2 pliki DEX po włączeniu profilu uruchamiania.

Android Studio wyświetla ostrzeżenie, jeśli klasy uruchamiania nie mieszczą się w pojedynczym pliku DEX. Aby uzyskać informacje diagnostyczne, które obejmują liczbę metod niebędących metodami uruchamiania w klasach uruchamiania, upewnij się, że kompilator R8 jest zaktualizowany co najmniej do wersji 8.3.36-dev. Aby to zrobić, wprowadź te zmiany w pliku settings.gradle, gdy stosujesz profil uruchamiania:

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"
        }
    }
}

Podczas kompilowania za pomocą Gradle pamiętaj, aby dodać --info po assembleRelease w następującym poleceniu.

./gradlew assembleRelease --info

Wyniki diagnostyki są następnie drukowane w terminalu.

Jeśli Twoja aplikacja lub jakiekolwiek biblioteki odwołują się do uproszczonych interfejsów API, zaimplementowane w pakiecie implementacje tych klas są zawsze zawarte w ostatnim pliku DEX. Ten ostatni desugarowany plik DEX nie bierze udziału w optymalizacji układu DEX.

Potwierdzenie za pomocą metadanych pakietu

Począwszy od wersji AGP 8.8, R8 wyprowadza metadane w pakiecie aplikacji na Androida (AAB), których możesz użyć do sprawdzenia, czy optymalizacja układu DEX się powiodła. Aby sprawdzić, czy optymalizacja się powiodła:

  1. Utwórz AAB aplikacji:

    ./gradlew app:bundleRelease
    
  2. Sprawdź, czy jest co najmniej 1 plik DEX zawierający tekst"startup": true.

    1. Otwórz metadane:

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

      Ścieżka do pliku AAB może wyglądać tak:app/build/outputs/bundle/release/app-release.aab.

    2. Sprawdź dane wyjściowe. Powinny wyglądać mniej więcej tak:

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

    Jeśli w metadanych widzisz tylko "startup": false, musisz włączyć profile uruchamiania i upewnić się, że profil uruchamiania nie jest zaciemniony.

  3. Sprawdź, czy wartości SHA-256 z metadanych są zgodne z wartościami z AAB. Aby uzyskać wartości SHA-256 dla wszystkich plików DEX, wykonaj te czynności:

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

    Dane wyjściowe powinny wyglądać mniej więcej tak:

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

    Porównaj wartości skrótu z wartościami „suma kontrolna” z kroku 1. Jeśli wartości SHA-256 nie pasują, może to oznaczać, że etap kompilacji uniemożliwia R8 generowanie plików DEX.