Sử dụng R8 để rút gọn, tối ưu hoá và đẩy nhanh tiến độ phát triển ứng dụng
Thời gian đọc: 5 phút
Sử dụng R8 để rút gọn, tối ưu hoá và đẩy nhanh tiến độ 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ễ tiêu điểm về hiệu suất Android!
Chúng tôi sẽ bắt đầu bằng một thay đổi đơn giản nhưng có tác động lớn 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úp thu nhỏ kích thước ứng dụng. Công cụ này giúp loại bỏ mã và tài nguyên không dùng đến, giảm kích thước ứng dụng. Nhưng sức mạnh thực sự của AI, điều mà nó thực sự giỏi, 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, toàn bộ chương trình, viết lại mã của bạn để về cơ bản 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ề trình tối ưu hoá R8 trong Tuần lễ tiêu điểm về hiệu suất 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 tìm hiểu các 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.
Tree shaking 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ã chết khỏi toàn bộ mã nguồn của riêng bạn.
Phương thức cùng dòng 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ã 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ệ phân cấp lớp, đều không quan trọng tại thời điểm này và có khả năng bị xoá.
Rút gọn 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, không có ý nghĩa. Vì vậy, thay vì MyDataModel, bạn có thể có một lớp tên là a. Đây là nguyên nhân gây 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. (Lưu ý rằng chúng tôi đã cải thiện vấn đề này trong AGP 9.0!)
Thu 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, giúp giao diện người dùng hiển thị mượt mà hơn, giảm số khung hình bị chậm và bị treo, đồ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
Để minh hoạ cho những cải tiế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 đủ, ứng dụng Reddit cho Android đã cải thiện đáng kể 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 nhận thấy tốc độ 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% hiệu suất 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. Thời gian khởi động nhanh hơn đồng nghĩa với việc người dùng ít phải chờ đợi hơn và có thể truy cập vào 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 bớt sự thất vọng của người dùng. Quá trình kết xuất khung hình mượt mà hơn giúp 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à thích ứng nhanh. Tác động tích cực về mặt kỹ thuật này cũng thể hiện rõ trong cảm nhận của người dùng.
Bạn có thể đọc thêm về những điểm cải tiến của các tính năng này trên blog của chúng tôi.
Tác dụng phụ phi 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 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 qua tỷ lệ giữ chân người dùng, mức độ tương tác 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 hoạt động hằng ngày, hằng tuần hoặc hằng tháng) cũng chịu ảnh hưởng tích cực từ những điểm cải thiện về hiệu suất kỹ thuật. Chúng tôi cũng nhận thấy điểm xếp hạng ứng dụng trên Cửa hàng Play tăng lên tương ứng 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ệ và người 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 đúng tên của nó: 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 ứng dụng có hiệu suất cao hơn
Chúng tôi nhận thấy cần phải 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 việc. 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 áp dụng cấp cao, nhấn mạnh tầm quan trọng của việc chọn thư viện thân thiện với tính năng tối ưu hoá và quan trọng là áp dụng dần các tính năng của R8 để đảm bảo độ ổn định. Phương pháp từng giai đoạn này giúp bạn khai thác các lợi ích của R8 một cách an toàn, đồng thời hướng dẫn bạ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. Giờ đây, chúng tôi cung cấp một phần về Quy tắc giữ lại, cách áp dụng quy tắc này và hướng dẫn bạn các phương pháp hay nhất để viết và duy trì quy tắc. 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 chặn chính xác việc R8 xoá mã cần thiết trong thời gian chạy, 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ề thử nghiệm 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 đề có thể 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 bị 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.
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ì có thể dự án đó vẫn có một cờ cũ để tắt tính năng này. Kiểm tra tệp gradle.properties của bạn để tìm dòng này và xoá dòng này.
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 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 phát hiện thấy cờ -dontoptimize đang được sử dụng. Tệp này được đưa vào bằng một tệp cấu hình mặc định, hiện vẫn được dùng trong nhiều ứng dụng.
Sau khi thay thế proguard-android.txt bằng proguard-android-optimize.txt, nhóm Disney+ nhận thấy hiệu suất ứng dụng của họ cải thiện đáng kể.
Sau khi ra mắt 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 tốc độ 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 chứa cờ -dontoptimize. Và đó là lúc chúng tôi cải tiến công cụ.
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 tìm lỗi mã nguồn khi sử dụng proguard-android.txt
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 giải mã các 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 chi tiết hơn về vấn đề này trong bài đăng trên blog ngày mai về Tuần lễ tiêu điểm về hiệu suất Android.
Các bước tiếp theo
Xem video giới thiệu về trình tối ưu hoá R8 trong Tuần lễ tiêu điểm về hiệu suất trên YouTube.
📣 Tham gia Thử thách 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 khuyến khích 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 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 điều đó. Đ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 tối ưu hoá.
Chúng tôi tin rằng bạn sẽ thấy hiệu suất ứng dụng của mình cải thiện đáng kể. Sử dụng #optimizationEnabled cho mọi câu hỏi về cách bật hoặc khắc phục sự cố R8. Chúng tôi sẵn sàng trợ giúp.
Hãy đặt câu hỏi cho phiên Hỏi đáp về Android vào thứ Sáu
Sử dụng thẻ mạng xã hội #AskAndroid để đặt 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 đáp về hiệu suất trên Android vào thứ Sáu, ngày 21 tháng 11. Hãy đón chờ 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 và đưa ứng dụng của bạn vào lộ trình nhanh chóng.
-
Sự kiện và chương trìnhTừ sức mạnh nền tảng 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 các điểm cải tiế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 các công cụ ít tốn công sức nhưng mang lại hiệu quả cao mà bạn cần để xây dựng 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ìnhHệ sinh thái Android là một thực tế đa thiết bị, bao gồm điện thoại, thiết bị gập, máy tính bảng, thiết bị đeo, màn hình trên ô tô, XR và Googlebook. Trong bối cảnh này, việc phát triển thích ứng là nền tảng để tiếp cận người dùng ở bất cứ đâu.
Rebecca Gutteridge • Đọc trong 3 phút -
Sự kiện và chương trìnhNăm nay, tại Hội nghị Nhà phát triển Android, chúng tôi đã chia sẻ về cách các công cụ cho nhà phát triển của Android đang phát triển để giúp bạn làm việc hiệu quả hơn cùng với các tác nhân của mình.
Adarsh Fernando • Thời gian đọc: 10 phút
Nhận thông tin chi tiết mới nhất về hoạt động phát triển Android trong hộp thư đến của bạn hằng tuần.