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:
Tạo AAB của ứng dụng:
./gradlew app:bundleRelease
Kiểm tra để đảm bảo có ít nhất một tệp DEX chứa văn bản
"startup": true
.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
.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.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.