Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
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:
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.
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:
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.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Confirm Startup Profiles optimization\n\nYou can check that your Startup Profiles are working using either Android Studio\nor looking at the R8 build metadata.\n\nConfirm with Android Studio\n---------------------------\n\nTo confirm DEX layout optimization, use Android Studio to open the APK and\nverify the classes in the DEX files. Make sure the primary `classes.dex` isn't\ncompletely filled. If your app consists of a single DEX file, you can check\nwhether the app contains two DEX files after enabling the Startup Profile.\n\nAndroid Studio warns you if the startup classes don't fit in a single DEX file.\nTo get diagnostic information that includes the amount of non-startup methods in\nthe startup classes, make sure the R8 compiler is updated to at least version\n8.3.36-dev by making the following changes to the `settings.gradle` file when\nyou apply the Startup Profile: \n\n### Kotlin\n\n```kotlin\npluginManagement {\n buildscript {\n repositories {\n mavenCentral()\n maven {\n url = uri(\"https://storage.googleapis.com/r8-releases/raw\")\n }\n }\n dependencies {\n classpath(\"com.android.tools:r8:8.3.6-dev\")\n }\n }\n}\n```\n\n### Groovy\n\n```groovy\npluginManagement {\n buildscript {\n repositories {\n mavenCentral()\n maven {\n url uri('https://storage.googleapis.com/r8-releases/raw')\n }\n }\n dependencies {\n classpath 'com.android.tools:r8:8.3.6-dev\"\n }\n }\n}\n```\n\nMake sure you add `--info` after\n`assembleRelease` in the following command when building with Gradle. \n\n ./gradlew assembleRelease --info\n\nThe diagnostic is then printed to the terminal.\n\nIf your app or any libraries reference any [desugared APIs](/studio/write/java8-support#library-desugaring), the bundled\ncompatibility implementations of these classes are always contained in the last\nDEX file. This desugared last DEX file doesn't participate in DEX layout\noptimizations.\n\nConfirm with bundle metadata\n----------------------------\n\n| **Note:** This workflow has only been tested on Linux.\n\nStarting with AGP 8.8, R8 outputs metadata in your Android App Bundle (AAB) that\nyou can use to check if the DEX layout optimization was successful. To check if\nthe optimization worked, do the following:\n\n1. Build your app's AAB:\n\n ./gradlew app:bundleRelease\n\n2. Check that there's at least one DEX file that contains the text\n `\"startup\": true`.\n\n 1. Open the metadata:\n\n unzip -j -o \u003cvar translate=\"no\"\u003epath-to-aab\u003c/var\u003e BUNDLE-METADATA/com.android.tools/r8.json && jq .dexFiles r8.json\n\n The path to your AAB might be something like\n `app/build/outputs/bundle/release/app-release.aab`.\n 2. Check the output, which should look something like this:\n\n inflating: r8.json\n [\n {\n \"checksum\": \"f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951\",\n \"startup\": true\n }\n ]\n\n If you only see `\"startup\": false` in the metadata, you need to\n [enable startup profiles](/topic/performance/baselineprofiles/dex-layout-optimizations#create-startup) and ensure that your startup\n profile isn't obfuscated.\n3. Check that the SHA-256 values from the metadata match those from the AAB. To\n get the SHA-256 values for all your DEX files run the following:\n\n unzip -o \u003cvar translate=\"no\"\u003epath-to-aab\u003c/var\u003e */dex/*.dex && sha256sum */dex/*\n\n The output should look something like this: \n\n Archive: app/build/outputs/bundle/release/myapp-release.aab\n inflating: base/dex/classes.dex\n f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951 base/dex/classes.dex\n\n Compare the hash values to the \"checksum\" values from step 1. If the SHA-256\n values don't match, there might be a compilation step interfering with R8's\n ability to output DEX files."]]