Tối ưu hoá mã DEX là một phát hiện của Android vitals giúp bạn theo dõi và cải thiện chất lượng, kích thước cũng như hiệu suất biên dịch 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 trình xử lý hậu kỳ DEX thứ cấp) sẽ 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 (hay Dalvik Executable) chứa mã đã biên dịch dùng để chạy ứng dụng của bạn. Các tệp này thường bao gồm mã Java và Kotlin, thay vì mã C++ đã biên dịch hoặc cá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ỉ áp dụng 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 khi mức tối ưu hoá mã DEX của ứng dụng thấp. Điều này bao gồm việc làm rối mã nguồn, rút gọn và tối ưu hoá cho các ứng dụng và trò chơi sử dụng R8. Đối với những ứng dụng không dùng R8, Android vitals sẽ cố gắng kiểm tra tốc độ tối ưu hoá, rút gọn và làm rối mã nguồn, nhưng sẽ quay lại phương pháp phỏng đoán làm rối mã nguồn làm proxy khi cần thiết.
Theo dõi trạng thái tối ưu hoá
Android vitals có thể giúp cải thiện hiệu suất của ứng dụng bằng cách thông báo cho bạn qua Play Console khi ứng dụng của bạn không đáp ứng tỷ lệ phần trăm tối thiểu được xác định cho việc tối ưu hoá mã. Để biết định nghĩa chi tiết về việc rút gọn, tối ưu hoá và làm rối mã nguồn, hãy xem phần Sử dụng Trình phân tích cấu hình R8.
Đối với các ứng dụng được tạo bằng bản vá mới nhất của AGP phiên bản 8.10 trở lên, các tỷ lệ phần trăm này được lấy từ tệp r8.json đi kèm.
Đối với các phiên bản AGP thấp hơn hoặc trường hợp không có tệp r8.json, các tỷ lệ phần trăm được tính từ tệp mapping.txt (nếu có) hoặc bằng cách sử dụng phương pháp phỏng đoán DEX nếu không có tệp ánh xạ.
Đối với những ứng dụng được tối ưu hoá bằng một trình tối ưu hoá mã thay thế, Android vitals sẽ phân tích để ước tính tỷ lệ phần trăm các lớp, phương thức và trường bị làm rối mã nguồn trong gói ứng dụng.
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 về tổng kích thước DEX:
- Ứng dụng: Gói chứa ít nhất 10 MB mã DEX được đo bằ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 bằng kích thước chưa nén
Android vitals hiển thị kích thước DEX của ứng dụng, nhưng bạn cũng có thể đo lường kích thước này cục bộ bằng dòng lệnh:
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
Đo lường hoạt động tối ưu hoá mã R8 cục bộ
Nếu ứng dụng của bạn tối ưu hoá bằng R8, bạn có thể đo lường mức độ tối ưu hoá, làm rối mã nguồn và rút gọn của gói ứng dụng bằng Trình phân tích cấu hình R8. Báo cáo Trình phân tích cấu hình R8 cũng có trong Kỹ năng phân tích R8. Mặc dù báo cáo này có thể giúp bạn hiểu cách các quy tắc giữ lại ảnh hưởng đến điểm tối ưu hoá, giảm kích thước và làm rối mã nguồn, nhưng tỷ lệ phần trăm trong báo cáo sẽ không khớp với các giá trị trong Android vitals, vì các tỷ lệ phần trăm này được tính trước khi tối ưu hoá.
Để kiểm tra chính xác siêu dữ liệu mà Android vitals dùng để tính điểm, hãy trích xuất tệp r8.json từ gói ứng dụng:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
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 và trình tối ưu hoá bản dựng của bạn:
Trình bổ trợ Android cho Gradle và R8
Để cải thiện điểm tối ưu hoá mã DEX R8, hãy xem hướng dẫn tại Cải thiện hoạt động tối ưu hoá R8. Bạn cũng có thể sử dụng Kỹ năng phân tích R8 để nhận thêm hướng dẫn về cách tối ưu hoá các quy tắc giữ lại của ứng dụng.
Hệ thống bản dựng không phải R8 và trình xử lý hậu kỳ DEX
Nếu quy trình tạo bản dựng của bạn sử dụng các công cụ tạo bản dựng tuỳ chỉnh hoặc các trình xử lý hậu kỳ DEX thứ cấp, hãy thực hiện 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ả các tệp
.dex. - Hãy chú ý đến những tệp có kích thước lớn nhất khi bạn bật/tắt nút "Deobfuscate names" (Làm rõ tên) (lưu ý: bạn phải tải tệp
mapping.txtlên). Nếu bạn thấy một số tệp trong số đó 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 các quy tắc giữ lại trên toàn gói. - Hãy xem trong tệp
proguard-rules.pro,configuration.txthoặc tệp tương đương của trình tối ưu hoá nếu bạn không sử dụng R8, rồi tìm các quy tắc giữ lại khớp với những 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 dex của bạn, 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 bạn có thể không dễ dàng xác định các quy tắc giữ lại của người dùng thư viện. Nếu nghi ngờ quy tắc người dùng thư viện đang ảnh hưởng đến quá trình tối ưu hoá, bạn có thể xác thực cục bộ bằng cách thêm quy tắc đó vào một ứng dụng mẫu độc lập bằng phiên bản AGP gần đây và kiểm tra quy tắc đó bằng Công cụ phân tích cấu hình R8.