Tối ưu hoá các gói được chỉ định bằng packageScope (Thử nghiệm)

Bạn có thể tối ưu hoá các gói cụ thể bằng cách sử dụng R8 với packageScope. Đây là bước đầu tiên không bắt buộc đối với những ứng dụng chưa dùng R8 và không được khuyến khích cho những ứng dụng đã dùng R8.

Cân nhắc xem có nên sử dụng packageScope hay không

Nếu ứng dụng của bạn đã sử dụng R8, thì đừng dùng packageScope vì đây là một cấu hình không tối ưu về hiệu suất và kích thước ứng dụng. Thay vào đó, hãy cải thiện cấu hình R8 của ứng dụng bằng các quy tắc giữ lại được cải tiến hoặc nếu đang sử dụng chế độ tương thích, hãy di chuyển sang chế độ đầy đủ của R8.

Đối với những ứng dụng chưa sử dụng R8 nhưng đang áp dụng R8, hãy dùng packageScope để quản lý quá trình chuyển đổi theo từng bước. Vì R8 áp dụng các phương pháp tối ưu hoá mạnh mẽ có thể làm thay đổi hành vi của ứng dụng, nên việc giới hạn phạm vi của các phương pháp tối ưu hoá này cho những gói cụ thể có thể tối ưu hoá một cách an toàn (chẳng hạn như AndroidX và Kotlin) sẽ giúp bạn cải thiện hiệu suất với rủi ro tối thiểu. Sau khi ứng dụng của bạn ổn định, bạn có thể dần dần mở rộng các hoạt động tối ưu hoá này sang phần còn lại của cơ sở mã và các phần phụ thuộc, đồng thời kiểm thử tính ổn định ở mỗi giai đoạn.

Điều kiện tiên quyết

Để dùng R8 với packageScope, bạn cần có Trình bổ trợ Android cho Gradle 9.0 trở lên.

Định cấu hình hoạt động tối ưu hoá

Để bật tính năng tối ưu hoá bằng packageScope, hãy hoàn tất các bước sau.

Chọn thư viện để tối ưu hoá

Xác định các thư viện cần tối ưu hoá. Bạn nên bắt đầu bằng các thư viện AndroidX và Kotlin androidx.**, kotlin.**kotlinx.** vì đây là những thư viện ổn định đã được định cấu hình để tương thích với R8.

Bật tính năng hỗ trợ sử dụng R8 với packageScope

Thêm nội dung sau vào tệp gradle.properties của dự án:

android.r8.gradual.support=true

Thiết lập khối tối ưu hoá

Trong tệp build.gradle.kts (hoặc build.gradle) ở cấp mô-đun, hãy thêm một khối optimization vào cấu hình bản phát hành. Trong khối này, hãy sử dụng packageScope để liệt kê những gói cụ thể mà bạn muốn tối ưu hoá. Trong tệp build.gradle.kts, hãy gói danh sách gói của bạn trong setOf().

Kotlin

android {
  buildTypes {
    release {
      proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")
      optimization {
        enable = true
        packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
      }
    }
  }
}

Groovy

android {
  buildTypes {
    release {
      proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
      optimization {
        enable = true
        packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
      }
    }
  }
}

Kiểm thử việc tối ưu hoá

Sau khi áp dụng hoặc cập nhật khai báo packageScope, hãy kiểm thử kỹ lưỡng ứng dụng để xác minh rằng không có sự cố hoặc thay đổi hành vi bất ngờ nào xảy ra.

Chuyển đổi từ việc tối ưu hoá các gói được chỉ định sang tối ưu hoá toàn bộ ứng dụng

Để tối đa hoá lợi ích của việc tối ưu hoá, bạn nên chuyển đổi dần từ việc sử dụng packageScope sang sử dụng R8 trong toàn bộ ứng dụng. Quá trình này bao gồm việc tăng dần phạm vi tối ưu hoá:

  1. Bắt đầu bằng các thư viện ổn định. Bắt đầu bằng cách chỉ thêm các thư viện ổn định, được sử dụng rộng rãi và tương thích với các hoạt động tối ưu hoá của R8 vào danh sách packageScope. Bắt đầu bằng các thư viện AndroidX và Kotlin androidx.**, kotlin.**kotlinx.**.
  2. Thêm gói theo từng bước. Dần dần thêm tiền tố gói mới vào packageScope:
    1. Đánh giá các phần phụ thuộc. Kiểm tra các thư viện của ứng dụng. Những ứng cử viên phù hợp để thêm vào danh sách packageScope bao gồm các thư viện chính thức của Google (ví dụ: com.google.**) và các thư viện mạnh mẽ khác như OkHttp (ví dụ: okhttp3.**okio.**). Hãy ưu tiên những thư viện không liên quan đến hoạt động phản chiếu, chuyển đổi tuần tự hoặc lệnh gọi mã gốc (JNI).
    2. Ưu tiên dựa trên kích thước gói. Sử dụng Công cụ phân tích APK của Android Studio để xác định những yếu tố đóng góp nhiều nhất vào kích thước ứng dụng của bạn. 1. Tạo tệp AAB hoặc APK phát hành khi R8 ở trạng thái tắt. 1. Mở tệp này trong Trình phân tích và kiểm tra các tệp dex. 1. Sắp xếp các gói theo kích thước. Các gói lớn nhất mang lại lợi tức đầu tư (ROI) cao nhất để tối ưu hoá. Việc nhắm đến những thư viện này trước tiên sẽ giúp bạn giảm kích thước đáng kể ngay từ đầu quy trình, miễn là các thư viện này không có quy tắc giữ lại quá rộng. Hãy xem bài viết Lựa chọn thư viện một cách khôn ngoan để biết thêm thông tin.
  3. Xác minh những thay đổi về hành vi. Sau khi thêm từng tiền tố gói mới, hãy tiến hành kiểm thử toàn diện để phát hiện và giải quyết mọi trường hợp hồi quy hoặc hành vi không mong muốn.
  4. Thêm gói ứng dụng sau cùng. Nếu các gói ứng dụng của bạn không sử dụng nhiều hoạt động phản chiếu, hãy đưa các gói ứng dụng vào packageScope và tăng dần các quy tắc giữ lại khi cần. Nếu các gói ứng dụng của bạn sử dụng nhiều hoạt động phản chiếu, hãy đưa các gói đó vào packageScope và thêm các quy tắc giữ lại trên toàn gói cho các gói bắt buộc. Lặp lại các quy tắc giữ lại để tinh chỉnh các quy tắc đó.
  5. Chuyển sang sử dụng R8 trong toàn bộ ứng dụng. Sau khi phần lớn các phần phụ thuộc của ứng dụng được đưa vào khai báo packageScope và ứng dụng của bạn ổn định, hãy xoá packageScope để tối ưu hoá toàn bộ ứng dụng ở chế độ đầy đủ.