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:
Utwórz AAB aplikacji:
./gradlew app:bundleRelease
Sprawdź, czy jest co najmniej 1 plik DEX zawierający tekst
"startup": true
.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
.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.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.