Sự kiện và chương trình
Sử dụng R8 để rút gọn, tối ưu hoá và tăng tốc ứng dụng của bạn
Đọc trong 5 phút
Sử dụng R8 để rút gọn, tối ưu hoá và tăng tốc ứng dụng
Chào mừng bạn đến với ngày đầu tiên của Tuần lễ Tiêu điểm hiệu suất trên Android!
Chúng ta sẽ bắt đầu với thay đổi có tác động lớn nhất và ít tốn công sức nhất mà bạn có thể thực hiện để cải thiện hiệu suất của ứng dụng: bật trình tối ưu hoá R8 ở chế độ đầy đủ.
Có lẽ bạn đã biết R8 là một công cụ giúp giảm kích thước ứng dụng. Tính năng này giúp loại bỏ mã và tài nguyên không dùng đến một cách hiệu quả, từ đó giảm kích thước ứng dụng của bạn. Nhưng sức mạnh thực sự của nó, sức mạnh mà nó thực sự g-R8, là một trình tối ưu hoá.
Khi bạn bật chế độ đầy đủ và cho phép tối ưu hoá, R8 sẽ thực hiện các hoạt động tối ưu hoá sâu, toàn bộ chương trình, viết lại mã của bạn để có hiệu quả hơn về cơ bản. Đây không chỉ là một thay đổi nhỏ.
Sau khi đọc bài viết này, hãy xem phần giới thiệu về Tuần lễ hiệu suất nổi bật để tìm hiểu về trình tối ưu hoá R8 trên YouTube.
Cách R8 giúp ứng dụng của bạn hoạt động hiệu quả hơn
Hãy cùng xem xét kỹ lưỡng những bước quan trọng nhất mà trình tối ưu hoá R8 thực hiện để cải thiện hiệu suất của ứng dụng.
Loại bỏ mã không dùng đến là bước quan trọng nhất để giảm kích thước ứng dụng. Trong giai đoạn này, trình tối ưu hoá R8 sẽ xoá mã không dùng đến khỏi các thư viện mà ứng dụng của bạn phụ thuộc vào, cũng như mã không dùng đến khỏi cơ sở mã của riêng bạn.
Nội tuyến phương thức thay thế một lệnh gọi phương thức bằng mã thực tế, giúp cải thiện hiệu suất thời gian chạy.
Hợp nhất lớp và các chiến lược khác được áp dụng để làm cho mã nhỏ gọn hơn. Tất cả các lớp trừu tượng đẹp mắt của bạn, chẳng hạn như giao diện và hệ thống phân cấp lớp, đều không quan trọng ở thời điểm này và có khả năng sẽ bị xoá.
Giảm thiểu mã được dùng để thay đổi tên của các lớp, trường và phương thức thành tên ngắn hơn và vô nghĩa. Vì vậy, thay vì MyDataModel, bạn có thể kết thúc bằng một lớp có tên là a. Đây là nguyên nhân gây ra nhiều nhầm lẫn nhất khi đọc dấu vết ngăn xếp từ một ứng dụng được R8 tối ưu hoá. (Xin lưu ý rằng chúng tôi đã cải thiện vấn đề này trong AGP 9.0!)
Rút gọn tài nguyên giúp giảm thêm kích thước của ứng dụng bằng cách xoá các tài nguyên không dùng đến, chẳng hạn như tệp xml và các thành phần có thể vẽ.
Bằng cách áp dụng các bước này, trình tối ưu hoá R8 sẽ cải thiện thời gian khởi động ứng dụng, cho phép kết xuất giao diện người dùng mượt mà hơn, với ít khung hình bị chậm và bị treo hơn, đồng thời cải thiện mức sử dụng tài nguyên tổng thể trên thiết bị.
Nghiên cứu điển hình: Reddit cải thiện hiệu suất nhờ R8
Để minh hoạ một ví dụ về những điểm cải thiện hiệu suất mà R8 có thể mang lại, hãy xem một ví dụ trên Reddit. Sau khi bật R8 ở chế độ đầy đủ, ứng dụng Reddit cho Android đã ghi nhận những điểm cải thiện đáng kể về hiệu suất ở nhiều khía cạnh.
Chú thích: Cách R8 cải thiện hiệu suất ứng dụng của Reddit
Nhóm này nhận thấy thời gian khởi động nguội nhanh hơn 40% , giảm 30% lỗi "Ứng dụng không phản hồi" (ANR), cải thiện 25% khả năng kết xuất khung hình và giảm 14% kích thước ứng dụng.
Những điểm cải tiến này đóng vai trò quan trọng trong việc mang lại sự hài lòng cho người dùng. Khởi động nhanh hơn có nghĩa là bạn sẽ tốn ít thời gian chờ đợi hơn và truy cập vào nội dung nhanh hơn. Ít lỗi ANR hơn sẽ giúp ứng dụng ổn định và đáng tin cậy hơn, giảm sự khó chịu cho người dùng. Việc kết xuất khung hình mượt mà hơn sẽ loại bỏ hiện tượng giật giao diện người dùng, giúp thao tác cuộn và ảnh động trở nên mượt mà và phản hồi nhanh. Tác động tích cực về mặt kỹ thuật này cũng thể hiện rõ ràng trong cảm xúc của người dùng.
Bạn có thể đọc thêm về những điểm cải tiến này trên blog của chúng tôi.
Tác dụng phụ không liên quan đến kỹ thuật khi sử dụng R8
Trong quá trình hợp tác với các đối tác, chúng tôi nhận thấy những cải tiến về kỹ thuật này có tác động trực tiếp đến mức độ hài lòng của người dùng và có thể được phản ánh trong tỷ lệ giữ chân người dùng, mức độ gắn bó và thời lượng phiên của người dùng. Sự gắn bó của người dùng (có thể đo lường bằng số người dùng hoạt động hằng ngày, hằng tuần hoặc hằng tháng) cũng được cải thiện nhờ những thay đổi về hiệu suất kỹ thuật. Chúng tôi nhận thấy điểm xếp hạng ứng dụng trên Cửa hàng Play tăng lên khi có nhiều người sử dụng R8. Việc chia sẻ thông tin này với chủ sở hữu sản phẩm, Giám đốc công nghệ và những người đưa ra quyết định có thể giúp tăng tốc hiệu suất của ứng dụng.
Vì vậy, hãy gọi nó bằng tên chính xác: Tối ưu hoá hiệu suất có chủ đích là một đức tính.
Hướng dẫn bạn tạo một ứng dụng hoạt động hiệu quả hơn
Chúng tôi nhận thấy hướng dẫn dành cho nhà phát triển của chúng tôi về R8 cần được cải thiện. Vì vậy, chúng tôi bắt tay vào việc. Hướng dẫn dành cho nhà phát triển về trình tối ưu hoá R8 hiện có nhiều thông tin hữu ích hơn và cung cấp hướng dẫn toàn diện để bật và gỡ lỗi R8.
Tài liệu này hướng dẫn bạn về chiến lược cấp cao để áp dụng, nhấn mạnh tầm quan trọng của việc chọn các thư viện thân thiện với việc tối ưu hoá và quan trọng nhất là áp dụng các tính năng của R8 theo từng bước để đảm bảo tính ổn định. Phương pháp theo giai đoạn này giúp bạn khai thác an toàn các lợi ích của R8, đồng thời cung cấp cho bạn hướng dẫn về những vấn đề khó gỡ lỗi.
Chúng tôi đã mở rộng đáng kể hướng dẫn về Quy tắc giữ lại. Đây là cơ chế chính để kiểm soát trình tối ưu hoá R8. Giờ đây, chúng tôi cung cấp một phần về Keep Rules, cách áp dụng và hướng dẫn bạn các phương pháp hay nhất để viết và duy trì các quy tắc này. Chúng tôi cũng cung cấp các trường hợp sử dụng và ví dụ thực tế, hữu ích, giúp bạn hiểu cách ngăn R8 xoá mã cần thiết trong thời gian chạy một cách chính xác, chẳng hạn như mã được truy cập thông qua tính năng phản chiếu hoặc sử dụng giao diện gốc JNI.
Giờ đây, tài liệu này cũng đề cập đến các bước cần thiết tiếp theo và các trường hợp nâng cao. Chúng tôi đã thêm một phần về kiểm thử và khắc phục sự cố để bạn có thể xác minh mức tăng hiệu suất và gỡ lỗi mọi vấn đề tiềm ẩn phát sinh. Phần cấu hình nâng cao giải thích cách nhắm đến các biến thể bản dựng cụ thể, tuỳ chỉnh những tài nguyên được giữ lại hoặc xoá, đồng thời đưa ra hướng dẫn tối ưu hoá đặc biệt cho tác giả thư viện, đảm bảo bạn có thể cung cấp một gói được tối ưu hoá và thân thiện với R8 để các nhà phát triển khác sử dụng.
Tận dụng tối đa tiềm năng của trình tối ưu hoá R8
Trình tối ưu hoá R8 mặc định sử dụng "chế độ đầy đủ" kể từ phiên bản 8.0 của Trình bổ trợ Android cho Gradle. Nếu dự án của bạn đã được phát triển trong nhiều năm, thì dự án đó vẫn có thể bao gồm một cờ cũ để tắt tính năng này. Kiểm tra tệp gradle.properties để tìm dòng này rồi xoá dòng đó.
android.enableR8.fullMode=false // delete this line to enable R8's full potential
Bây giờ, hãy kiểm tra xem bạn đã bật R8 trong tệp build.gradle.kts của ứng dụng cho biến thể phát hành hay chưa. Bạn có thể bật tính năng này bằng cách đặt isMinifyEnabled và isShrinkResources thành true. Bạn cũng có thể truyền các tệp cấu hình mặc định và tuỳ chỉnh ở bước này.
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro"
)
}Nghiên cứu điển hình: Nâng cao hiệu suất của Disney+
Các kỹ sư tại Disney+ đầu tư vào hiệu suất của ứng dụng và đang tối ưu hoá trải nghiệm người dùng của ứng dụng. Đôi khi, ngay cả những thay đổi có vẻ nhỏ cũng có thể tạo ra tác động lớn. Trong quá trình kiểm tra cấu hình R8, nhóm phát hiện thấy cờ -dontoptimize đang được sử dụng. Cấu hình này được đưa vào bằng một tệp cấu hình mặc định và vẫn được dùng trong nhiều ứng dụng cho đến ngày nay.
Sau khi thay thế proguard-android.txt bằng proguard-android-optimize.txt, nhóm Disney+ nhận thấy hiệu suất của ứng dụng đã cải thiện đáng kể.
Sau khi triển khai phiên bản mới của ứng dụng có chứa thay đổi này cho người dùng, Disney+ nhận thấy thời gian khởi động ứng dụng nhanh hơn 30% và số lỗi ANR mà người dùng nhận thấy giảm 25%.
Hiện nay, nhiều ứng dụng vẫn sử dụng tệp proguard-android.txt có chứa cờ -dontoptimize. Đó là lúc chúng tôi cải thiện các công cụ của mình.
Hỗ trợ công cụ
Kể từ Bản cập nhật tính năng Narwhal 3 của Android Studio, bạn sẽ thấy cảnh báo lint khi sử dụng proguard-android.txt
Và từ AGP 9.0 trở đi, chúng tôi sẽ ngừng hoàn toàn việc hỗ trợ tệp này. Điều này có nghĩa là bạn sẽ phải di chuyển sang proguard-android-optimize.txt.
Chúng tôi cũng đã đầu tư vào các tính năng mới của Android Studio để việc gỡ lỗi mã được tối ưu hoá bằng R8 trở nên dễ dàng hơn bao giờ hết. Kể từ AGP 9.0, giờ đây, bạn có thể tự động gỡ rối dấu vết ngăn xếp trong Logcat của Android Studio cho các bản dựng được xử lý bằng R8, giúp bạn xác định chính xác dòng mã gây ra vấn đề, ngay cả trong một ứng dụng được tối ưu hoá hoàn toàn. Chúng tôi sẽ đề cập đến vấn đề này chi tiết hơn trong bài đăng trên blog vào ngày mai trong Tuần lễ Android Performance Spotlight.
Các bước tiếp theo
Xem phần giới thiệu về Performance Spotlight Week (Tuần lễ giới thiệu hiệu suất) đối với công cụ tối ưu hoá R8 trên YouTube.
📣 Tham gia Thử thách về hiệu suất!
Đã đến lúc bạn tự mình trải nghiệm những lợi ích này.
Chúng tôi thách thức bạn bật chế độ đầy đủ của R8 cho ứng dụng của mình ngay hôm nay.
- Hãy làm theo hướng dẫn dành cho nhà phát triển của chúng tôi để bắt đầu: Bật tính năng tối ưu hoá ứng dụng.
- Kiểm tra xem bạn có còn dùng
proguard-android.txthay không và thay thế bằngproguard-android-optimize.txt. - Sau đó, hãy đo lường mức tác động. Đừng chỉ cảm nhận sự khác biệt, hãy xác minh sự khác biệt đó. Đo lường mức tăng hiệu suất bằng cách điều chỉnh mã từ ứng dụng mẫu Macrobenchmark trên GitHub để đo thời gian khởi động trước và sau khi điều chỉnh.
Chúng tôi tin rằng bạn sẽ thấy hiệu suất của ứng dụng được cải thiện đáng kể. Sử dụng #optimizationEnabled cho mọi thắc mắc về việc bật hoặc khắc phục sự cố R8. Chúng tôi sẵn sàng trợ giúp.
Hãy chuẩn bị sẵn câu hỏi để tham gia phiên Hỏi về Android vào thứ Sáu
Hãy dùng thẻ mạng xã hội #AskAndroid để đặt mọi câu hỏi về hiệu suất. Trong suốt tuần này, chúng tôi sẽ theo dõi các câu hỏi của bạn và trả lời một số câu hỏi trong phiên Hỏi Android về hiệu suất vào thứ Sáu, ngày 21 tháng 11. Hãy theo dõi vào ngày mai, khi chúng ta sẽ tìm hiểu sâu hơn về việc gỡ lỗi và khắc phục sự cố. Nhưng hiện tại, hãy bắt đầu với R8 để ứng dụng của bạn có thể đi đúng hướng.
Tiếp tục đọc
-
Sự kiện và chương trình
Từ các chức năng cơ bản của trình tối ưu hoá R8 và tính năng Tối ưu hoá dựa trên hồ sơ, đến những cải thiện về hiệu suất với Jetpack Compose, cho đến hướng dẫn mới về cách nâng cao hiệu suất của ứng dụng, chúng tôi đã đề cập đến những công cụ có tác động lớn mà bạn cần để tạo một ứng dụng hiệu suất cao.
Ben Weiss, Sara Hamilton • Đọc trong 3 phút
-
Sự kiện và chương trình
Lịch trình của Google I/O đã có!
Đọc trong 1 phút
-
Sự kiện và chương trình
Tháng 9 năm ngoái, chúng tôi đã chia sẻ tầm nhìn của mình về tương lai của Google Play Games dựa trên một niềm tin cốt lõi: cách tốt nhất để thúc đẩy thành công cho trò chơi của bạn là mang đến trải nghiệm đẳng cấp thế giới cho người chơi.
Maru Ahues Bouza • Đọc trong 3 phút
Nhận thông tin cập nhật
Nhận thông tin chi tiết mới nhất về hoạt động phát triển trên Android trong hộp thư đến của bạn mỗi tuần.