Trình bổ trợ Android cho Gradle 3.3.0 (tháng 1 năm 2019)

Phiên bản trình bổ trợ Android này yêu cầu:

Phiên bản tối thiểu Phiên bản mặc định Lưu ý
Gradle 4.10.1 4.10.1 Để tìm hiểu thêm, hãy xem phần cập nhật Gradle. Khi bạn dùng Gradle 5.0 trở lên, kích thước vùng nhớ khối xếp trình nền mặc định của Gradle sẽ giảm từ 1 GB xuống còn 512 MB. Điều này có thể dẫn đến sự sụt giảm hiệu suất của bản dựng. Để ghi đè chế độ cài đặt mặc định này, hãy chỉ định kích thước vùng nhớ khối xếp của trình nền Gradle trong tệp gradle.properties của dự án.
Công cụ tạo SDK 28.0.3 28.0.3 Cài đặt hoặc định cấu hình Công cụ tạo SDK.

3.3.3 (tháng 7 năm 2020)

Bản cập nhật nhỏ này hỗ trợ khả năng tương thích với các tính năng và chế độ cài đặt mặc định mới của chế độ hiển thị gói trong Android 11.

Hãy xem ghi chú phát hành phiên bản 4.0.1 để biết thông tin chi tiết.

Phiên bản 3.3.2 (Tháng 3 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.3.2, bao gồm nhiều bản sửa lỗi và cải thiện hiệu suất. Để xem danh sách bản sửa lỗi đáng chú ý, hãy đọc bài đăng liên quan trên blog về Thông tin cập nhật về bản phát hành.

Phiên bản 3.3.1 (tháng 2 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.3.1, bao gồm nhiều bản sửa lỗi và cải thiện hiệu suất.

Tính năng mới

  • Cải thiện tính năng đồng bộ hoá classpath: Khi phân giải các phần phụ thuộc trên classpath thời gian chạy và thời gian biên dịch, trình bổ trợ Android cho Gradle cố gắng sửa một số xung đột phiên bản truyền xuống cụ thể cho các phần phụ thuộc xuất hiện trên nhiều classpath.

    Ví dụ: nếu classpath thời gian chạy bao gồm Thư viện A phiên bản 2.0 và classpath biên dịch bao gồm Thư viện A phiên bản 1.0, thì trình bổ trợ sẽ tự động cập nhật phần phụ thuộc trên classpath biên dịch thành Thư viện A phiên bản 2.0 để tránh lỗi.

    Tuy nhiên, nếu classpath thời gian chạy bao gồm Thư viện A phiên bản 1.0 và classpath biên dịch bao gồm Thư viện A phiên bản 2.0, thì trình bổ trợ sẽ không hạ cấp phần phụ thuộc trên classpath biên dịch thành Thư viện A phiên bản 1.0 và sẽ xảy ra lỗi. Để tìm hiểu thêm, hãy xem nội dung Khắc phục xung đột giữa các classpath.

  • Cải thiện tính năng biên dịch Java gia tăng khi dùng trình xử lý chú giải: Bản cập nhật này giúp giảm thời gian tạo bản dựng bằng cách cải thiện khả năng hỗ trợ chế độ biên dịch Java gia tăng khi dùng trình xử lý chú giải.

    Lưu ý: Tính năng này tương thích với Gradle 4.10.1 trở lên, ngoại trừ Gradle 5.1 do Vấn đề Gradle 8194.

    • Đối với các dự án sử dụng Kapt (hầu hết các dự án chỉ dành cho Kotlin và dự án kết hợp Kotlin-Java): Chúng tôi sẽ bật tính năng biên dịch Java gia tăng, ngay cả khi bạn dùng tính năng liên kết dữ liệu hoặc trình bổ trợ retro-lambda. Hoạt động xử lý chú giải theo tác vụ Kapt chưa được gia tăng.

    • Đối với các dự án không sử dụng Kapt (các dự án chỉ dành cho Java): Nếu tất cả trình xử lý chú giải bạn sử dụng đều hỗ trợ xử lý chú giải gia tăng, tính năng biên dịch Java gia tăng sẽ được bật theo mặc định. Để theo dõi quá trình sử dụng trình xử lý chú giải gia tăng, hãy xem nội dung Vấn đề Gradle 5277.

      Tuy nhiên, nếu một hoặc nhiều trình xử lý chú giải không hỗ trợ các bản dựng gia tăng, thì chế độ biên dịch Java gia tăng sẽ không được bật. Thay vào đó, bạn có thể đưa cờ này vào tệp gradle.properties:

      android.enableSeparateAnnotationProcessing=true
                  

      Khi bạn đưa cờ này vào, trình bổ trợ Android cho Gradle sẽ thực thi các trình xử lý chú giải trong một tác vụ riêng và cho phép tác vụ biên dịch Java chạy theo mức độ tăng dần.

  • Cung cấp thông tin gỡ lỗi rõ ràng hơn khi dùng API lỗi thời: Trình bổ trợ phát hiện bạn đang dùng API đã bị ngừng hỗ trợ, nhưng vẫn có thể cung cấp thông tin chi tiết hơn để giúp xác định nơi API đó đang được dùng. Để xem thông tin bổ sung, bạn cần đưa đoạn mã sau vào tệp gradle.properties của dự án:

              android.debug.obsoleteApi=true
            

    Bạn cũng có thể bật cờ này bằng cách chuyển -Pandroid.debug.obsoleteApi=true vào từ dòng lệnh.

  • Bạn có thể chạy kiểm thử đo lường trên các mô-đun tính năng từ dòng lệnh.

Thay đổi về hành vi

  • Cấu hình tác vụ trì hoãn: Trình bổ trợ hiện sử dụng API tạo tác vụ mới của Gradle nhằm tránh khởi chạy và định cấu hình các tác vụ không cần thiết để hoàn thành bản dựng hiện tại (hoặc các tác vụ không có trên biểu đồ tác vụ thực thi). Ví dụ: nếu bạn có nhiều biến thể bản dựng (chẳng hạn như các biến thể bản dựng "bản phát hành" và "gỡ lỗi") và đang xây dựng phiên bản "gỡ lỗi" của ứng dụng, trình bổ trợ sẽ tránh việc khởi chạy và định cấu hình tác vụ cho phiên bản "phát hành" của ứng dụng.

    Việc gọi một số phương thức cũ trong các API Biến thể (chẳng hạn như variant.getJavaCompile()) vẫn có thể bắt buộc định cấu hình tác vụ. Để đảm bảo rằng bản dựng được tối ưu hoá cho cấu hình tác vụ trì hoãn, hãy gọi các phương thức mới để trả về đối tượng TaskProvider thay thế (chẳng hạn như variant.getJavaCompileProvider()).

    Nếu bạn thực thi các tác vụ bản dựng tuỳ chỉnh, hãy tìm hiểu cách thích ứng với API tạo tác vụ mới của Gradle.

  • Đối với một loại bản dựng cụ thể, khi thiết lập useProguard false, trình bổ trợ hiện sẽ sử dụng R8 thay vì ProGuard để rút gọn và làm rối mã nguồn cùng tài nguyên của ứng dụng. Để tìm hiểu thêm về R8, hãy đọc bài đăng trên blog từ Blog của nhà phát triển Android.

  • Tạo lớp R nhanh hơn cho các dự án thư viện: Trước đây, trình bổ trợ Android cho Gradle sẽ tạo một tệp R.java cho từng phần phụ thuộc của dự án, sau đó biên dịch các lớp R đó cùng với các phần phụ thuộc của các lớp khác trong ứng dụng. Trình bổ trợ này hiện tạo tệp JAR chứa trực tiếp lớp R được biên dịch của ứng dụng mà không cần tạo trước các lớp R.java trung gian. Tính năng tối ưu hoá này có thể cải thiện đáng kể hiệu suất bản dựng cho các dự án có nhiều dự án thư viện con và phần phụ thuộc, đồng thời cải thiện tốc độ lập chỉ mục trong Android Studio.

  • Khi tạo một Android App Bundle, tệp APK được tạo từ gói ứng dụng đó – nhắm đến Android 6.0 (API cấp 23) trở lên – nay tích hợp các phiên bản thư viện gốc không nén theo mặc định. Việc tối ưu hoá này sẽ làm mất đi nhu cầu tạo bản sao thư viện của thiết bị. Nhờ đó, ứng dụng sẽ chiếm ít dung lượng trên ổ đĩa hơn. Tuy nhiên, nếu bạn muốn vô hiệu hoá tính năng tối ưu hoá này, hãy thêm nội dung sau vào tệp gradle.properties:

    android.bundle.enableUncompressedNativeLibs = false
            
  • Trình bổ trợ thực thi các phiên bản tối thiểu của một số trình bổ trợ bên thứ ba.

  • Đồng bộ hoá dự án một biến thể: Việc đồng bộ hoá dự án với cấu hình bản dựng là một bước quan trọng để Android Studio có thể nắm được cách xây dựng cấu trúc dự án. Tuy nhiên, đối với các dự án lớn, quá trình này có thể tốn nhiều thời gian. Giờ đây, nếu dự án của bạn dùng nhiều biến thể bản dựng, thì bạn có thể tối ưu hoá tính năng đồng bộ hoá dự án bằng cách chỉ giới hạn các biến thể đó thành biến thể bạn đang chọn.

    Bạn cần dùng Android Studio 3.3 trở lên với trình bổ trợ Android cho Gradle 3.3.0 trở lên để bật tính năng tối ưu hoá này. Khi bạn đáp ứng các yêu cầu trên, IDE sẽ nhắc bạn bật tính năng tối ưu hoá này khi bạn đồng bộ hoá dự án. Tính năng tối ưu hoá cũng được bật theo mặc định trên các dự án mới.

    Để bật tính năng tối ưu hoá này theo cách thủ công, hãy nhấp vàoFile > Settings > Experimental > Gradle (Tệp > Cài đặt > Thử nghiệm > Gradle) (Android Studio > Preferences > Experimental > Gradle trên máy Mac) (Android Studio > Tuỳ chọn > Thử nghiệm > Gradle trên máy Mac) rồi chọn hộp đánh dấu Only sync the active variant (Chỉ đồng bộ hoá biến thể đang hoạt động).

    Lưu ý: Tính năng tối ưu hoá này hỗ trợ đầy đủ các dự án chứa các ngôn ngữ Java và C++, đồng thời tích hợp một số tính năng hỗ trợ dành cho Kotlin. Khi bật tính năng tối ưu hoá cho các dự án có nội dung Kotlin, tính năng đồng bộ hoá Gradle sẽ quay lại sử dụng các biến thể đầy đủ trong nội bộ.

  • Tự động tải các gói SDK bị thiếu: Chúng tôi đã mở rộng chức năng này để hỗ trợ NDK. Để tìm hiểu thêm, hãy đọc nội dung Tự động tải các gói còn thiếu bằng Gradle.

Sửa lỗi

  • Trình bổ trợ Android cho Gradle 3.3.0 khắc phục những vấn đề sau:

    • Mặc dù đã bật Jetifier, quy trình xây dựng vẫn gọi android.support.v8.renderscript.RenderScript thay vì phiên bản AndroidX.
    • Sự cố do androidx-rs.jar gây ra bao gồm cả gói tĩnh annotation.AnyRes
    • Khi sử dụng RenderScript, bạn không còn phải thiết lập phiên bản Công cụ bản dựng theo cách thủ công trong các tệp build.gradle