Sử dụng R8 để rút gọn, tối ưu hoá và đẩy nhanh quá trình phát triển ứng dụng
5 phút đọc
Sử dụng R8 để rút gọn, tối ưu hoá và đẩy nhanh quá trình phát triển ứng dụng
Chào mừng bạn đến với ngày đầu tiên của Tuần lễ giới thiệu hiệu suất Android!
Chúng ta sẽ bắt đầu với thay đổi duy nhất 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ó thể bạn đã biết R8 là một công cụ để giảm kích thước ứng dụng. Công cụ này làm rất tốt việc loại bỏ 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à khả năng 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 và toàn bộ chương trình, viết lại mã của bạn để mã này 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ề trình tối ưu hoá R8 trên YouTube trong Tuần lễ giới thiệu hiệu suất.
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ỹ hơn 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.
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ẽ loại bỏ 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ư mã không dùng đến khỏi cơ sở mã của riêng bạn.
Nội tuyến hoá 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.
Hợp nhất lớp và các chiến lược khác được áp dụng để làm cho mã trở nê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ó thể bị loại bỏ.
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 hơn. Vì vậy, thay vì MyDataModel, bạn có thể nhận được 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!)
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 loại bỏ 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ác điểm cải thiện hiệu suất của Reddit nhờ R8
Để xem một ví dụ về các điểm cải thiện hiệu suất mà R8 có thể mang lại, hãy xem ví dụ của Reddit. Sau khi bật R8 ở chế độ đầy đủ, ứng dụng Reddit dành cho Android đã có những điểm 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 điểm cải thiệ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ờ í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ỏ tình trạ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 tích cực về mặt kỹ thuật 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ề các điểm cải thiệ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 điểm cải thiện về mặt kỹ thuật này có tác động trực tiếp đến sự 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ử dụng của người dùng. Mức độ hấp dẫn 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 các điểm cải thiệ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 nó là: Việc tối ưu hoá hiệu suất một cách có chủ ý là một đức tính.
Hướng dẫn bạn tạo ứng dụng hoạt động hiệu quả hơn
Chúng tôi nhận thấy rằng 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 đầu làm 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ó tính thực tiễn 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 cho bạn 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. Chúng tôi hiện 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 trường hợp sử dụng và ví dụ thực tế và có tính thực tiễn, giúp bạn hiểu cách ngăn R8 loại bỏ 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 chiếu 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 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 tài nguyên nào được giữ lại hoặc loại bỏ, đồ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.
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 đủ" 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 cờ 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ác điểm 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, tệp này 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 điểm 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. Và đó là lúc các điểm cải thiện về công cụ của chúng tôi phát huy tác dụng.
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à kể 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. Kể từ AGP 9.0, giờ đây, bạn có thể tự động loại bỏ tình trạng làm rối mã nguồn của 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 đế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ễ giới thiệu hiệu suất Android này.
Các bước tiếp theo
Hãy xem phần giới thiệu về trình tối ưu hoá R8 trên YouTube trong Tuần lễ giới thiệu hiệu suất.
📣 Tham gia Thử thách hiệu suất!
Đã đến lúc bạn tự mình thấy được lợi ích.
Chúng tôi thách bạn bật chế độ đầy đủ 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 vẫn sử dụng
proguard-android.txthay không và thay thế bằngproguard-android-optimize.txt. - Sau đó, hãy đ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 một điểm cải thiện đáng kể về hiệu suất của ứng dụng. Hãy 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 về 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âu hỏi của bạn và trả lời một số câu hỏi trong phiên Hỏi về 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ố. Nhưng hiện tại, hãy bắt đầu với R8 và đưa ứng dụng của bạn vào lộ trình nhanh.
-
Sự kiện và chương trìnhTừ 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 các điểm cải thiện hiệu suất bằng 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 • 3 phút đọc -
Sự kiện và chương trìnhChúng tôi đang mở đơn đăng ký cho Chương trình xúc tác nhà phát triển Android XR, một sáng kiến chuyên dụng nhằm đẩy nhanh quá trình phát triển các ứng dụng Android XR sẵn sàng ra mắt trong năm tới.
-
1 phút đọc
Nhận thông tin chi tiết mới nhất về quá trình phát triển Android hằng tuần trong hộp thư đến của bạn.