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 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 dùng Android Studio để mở APK và xác minh các lớp trong tệp DEX. Đảm bảo rằng classes.dex chính không được điền đầy đủ. Nếu ứng dụng của bạn chỉ có một tệp DEX, bạn có thể kiểm tra xem ứng dụng có chứa 2 tệp DEX hay không sau khi bật Hồ sơ khởi động.

Android Studio sẽ cảnh báo 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 khởi động trong các lớp khởi động, hãy đảm bảo rằng trình biên dịch R8 được cập nhật lên ít nhất phiên bản 8.3.21 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.21")
        }
    }
}

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

Đảm bảo bạn thêm --info sau assembleRelease trong lệnh sau 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 tham chiếu đến bất kỳ API nào đã khử đường, thì các bản triển khai khả năng tương thích được gói 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 đã khử đường 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 quá trình 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ó thể có dạng như app/build/outputs/bundle/release/app-release.aab.

    2. Kiểm tra kết quả đầu ra. Kết quả này 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 không bị làm rối.

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

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

    Kết quả đầu ra 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 các giá trị "checksum" (tổng kiểm tra) 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 đang can thiệp vào khả năng xuất tệp DEX của R8.