Sử dụng R8 để rút gọn, tối ưu hoá và đẩy nhanh ứng dụng
Chào mừng bạn đến với ngày đầu tiên của Tuần lễ Spotlight về 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ụ để rút gọn kích thước ứng dụng. Công cụ này thực hiện rất tốt việc xoá mã và tài nguyên không dùng đến, giúp giảm kích thước ứng dụng. Tuy nhiên, sức mạnh thực sự của công cụ này, sức mạnh mà công cụ này thực sự g-R8 , là một trình tối ưu hoá.
Khi bạn bật chế độ đầy đủ chức năng 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 để về cơ bản, mã này sẽ hiệu quả hơ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ễ Spotlight về hiệu suất cho 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ỹ các bước lớn 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.
Tree shaking (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, cũng như xoá mã không dùng đến khỏi cơ sở mã của riêng bạn.
Method inlining (Nội tuyến phương thức) thay thế 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.
Class merging (Hợp nhất lớp) và các chiến lược khác được áp dụng để làm cho mã nguồn gọn gàng 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ệ phân cấp lớp, đều không quan trọng ở thời điểm này và có khả năng bị xoá.
Code minification (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ô nghĩa hơn. 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 sự nhầm lẫn nhiều nhất khi đọc dấu vết ngăn xếp từ một ứng dụng được tối ưu hoá bằng R8. (Xin lưu ý rằng chúng tôi đã cải thiện điều này trong AGP 9.0!)
Resource shrinking (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à đối tượng 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 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: Cải thiện hiệu suất của Reddit bằng R8
Để xem một ví dụ về những cải thiện về hiệu suất mà R8 có thể mang lại, hãy xem một ví dụ từ Reddit. Sau khi bật R8 ở chế độ đầy đủ chức năng, ứng dụng Reddit dành cho Android đã có những cải thiện đáng kể về hiệu suất ở nhiều lĩnh vực.
Chú thích: Cách R8 cải thiện hiệu suất của ứng dụng Reddit
Nhóm đã quan sát 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 cải tiến này rất quan trọng để người dùng hài lòng. Thời gian khởi động nhanh hơn có nghĩa là thời gian chờ đợi ít hơn và truy cập nội dung nhanh hơn. Ít lỗi ANR hơn giúp ứng dụng ổn định và đáng tin cậy hơn, giảm sự thất vọng của người dùng. Khả năng kết xuất khung hình mượt mà hơn giúp loại bỏ hiện tượng giật lag trên 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 kỹ thuật tích cực này cũng được thể hiện rõ ràng trong tâm lý của người dùng.
Bạn có thể đọc thêm về những cải tiến của họ 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 làm việc với các đối tác, chúng tôi nhận thấy rằng những cải tiến 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. Sự gắn bó của người dùng, có thể đo lường bằng số người dùng đang hoạt động hằng ngày, hằng tuần hoặc hằng tháng, cũng bị ảnh hưởng tích cực bởi những cải tiến về hiệu suất kỹ thuật. Chúng tôi nhận thấy xếp hạng ứng dụng trên Cửa hàng Play tăng lên tương quan với việc áp 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ệ (CTO) và những người ra quyết định có thể giúp đẩy nhanh hiệu suất của ứng dụng.
Vì vậy, hãy gọi đúng tên: Việc tối ưu hoá hiệu suất một cách 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 rằng cần cải thiện hướng dẫn dành cho nhà phát triển về R8. Vì vậy, chúng tôi đã bắt tay vào thực hiện. Hướng dẫn dành cho nhà phát triển về trình tối ưu hoá R8 hiện hữu ích hơn nhiều 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 một cách tăng dần để đảm bảo tính ổn định. Phương pháp theo từng giai đoạn này cho phép bạn khai thác an toàn các lợi ích của R8, đồng thời cung cấp hướng dẫn về các 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. Hiện tại, chúng tôi cung cấp một phần về Quy tắc giữ lại là gì, cách áp dụng các quy tắc này và hướng dẫn bạn về 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 ví dụ và trường hợp sử dụng 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 phản ánh hoặc sử dụng giao diện gốc JNI.
Tài liệu này hiện cũng đề cập đến các bước tiếp theo cần thiết và các tình huống 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 mục tiêu đến các biến thể bản dựng cụ thể, tuỳ chỉnh tài nguyên nào được giữ lại hoặc xoá và đư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.
Khai thác toàn bộ 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 đủ chức năng" 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. Hãy kiểm tra tệp gradle.properties để tìm dòng này và 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 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: Cải thiện 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 khi kiểm tra cấu hình R8, nhóm nhận thấy rằng cờ -dontoptimize đang được sử dụng. Cờ này được đưa vào bởi một tệp cấu hình mặc định, vẫn được sử dụng trong nhiều ứng dụng hiện nay.
Sau khi thay thế proguard-android.txt bằng proguard-android-optimize.txt, nhóm Disney+ đã nhận thấy những cải thiện đáng kể về hiệu suất của ứng dụng.
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 cảm nhận được giảm 25%.
Ngày nay, nhiều ứng dụng vẫn sử dụng tệp proguard-android.txt có chứa cờ -dontoptimize. Đó là lúc những cải tiến về công cụ của chúng tôi phát huy tác dụng.
Hỗ trợ công cụ
Bắt đầu từ Bản cập nhật tính năng Narwhal 3 của Android Studio, bạn sẽ thấy một 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 để giúp 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. Bắt đầu từ AGP 9.0, giờ đây, bạn có thể tự động huỷ làm rối dấu vết ngăn xếp trong Logcat của Android Studio cho các bản dựng được R8 xử lý, 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 chi tiết hơn về vấn đề này trong bài đăng trên blog ngày mai trong Tuần lễ Spotlight về hiệu suất trên Android.
Các bước tiếp theo
Hãy xem phần giới thiệu về Tuần lễ Spotlight về hiệu suất cho trình 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 thấy được những lợi ích.
Chúng tôi thách bạn bật chế độ đầy đủ chức năng của R8 cho ứng dụng của mình ngay hôm nay.
- 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 sử dụng
proguard-android.txthay không và thay thế bằngproguard-android-optimize.txt. - Sau đó, đo lường 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 lường thời gian khởi động trước và sau khi thực hiện.
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 câu hỏi 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.
Đặt câu hỏi cho phiên Hỏi Android vào thứ Sáu
Sử dụng thẻ xã hội #AskAndroid để đặt mọi câu hỏi về hiệu suất. Trong suốt tuần, 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 tôi sẽ đi sâu hơn nữa vào việc gỡ lỗi và khắc phục sự cố. Tuy nhiên, trước mắt, hãy bắt đầu sử dụng R8 và đưa ứng dụng của bạn vào lộ trình nhanh.
Tiếp tục đọc
-
Sự kiện và chương trình
Từ các tính năng cơ bản của trình tối ưu hoá R8 và tính năng Tối ưu hoá có hướng dẫn theo hồ sơ, đến những cải tiến về hiệu suất với Jetpack Compose, đế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 các công cụ ít tốn công sức nhưng có tác động lớn mà bạn cần để tạo một ứng dụng hoạt động hiệu quả.
Ben Weiss, Sara Hamilton • Đọc trong 3 phút
-
Sự kiện và chương trình
Lịch trình 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 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 sự thành công của trò chơi 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ề quá trình phát triển Android được gửi đến hộp thư đến của bạn hằng tuần.