起動プロファイルが機能しているかどうかは、Android Studio を使用するか、R8 ビルドのメタデータを確認することで確認できます。
Android Studio で確認する
DEX レイアウトの最適化を確認するには、Android Studio を使用して APK を開き、DEX ファイル内のクラスを確認します。プライマリ classes.dex
が完全には埋められていないことを確認します。アプリが 1 つの DEX ファイルで構成されている場合は、起動プロファイルを有効にした後に、アプリに 2 つの DEX ファイルが含まれているかどうかを確認できます。
起動クラスが 1 つの DEX ファイルに収まらない場合は、Android Studio から警告が表示されます。起動クラス内の起動以外のメソッドの数を含む診断情報を取得するには、起動プロファイルを適用するときに settings.gradle
ファイルに次の変更を加えて、R8 コンパイラが少なくともバージョン 8.3.36-dev に更新されていることを確認します。
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
診断結果がターミナルに出力されます。
アプリまたはライブラリがデシュガー化された API を参照している場合、これらのクラスのバンドルされた互換性実装は常に最後の DEX ファイルに含まれます。この脱糖された最後の DEX ファイルは、DEX レイアウトの最適化には参加しません。
バンドル メタデータで確認する
AGP 8.8 以降では、R8 は Android App Bundle(AAB)にメタデータを出力します。このメタデータを使用して、DEX レイアウトの最適化が成功したかどうかを確認できます。最適化が機能したかどうかを確認する手順は次のとおりです。
アプリの AAB をビルドします。
./gradlew app:bundleRelease
テキスト
"startup": true
を含む DEX ファイルが 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
のようになります。出力を確認します。出力は次のようになります。
inflating: r8.json [ { "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951", "startup": true } ]
メタデータに
"startup": false
のみが表示される場合は、起動プロファイルを有効にして、起動プロファイルが難読化されていないことを確認する必要があります。メタデータの 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
ハッシュ値をステップ 1 の「チェックサム」値と比較します。SHA-256 値が一致しない場合は、R8 が DEX ファイルを出力する能力を妨げているコンパイル ステップがある可能性があります。