Xác nhận tối ưu hoá Hồ sơ khởi động

Bạn có thể kiểm tra xem Hồ sơ khởi động có hoạt động hay không bằng cách sử dụng Android Studio hoặc xem siêu dữ liệu bản dựng R8.

Xác nhận bằng Android Studio

Để xác nhận tính năng tối ưu hoá bố cục DEX, hãy sử dụng Android Studio để mở APK và xác minh các lớp trong tệp DEX. Đảm bảo classes.dex chính không được điền đầy. Nếu ứng dụng của bạn bao gồm một tệp DEX duy nhất, bạn có thể kiểm tra xem ứng dụng có chứa hai tệp DEX hay không sau khi bật Hồ sơ khởi động.

Android Studio sẽ cảnh báo bạn nếu các lớp khởi động không vừa với một tệp DEX. Để nhận thông tin chẩn đoán bao gồm số lượng phương thức không phải khởi động trong các lớp khởi động, hãy đảm bảo trình biên dịch R8 được cập nhật lên ít nhất là phiên bản 8.3.36-dev bằng cách thực hiện các thay đổi sau đối với tệp settings.gradle khi bạn áp dụng Hồ sơ khởi động:

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

Hãy nhớ thêm --info sau assembleRelease trong lệnh sau đây khi tạo bản dựng bằng Gradle.

./gradlew assembleRelease --info

Sau đó, thông tin chẩn đoán sẽ được in ra thiết bị đầu cuối.

Nếu ứng dụng hoặc bất kỳ thư viện nào của bạn tham chiếu đến bất kỳ API đơn giản hoá nào, thì các phương thức triển khai khả năng tương thích đi kèm của các lớp này luôn có trong tệp DEX cuối cùng. Tệp DEX cuối cùng đã đơn giản hoá này không tham gia vào quá trình tối ưu hoá bố cục DEX.

Xác nhận bằng siêu dữ liệu gói

Kể từ AGP 8.8, R8 sẽ xuất siêu dữ liệu trong Android App Bundle (AAB) mà bạn có thể dùng để kiểm tra xem quá trình tối ưu hoá bố cục DEX có thành công hay không. Để kiểm tra xem tính năng tối ưu hoá có hoạt động hay không, hãy làm như sau:

  1. Tạo AAB của ứng dụng:

    ./gradlew app:bundleRelease
    
  2. Kiểm tra để đảm bảo có ít nhất một tệp DEX chứa văn bản "startup": true.

    1. Mở siêu dữ liệu:

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

      Đường dẫn đến AAB của bạn có thể có dạng như app/build/outputs/bundle/release/app-release.aab.

    2. Hãy kiểm tra kết quả, kết quả sẽ có dạng như sau:

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

    Nếu chỉ thấy "startup": false trong siêu dữ liệu, bạn cần bật hồ sơ khởi động và đảm bảo rằng hồ sơ khởi động của bạn không bị làm rối mã nguồn.

  3. Kiểm tra để đảm bảo rằng các giá trị SHA-256 trong siêu dữ liệu khớp với các giá trị trong AAB. Để lấy giá trị SHA-256 cho tất cả tệp DEX, hãy chạy các lệnh sau:

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

    Kết quả sẽ có dạng như sau:

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

    So sánh các giá trị băm với giá trị "checksum" (tổng kiểm) từ bước 1. Nếu các giá trị SHA-256 không khớp, thì có thể có một bước biên dịch sẽ can thiệp vào khả năng của R8 để xuất tệp DEX.