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 trong thời gian chạy và giảm thiểu mức sử dụng bộ nhớ.
Tệp DEX (hay Dalvik Executable) chứa mã đã biên dịch dùng để chạy ứng dụng của bạn. Tệp này thường bao gồm mã Java và Kotlin, thay vì mã C++ đã biên dịch hoặc tệp .so.
Đo lường việc tối ưu hoá mã R8 cục bộ
Để đo kích thước DEX chưa nén của gói ứng dụng cục bộ bằng dòng lệnh, hãy chạy:
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
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. Để biết định nghĩa chi tiết về tính năng rút gọn, tối ưu hoá và làm rối mã nguồn, hãy xem bài viết Sử dụ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.
Để kiểm tra siêu dữ liệu sau khi tối ưu hoá được nhúng trong gói ứng dụng (đối với AGP phiên bản 8.10 trở lên), hãy trích xuất tệp r8.json:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
Khắc phục vấn đề
Để giải quyết vấn đề đ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 phụ, 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 cho 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.