Để mang lại trải nghiệm tốt nhất cho người dùng, bạn nên tối ưu hoá ứng dụng để ứng dụng có kích thước nhỏ và chạy nhanh nhất có thể. Trình tối ưu hoá ứng dụng của chúng tôi (gọi là R8) sẽ tinh giản ứng dụng của bạn bằng cách xoá mã và tài nguyên không dùng đến, viết lại mã để tối ưu hoá hiệu suất thời gian chạy, v.v. Đối với người dùng, điều này có nghĩa là:
- Thời gian khởi động nhanh hơn
- Cải thiện hiệu suất kết xuất và thời gian chạy
- Ít lỗi ANR hơn
Để bật tính năng tối ưu hoá ứng dụng, hãy đặt isMinifyEnabled = true (để tối ưu hoá mã) và isShrinkResources = true (để tối ưu hoá tài nguyên) trong tập lệnh bản dựng cấp ứng dụng của bản phát hành như minh hoạ trong mã sau. Bạn nên luôn bật cả hai chế độ cài đặt này. Bạn cũng nên chỉ bật tính năng tối ưu hoá ứng dụng trong phiên bản cuối cùng của ứng dụng mà bạn kiểm thử trước khi xuất bản (thường là bản phát hành), vì các hoạt động tối ưu hoá sẽ làm tăng thời gian tạo của dự án và có thể khiến việc gỡ lỗi trở nên khó khăn hơn do cách tính năng này sửa đổi mã.
Kotlin
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Groovy
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
Tối ưu hoá việc rút gọn tài nguyên để có các ứng dụng nhỏ hơn nữa
Phiên bản 8.12.0 của Trình bổ trợ Android cho Gradle (AGP) giới thiệu tính năng rút gọn tài nguyên được tối ưu hoá, nhằm mục đích tích hợp tính năng tối ưu hoá tài nguyên và mã để tạo ra các ứng dụng nhỏ hơn và nhanh hơn.
Bật tính năng rút gọn tài nguyên được tối ưu hoá
Để bật quy trình rút gọn tài nguyên được tối ưu hoá mới cho phiên bản AGP trước 9.0.0, hãy thêm nội dung sau vào tệp gradle.properties của dự án:
android.r8.optimizedResourceShrinking=true
Nếu đang sử dụng AGP 9.0.0 trở lên, bạn không cần đặt android.r8.optimizedResourceShrinking=true. Tính năng giảm kích thước tài nguyên được tối ưu hoá sẽ tự động áp dụng khi bạn bật isShrinkResources = true trong cấu hình bản dựng.
Xác minh và định cấu hình chế độ cài đặt tối ưu hoá R8
Để cho phép R8 sử dụng khả năng tối ưu hoá đầy đủ, hãy xoá dòng sau đây khỏi tệp gradle.properties của dự án (nếu có):
android.enableR8.fullMode=false # Remove this line from your codebase.
Xin lưu ý rằng việc bật tính năng tối ưu hoá ứng dụng sẽ khiến bạn khó hiểu dấu vết ngăn xếp, đặc biệt là nếu R8 đổi tên lớp hoặc tên phương thức. Để nhận được dấu vết ngăn xếp tương ứng chính xác với mã nguồn của bạn, hãy xem phần Khôi phục dấu vết ngăn xếp ban đầu.
Nếu bật R8, bạn cũng nên tạo Hồ sơ khởi động để có hiệu suất khởi động tốt hơn nữa.
Nếu bạn bật tính năng tối ưu hoá ứng dụng và tính năng này gây ra lỗi, thì sau đây là một số chiến lược để khắc phục lỗi:
- Thêm các quy tắc lưu giữ để giữ nguyên một số mã.
- Áp dụng các điểm tối ưu hoá theo từng bước.
- Cập nhật mã của bạn để sử dụng các thư viện phù hợp hơn cho việc tối ưu hoá.
Nếu bạn quan tâm đến việc tối ưu hoá tốc độ bản dựng, hãy xem phần Định cấu hình cách R8 chạy để biết thông tin về cách định cấu hình R8 dựa trên môi trường của bạn.
Các thay đổi về hành vi của phiên bản AGP và R8
Bảng sau đây trình bày các tính năng chính được ra mắt trong nhiều phiên bản của Trình bổ trợ Android cho Gradle (AGP) và trình biên dịch R8.
| Phiên bản AGP | Các tính năng được giới thiệu |
|---|---|
| 9.0 |
Tối ưu hoá việc rút gọn tài nguyên: Bật theo mặc định (được kiểm soát bằng android.r8.optimizedResourceShrinking). Tối ưu hoá việc rút gọn tài nguyên giúp tích hợp tính năng rút gọn tài nguyên với quy trình tối ưu hoá mã, dẫn đến các ứng dụng nhỏ hơn và nhanh hơn. Bằng cách tối ưu hoá đồng thời cả mã và các tham chiếu tài nguyên, tính năng này sẽ xác định và xoá các tài nguyên chỉ được tham chiếu từ mã không sử dụng. Đây là một điểm cải tiến đáng kể so với các quy trình tối ưu hoá riêng biệt trước đây.Điều này đặc biệt hữu ích đối với những ứng dụng chia sẻ nhiều tài nguyên và mã trên các phương dọc có kiểu dáng khác nhau, với mức cải thiện đo được là hơn 50% về kích thước ứng dụng. Việc giảm kích thước này giúp giảm kích thước tải xuống, tăng tốc độ cài đặt và mang lại trải nghiệm người dùng tốt hơn với tốc độ khởi động nhanh hơn, khả năng kết xuất được cải thiện và ít lỗi ANR hơn. Lọc quy tắc thư viện: Chúng tôi đã loại bỏ việc hỗ trợ các lựa chọn chung (ví dụ: -dontobfuscate) trong các quy tắc dành cho bên sử dụng thư viện và các ứng dụng sẽ lọc bỏ những lựa chọn này. Để biết thêm thông tin, hãy xem phần Thêm các lựa chọn chung.Kotlin kiểm tra giá trị rỗng: Được tối ưu hoá theo mặc định (được kiểm soát bằng -processkotlinnullchecks). Phiên bản này cũng có những cải tiến đáng kể về tốc độ xây dựng. Để biết thêm thông tin, hãy xem phần Các lựa chọn chung cho hoạt động tối ưu hoá bổ sung.Tối ưu hoá các gói cụ thể: Bạn có thể dùng packageScope để tối ưu hoá các gói cụ thể. Tính năng này đang trong giai đoạn hỗ trợ thử nghiệm. Để biết thêm thông tin, hãy xem phần Tối ưu hoá các gói được chỉ định bằng packageScope.Được tối ưu hoá theo mặc định: Chúng tôi đã ngừng hỗ trợ getDefaultProguardFile("proguard-android.txt") vì có chứa -dontoptimize. Bạn nên tránh sử dụng -dontoptimize. Thay vào đó, hãy sử dụng "proguard-android-optimize.txt". Nếu cần vô hiệu hoá hoạt động tối ưu hoá trên toàn cầu trong ứng dụng, hãy thêm cờ theo cách thủ công vào tệp proguard.
|
| 8.12 |
Giảm kích thước tài nguyên: Đã thêm chế độ hỗ trợ ban đầu (Tắt theo mặc định. Cho phép sử dụng isShrinkResources). Tính năng rút gọn tài nguyên hoạt động song song với R8 để xác định và loại bỏ hiệu quả các tài nguyên không dùng đến.Theo dõi ngược Logcat: Hỗ trợ tính năng theo dõi ngược tự động trong cửa sổ Logcat của Android Studio. |
| 8.6 |
Cải thiện việc theo dõi ngược: Theo mặc định, bao gồm việc theo dõi ngược tên tệp và số dòng cho tất cả các cấp minSdk (trước đây yêu cầu minSdk 26 trở lên trong phiên bản 8.2).Việc cập nhật R8 giúp đảm bảo rằng dấu vết ngăn xếp từ các bản dựng đã làm rối mã nguồn có thể đọc được một cách dễ dàng và rõ ràng. Phiên bản này cải thiện cách ánh xạ số dòng và tệp nguồn, giúp các công cụ như Logcat của Android Studio dễ dàng tự động truy vết các sự cố về mã nguồn ban đầu. |
| 8.0 |
Chế độ đầy đủ theo mặc định: Chế độ đầy đủ của R8 mang đến khả năng tối ưu hoá mạnh mẽ hơn đáng kể. Tính năng này được bật theo mặc định. Bạn có thể chọn không sử dụng tính năng này bằng cách dùng android.enableR8.fullMode=false.
|
| 7.0 |
Có chế độ đầy đủ: Ra mắt dưới dạng một tính năng chọn sử dụng bằng cách dùng android.enableR8.fullMode=true. Chế độ đầy đủ áp dụng các hoạt động tối ưu hoá mạnh mẽ hơn bằng cách đưa ra các giả định nghiêm ngặt hơn về cách mã của bạn sử dụng tính năng phản chiếu và các tính năng động khác. Mặc dù giảm kích thước ứng dụng và cải thiện hiệu suất, nhưng có thể bạn cần thêm các quy tắc giữ lại để ngăn mã cần thiết bị loại bỏ.
|