Tối ưu hoá mã DEX là một kết quả của Android vitals giúp bạn theo dõi và cải thiện chất lượng biên dịch, kích thước và hiệu suất của ứng dụng. Việc tối ưu hoá và làm rối mã nguồn bằng R8 hoặc các công cụ thay thế (chẳng hạn như trình tối ưu hoá tương thích với ProGuard hoặc bộ xử lý sau DEX phụ) giúp giảm kích thước DEX của ứng dụng, cải thiện hiệu suất thời gian chạy và giảm thiểu mức sử dụng bộ nhớ.
Các tệp DEX (hoặc Dalvik Executable) chứa mã đã biên dịch dùng để chạy ứng dụng. Mã này thường bao gồm mã Java và Kotlin, trái ngược với mã C++ đã biên dịch hoặc tệp .so.
Android vitals báo cáo các chỉ số tối ưu hoá mã DEX cho tất cả ứng dụng và trò chơi, nhưng chỉ thực thi các ngưỡng cho những ứng dụng và trò chơi đáp ứng các yêu cầu cụ thể về kích thước.
Phát hiện vấn đề
Android vitals có thể cảnh báo cho bạn trong Play Console khi mức độ tối ưu hoá, thu nhỏ hoặc làm rối mã DEX của ứng dụng không đáp ứng tỷ lệ phần trăm tối thiểu đã xác định.
Cách tính điểm tối ưu hoá
Đối với các ứng dụng được xây dựng bằng phiên bản vá mới nhất của AGP 8.10 trở lên (ví dụ:
8.10.1 thay vì 8.10.0), các tỷ lệ phần trăm này được lấy từ tệp
r8.json đi kèm. Hãy nhớ sử dụng phiên bản vá mới nhất của AGP và R8 cho phiên bản nhỏ của bạn để tạo siêu dữ liệu chính xác.
Đối với các ứng dụng được xây dựng bằng phiên bản AGP cũ hơn hoặc các ứng dụng được tối ưu hoá bằng một trình tối ưu hoá mã thay thế không có r8.json, Android vitals sẽ ước tính tỷ lệ phần trăm làm rối mã bằng cách sử dụng tệp mapping.txt (nếu có) hoặc phương pháp phỏng đoán DEX.
Tổng kích thước DEX tối thiểu
Mặc dù Android vitals tính toán các chỉ số tối ưu hoá mã cho tất cả ứng dụng, nhưng bạn sẽ chỉ nhận được cảnh báo nếu gói ứng dụng của bạn đáp ứng các yêu cầu sau đây về tổng kích thước DEX:
- Ứng dụng: Gói chứa ít nhất 10 MB mã DEX được đo lường dưới dạng kích thước chưa nén
- Trò chơi: Gói chứa ít nhất 50 MB mã DEX được đo lường dưới dạng kích thước chưa nén
Đo lường mức độ tối ưu hoá mã trên máy cục bộ
Để đo lường kích thước tệp DEX chưa nén của gói ứng dụng và nhận tỷ lệ phần trăm tối ưu hoá, thu nhỏ và làm rối mã nguồn khớp với kết quả trong Android vitals, hãy chạy android analyze:
android analyze <yourapp>.aab
Khắc phục vấn đề
Để giải quyết điểm tối ưu hoá mã DEX thấp, hãy xem xét các đề xuất dựa trên hệ thống xây dựng và trình tối ưu hoá của bạn:
R8
Để cải thiện điểm tối ưu hoá mã DEX R8, hãy xem hướng dẫn tại phần Cải thiện khả năng tối ưu hoá R8 và sử dụng Trình phân tích cấu hình R8 để tìm hiểu xem các quy tắc giữ lại ảnh hưởng như thế nào đến điểm tối ưu hoá, rút gọn và làm rối mã nguồn (để biết định nghĩa chi tiết về các chỉ số này, hãy xem phần Tìm hiểu báo cáo).
Nếu sử dụng Trình bổ trợ Android cho Gradle (AGP), bạn cũng có thể sử dụng kỹ năng Trình phân tích R8 để được hướng dẫn thêm về cách tối ưu hoá quy tắc giữ lại của ứng dụng. Nếu sử dụng Bazel, bạn cũng có quyền truy cập vào Trình phân tích cấu hình R8;
hãy xem tài liệu về tính năng tối ưu hoá R8 của rules_android.
Trình tối ưu hoá không phải R8 và bộ xử lý sau DEX
Nếu quy trình xây dựng của bạn sử dụng các công cụ xây dựng tuỳ chỉnh hoặc bộ xử lý sau DEX phụ, hãy làm theo các bước sau để cải thiện khả năng tối ưu hoá của ứng dụng:
- Mở gói ứng dụng trong Android Studio và xem gói đó trong Công cụ phân tích APK.
- Chọn tất cả
.dextệp. - Hãy chú ý đến các tệp có kích thước lớn nhất khi bạn bật/tắt nút "Deobfuscate names" (Khử rối tên) (lưu ý: bạn cần tải tệp
mapping.txt). Nếu bạn thấy một số tệp vẫn có kích thước lớn trong khi bị làm rối mã nguồn, thì có thể các tệp đó chịu ảnh hưởng của quy tắc giữ lại trên toàn bộ gói. - Hãy xem trong tệp
proguard-rules.pro,configuration.txthoặc tệp tương đương cho trình tối ưu hoá nếu bạn không sử dụng R8, đồng thời tìm các quy tắc giữ lại khớp với các gói không bị làm rối mã nguồn. Ví dụ: nếucom.foo.là một gói lớn trong tệp DEX, hãy tìm các quy tắc giữ lại có định dạng-keep com.foo.**hoặc-keep com.foo.bar.**. - Xin lưu ý rằng các quy tắc giữ lại của bên sử dụng thư viện có thể không dễ xác định. Nếu nghi ngờ một quy tắc người dùng thư viện đang ảnh hưởng đến việc tối ưu hoá,
bạn có thể kiểm tra trực tiếp thư viện bằng
android analyze <library>.aarhoặc xác thực thư viện bằng cách thêm thư viện vào một ứng dụng mẫu độc lập sử dụng phiên bản AGP gần đây và kiểm tra thư viện bằng Trình phân tích cấu hình R8.