起動プロファイルの最適化を確認する

起動プロファイルが機能しているかどうかは、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 レイアウトの最適化が成功したかどうかを確認できます。最適化が機能したかどうかを確認する手順は次のとおりです。

  1. アプリの AAB をビルドします。

    ./gradlew app:bundleRelease
    
  2. テキスト "startup": true を含む DEX ファイルが 1 つ以上あることを確認します。

    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
    

    ハッシュ値をステップ 1 の「チェックサム」値と比較します。SHA-256 値が一致しない場合は、R8 が DEX ファイルを出力する能力を妨げているコンパイル ステップがある可能性があります。