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

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

Phiên bản 3.4.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.4.2 (Tháng 7 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.4.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.4.1 (Tháng 5 năm 2019)

Bản cập nhật nhỏ này hỗ trợ Android Studio 3.4.1, 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.

Tính năng mới

  • Cấu hình phần phụ thuộc mới cho công cụ kiểm tra tìm lỗi mã nguồn: Hành vi của lintChecks đã thay đổi và cấu hình phần phụ thuộc mới (lintPublish) đã được giới thiệu để cung cấp thêm quyền điều khiển công cụ kiểm tra tìm lỗi mã nguồn được đóng gói trong thư viện Android.

    • lintChecks: Đây là cấu hình hiện có mà bạn nên dùng cho công cụ kiểm tra tìm lỗi mã nguồn mà bạn chỉ muốn chạy khi tạo dự án cục bộ. Nếu trước đó bạn đã dùng cấu hình phần phụ thuộc lintChecks để đưa vào công cụ kiểm tra tìm lỗi mã nguồn trong tệp AAR đã phát hành, thì bạn cần di chuyển các phần phụ thuộc đó để dùng cấu hình lintPublish mới được mô tả bên dưới.
    • lintPublish: Sử dụng cấu hình mới này trong các dự án thư viện cho công cụ kiểm tra tìm lỗi mã nguồn bạn muốn đưa vào AAR đã phát hành, như được minh hoạ bên dưới: Tức là những dự án sử dụng thư viện cũng được áp dụng công cụ kiểm tra tìm lỗi mã nguồn trên.

    Mã mẫu sau đây dùng cả hai cấu hình phần phụ thuộc trong một dự án thư viện Android cục bộ.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • Nhìn chung, tốc độ xây dựng tổng thể các tác vụ đóng gói và ký sẽ cải thiện. Nếu bạn nhận thấy hiệu suất những tác vụ này giảm dần, vui lòng báo cáo lỗi.

Thay đổi về hành vi

  • Cảnh báo về việc ngừng hỗ trợ trình bổ trợ Tính năng ứng dụng Android tức thì: Nếu bạn vẫn đang dùng trình bổ trợ com.android.feature để tạo ứng dụng tức thì, trình bổ trợ Android cho Gradle 3.4.0 sẽ gửi cảnh báo về việc ngừng hỗ trợ. Để đảm bảo bạn vẫn có thể tạo ứng dụng tức thì trên các phiên bản trình bổ trợ tương lai, hãy di chuyển ứng dụng tức thì sang dùngtrình bổ trợ tính năng động. Phương pháp này cũng cho phép phát hành cả thử nghiệm ứng dụng cài đặt và ứng dụng tức thì từ một Android App Bundle duy nhất.

  • R8 được bật theo mặc định: R8 tích hợp tính năng đơn giản hoá, rút gọn, làm rối mã nguồn, tối ưu hoá và tạo tệp dex chỉ trong một bước. Điều này giúp cải thiện hiệu suất của các bản dựng một cách đáng kể. R8 được giới thiệu trong trình bổ trợ Android cho Gradle 3.3.0 và hiện được bật theo mặc định cho cả ứng dụng lẫn các dự án thư viện Android sử dụng trình bổ trợ 3.4.0 trở lên.

Hình ảnh bên dưới cung cấp thông tin tổng quan cấp cao về quá trình biên dịch trước khi R8 được giới thiệu.

Trước R8, ProGuard là một bước biên dịch riêng, tách biệt với tác vụ tạo tệp dex và đơn giản hoá.

Giờ đây, nhờ R8, việc đơn giản hoá, rút gọn, làm rối mã nguồn, tối ưu hoá và tạo tệp dex (D8) đều được hoàn tất trong một bước, như minh hoạ dưới đây.

Với R8, việc đơn giản hoá, rút gọn, làm rối mã nguồn, tối ưu hoá và tạo tệp dex đều được thực hiện trong một bước biên dịch.

Xin lưu ý rằng R8 được thiết kế để hoạt động với các quy tắc ProGuard hiện có, vì vậy, bạn có thể sẽ không cần thực hiện thêm hành động nào để hưởng lợi từ R8. Tuy nhiên, vì công nghệ này khác với ProGuard được thiết kế riêng cho các dự án Android, nên việc rút gọn và tối ưu hoá có thể khiến mã mà ProGuard không có bị xoá. Vì vậy, trong trường hợp hiếm gặp này, bạn có thể cần phải thêm quy tắc bổ sung để giữ lại mã đó trong đầu ra của bản dựng.

Nếu gặp vấn đề khi sử dụng R8, hãy đọc bài viết Câu hỏi thường gặp về khả năng tương thích với R8 để xem có giải pháp nào không. Nếu không tìm thấy giải pháp, vui lòng báo cáo lỗi. Bạn có thể tắt R8 bằng cách thêm một trong các dòng sau vào tệp gradle.properties của dự án:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

Lưu ý: Đối với một loại bản dựng cụ thể, nếu bạn đặt useProguard thành false trong tệp build.gradle của mô-đun ứng dụng, thì trình bổ trợ Android cho Gradle sẽ dùng R8 để rút gọn mã của ứng dụng cho loại bản dựng đó, bất kể bạn có tắt R8 trong tệp gradle.properties của dự án hay không.

  • Ngừng sử dụng ndkCompile: Bạn sẽ gặp lỗi bản dựng nếu cố sử dụngndkBuild để biên dịch thư viện gốc. Thay vào đó, bạn nên dùng CMake hoặc ndk-build đểThêm mã C và C++ vào dự án.

Vấn đề đã biết

  • Việc dùng đúng tên gói duy nhất hiện không được thực thi nhưng sẽ áp dụng nghiêm ngặt hơn trên các phiên bản trình bổ trợ sau này. Trên Trình bổ trợ Android cho Gradle phiên bản 3.4.0, bạn có thể chọn tham gia để kiểm tra xem dự án của bạn có khai báo tên gói được chấp nhận hay không bằng cách bổ sung dòng dưới đây vào tệp gradle.properties.

              android.uniquePackageNames = true
              
            

    Để tìm hiểu thêm về cách đặt tên gói thông qua Trình bổ trợ Android cho Gradle, hãy xem phần Thiết lập mã nhận dạng ứng dụng.