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

Trình bổ trợ Android cho Gradle 7.1.0 là một bản phát hành chính bao gồm nhiều tính năng và điểm cải tiến mới.

7.1.3 (Tháng Tư 2022)

Bản cập nhật nhỏ này bao gồm các bản sửa lỗi sau:

  • Các vấn đề trùng lặp về lớp do R8 báo cáo

Để đọc danh sách toàn bộ bản sửa lỗi có trong bản phát hành này, hãy xem Bài đăng blog về Bản vá 3 của Android Studio Bumblebee.

7.1.2 (tháng 2 năm 2022)

Bản cập nhật nhỏ này bao gồm các bản sửa lỗi sau:

  • Trình bổ trợ Android cho Gradle 7.1.0-rc01 không thực hiện được việc biến đổi mã byte ASM trong quá trình kiểm thử đơn vị
  • Tính năng đồng bộ hoá Gradle không hoạt động với thông báo "Unable to load class "com.android.build.api.extensions.AndroidComponentsExtension"" (Không tải được lớp "com.android.build.api.extension.AndroidComponentsExtension").
  • Không sử dụng được một số khối DSL mới qua Groovy DSL trong trình bổ trợ Android cho Gradle 7.0.0
  • API xuất bản mới của AGP 7.1: jardoc jar được tạo không có chữ ký
  • ClassesDataSourceCache phải sử dụng phiên bản Asm mới nhất
  • Android Studio BumbleBee không phải lúc nào cũng triển khai các thay đổi mới nhất

Để đọc danh sách toàn bộ bản sửa lỗi có trong bản phát hành này, hãy xem bài đăng trên blog về Bản vá 2 của Android Studio Bumblebee.

7.1.1 (tháng 2 năm 2022)

Bản cập nhật nhỏ này tương ứng với việc phát hành Bản vá 1 của Android Studio Bumblebee.

Để đọc danh sách bản sửa lỗi có trong bản phát hành này, hãy xem bài đăng trên blog về Bản vá 1 của Android Studio Bumblebee.

Khả năng tương thích

Phiên bản tối thiểu Phiên bản mặc định
Gradle 7.2 7.2
Công cụ tạo SDK 30.0.3 30.0.3
NDK Không áp dụng 21.4.7075529
JDK 11 11

Tác vụ phân tích tìm lỗi mã nguồn hiện đã lưu được vào bộ nhớ đệm

AndroidLintAnalysisTask hiện đã tương thích với bộ nhớ đệm bản dựng Gradle. Nếu bạn bật bộ nhớ đệm bản dựng bằng cách thiết lập org.gradle.caching=true trong tệp gradle.properties, thì tác vụ phân tích tìm lỗi mã nguồn sẽ nhận được kết quả của bộ nhớ đệm bản dựng ngay khi có thể.

Tác vụ phân tích tìm lỗi mã nguồn thường là nút thắt cổ chai lớn nhất khi chạy tìm lỗi mã nguồn bằng trình bổ trợ Android cho Gradle. Vì vậy, việc bật bộ nhớ đệm bản dựng sẽ giúp cải thiện tốc độ bản dựng khi chạy tìm lỗi mã nguồn trong nhiều trường hợp. Hiệu suất sẽ cải thiện đáng kể. Ví dụ: nếu có một dự án nhiều mô-đun và cần dọn sạch thư mục bản dựng trước khi chạy tìm lỗi mã nguồn trên máy chủ CI.

Giờ đây các mô-đun C/C++ có thể tham chiếu đến các mô-đun C/C++ khác trong cùng dự án

Giờ đây, mô-đun Android trên Gradle có mã C/C++ có thể được thiết lập để tham chiếu đến các tệp tiêu đề và mã thư viện trong một mô-đun Gradle khác. Giao thức Prefab được dùng để giao tiếp tiêu đề và thư viện giữa các mô-đun Gradle.

Yêu cầu

  • Mô-đun consuming (sử dụng) phải là CMake chứ không phải ndk-build. Việc hỗ trợ tạo bản dựng ndk- sẽ yêu cầu cập nhật NDK trong tương lai. Mô-đun publishing (phát hành) có thể là CMake hoặc ndk-build.

  • Mô-đun consuming (sử dụng) phải bật prefab trong tệp build.gradle.

android {
  buildFeatures {
    prefab true
  }
}
  • Mô-đun publishing (phát hành) phải bật prefabPublishing trong tệp build.gradle.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • Mô-đun consuming (sử dụng) phải tham chiếu đến mô-đun publishing (publishing) bằng cách bổ sung một dòng vào tệp build.gradle của khối dependencies. Ví dụ:
dependencies {
  implementation project(':mylibrary')
}
  • Mô-đun publishing (phát hành) phải khái báo một gói bằng mục prefab. Ví dụ:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • Tệp CMakeLists.txt của mô-đun sử dụng có thể dùng find_package() để tìm gói do mô-đun sản xuất phát hành. Ví dụ:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

Để hiểu thêm về cách dùng AGP để định cấu hình cho người tiêu dùng và nhà sản xuất AAR gốc, hãy xem Các phần phụ thuộc gốc với AGP.

Cài đặt kho lưu trữ trong tệp settings.gradle

Khi một dự án mới được tạo trong Android Studio Bumblebee, tệp build.gradle cấp cao nhất sẽ chứa khối plugins, theo sau là mã để dọn dẹp thư mục bản dựng:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

Chế độ cài đặt kho lưu trữ trước đây nằm trong tệp build.gradle cấp cao nhất giờ đây nằm trong tệp settings.gradle:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

Tệp build.gradle cấp mô-đun chưa thay đổi. Vì vậy, hãy sử dụng tệp build.gradle cấp cao nhất và tệp settings.gradle để xác định cấu hình bản dựng áp dụng cho tất cả mô-đun trong dự án hoặc kho lưu trữ và phần phụ thuộc áp dụng cho Gradle; sử dụng tệp build.gradle cấp mô-đun để xác định cấu hình bản dựng dành riêng cho một mô-đun cụ thể trong dự án.

Cải thiện trình thu gọn tài nguyên

Android Studio Bumblebee có sẵn một trình thu gọn tài nguyên được cải tiến giúp giảm kích thước ứng dụng.

Hỗ trợ ứng dụng có tính năng động

Phương thức triển khai mặc định của trình thu gọn tài nguyên Android đã được cập nhật trong Trình bổ trợ Android cho Gradle 7.1.0-alpha09. Cách triển khai mới hỗ trợ việc thu nhỏ ứng dụng có các tính năng động.

Thử nghiệm việc tăng mức độ giảm kích thước ứng dụng

Bằng cách chỉnh sửa bảng tài nguyên để loại bỏ các giá trị không dùng đến và các tham chiếu đến các tệp không dùng đến, việc triển khai trình thu gọn tài nguyên mới có thể làm giảm kích thước của ứng dụng vốn đã được thu gọn hơn nữa. Trình khám phá tài nguyên mới có thể xoá hoàn toàn các tài nguyên tệp không dùng đến, giúp giảm kích thước ứng dụng hơn nữa. Theo mặc định, chế độ này chưa được bật, nhưng bạn có thể chủ động dùng thử bằng cách thêm tuỳ chọn thử nghiệm android.experimental.enableNewResourceShrinker.preciseShrinking=true vào tệp gradle.properties của dự án.

Vui lòng báo cáo mọi vấn đề bạn phát hiện được với trình thu gọn tài nguyên hoặc cờ thử nghiệm mới. Để giúp chẩn đoán các vấn đề hoặc sử dụng dưới dạng giải pháp tạm thời, bạn có thể chuyển về phương thức triển khai trước đó bằng cách thêm android.enableNewResourceShrinker=false vào gradle.properties của dự án. Trình thu gọn mới sẽ thay thế các tệp tài nguyên không dùng đến bằng các tệp tối thiểu, khác một chút so với trình thu gọn tài nguyên trước đó. Tuy nhiên, thao tác này có thể sẽ không ảnh hưởng đến thời gian chạy.

Quy trình triển khai cũ được lên lịch loại bỏ trong trình bổ trợ Android cho Gradle 8.0.0.

Phát hành biến thể xây dựng

Trình bổ trợ Android cho Gradle 7.1.0 trở lên cho phép bạn định cấu hình biến thể xây dựng nào để phát hành lên một kho lưu trữ Apache Maven. AGP sẽ tạo một thành phần bằng một hoặc nhiều biến thể xây dựng dựa trên DSL phát hành mới. Bạn có thể sử dụng thành phần này để tuỳ chỉnh ấn bản vào kho lưu trữ Maven. So với các phiên bản trước, điều này cũng giúp bạn tránh các thao tác không cần thiết vì theo mặc định, sẽ không có thành phần nào được tạo. Để tìm hiểu thêm, hãy xem nội dung phát hành mã mẫu.

Phát hành tệp JAR Javadoc

AGP 7.1.0 trở lên cho phép bạn tạo Javadoc từ Java và Kotlin, đồng thời phát hành các tệp JAR Javadoc ngoài tệp Android Archive (AAR) cho dự án thư viện. Javadoc được bổ sung vào tệp POM và tệp Siêu dữ liệu mô-đun Gradle. Bật tính năng này bằng cách bổ sung withJavadocJar() trong khối phát hành singleVariant hoặc multipleVariants. Để tìm hiểu thêm, hãy xem tuỳ chọn phát hành mã mẫu.

Phát hành tệp JAR nguồn

AGP 7.1.0 trở lên cho phép bạn phát hành các tệp JAR từ Java và Kotlin ngoài các tệp AAR cho các dự án thư viện. Các nguồn này được bổ sung vào tệp POM và tệp Siêu dữ liệu mô-đun Gradle. Bạn có thể bật tính năng này bằng cách thêm withSourcesJar() trong khối phát hành singleVariant hoặc multipleVariants. Để tìm hiểu thêm, hãy xem tuỳ chọn phát hành mã mẫu.

Thay đổi ngữ nghĩa của khối tìm lỗi mã nguồn

Tất cả phương pháp tìm lỗi mã nguồn mà ghi đè mức độ nghiêm trọng có sẵn của một vấn đề – enable, disable/ignore, informational, warning, error, fatal — nay đã tuân theo thứ tự cấu hình. Ví dụ: giờ đây thao tác thiết lập một vấn đề nghiêm trọng trong finalizeDsl() sẽ ghi đè thao tác vô hiệu hoá vấn đề này trong DSL chính. Để biết thêm thông tin, hãy xem tài liệu tham khảo về quy tắc khối lint{} cũng như quy trình tạo bản dựng và điểm mở rộng dành cho Android.

Các API AGP mà plugin Navigation Safe Args cho Gradle phụ thuộc vào đã bị loại bỏ. AGP 7.1 không hoạt động được trên Navigation Safe Args phiên bản 2.4.0-rc1 hoặc 2.4.0, nhưng sẽ hoạt động được trên phiên bản 2.5.0-alpha01 và 2.4.1. Trong thời gian chờ đợi, bạn có thể sử dụng AGP 7.1 với bản dựng của Navigation Safe Args, Navigation 2.5.0-SNAPSHOT để giải quyết vấn đề này. Để sử dụng bản dựng tổng quan nhanh (snapshot), hãy làm theo hướng dẫn về tổng quan nhanh với mã bản dựng #8054565.

Ngoài ra, Navigation Safe Args phiên bản 2.4.1 và 2.5.0 sẽ không còn hoạt động được với AGP 4.2; để sử dụng các phiên bản Safe Args đó, bạn phải sử dụng AGP 7.0 trở lên.

Vô hiệu hoá chế độ tạo thành phần tự động

Kể từ AGP 8.0, theo mặc định tính năng tạo thành phần tự động sẽ được vô hiệu hoá. Hiện tại, AGP 7.1 sẽ tự động tạo một thành phần cho mỗi biến thể bản dựng (thành phần này cùng tên với biến thể bản dựng), và một thành phần all chứa mọi biến thể bản dựng. Tính năng tạo thành phần tự động này sẽ bị vô hiệu hoá. Để chuyển sang hành vi mới, bạn nên vô hiệu hoá tính năng tạo thành phần tự động bằng cách đặt android.disableAutomaticComponentCreation thành true.. Để biết thêm thông tin, hãy xem Sử dụng trình bổ trợ Maven Publish.

Khả năng tương thích với tính năng Giám sát hiệu suất Firebase

AGP 7.1 không tương thích với trình bổ trợ Giám sát hiệu suất Firebase cho Gradle phiên bản 1.4.0 trở xuống. Trợ lý nâng cấp AGP sẽ không tự động cập nhật trình bổ trợ lên phiên bản 1.4.1. Vì vậy, nếu đang sử dụng firebase-perf và muốn nâng cấp AGP lên 7.1, bạn cần nâng cấp lên phiên bản cụ thể này theo cách thủ công.

Vấn đề đã biết

Phần này mô tả các vấn đề đã biết còn tồn tại trong trình bổ trợ Android cho Gradle 7.1.0.

Vấn đề khi kiểm thử đơn vị một dự án ứng dụng có sử dụng trình bổ trợ Hilt

Classpath kiểm thử đơn vị chứa các lớp ứng dụng không được đo lường, nghĩa là Hilt không đo lường lớp ứng dụng để xử lý quá trình chèn phần phụ thuộc khi chạy kiểm thử đơn vị.

Sự cố này sẽ được khắc phục trong bản phát hành 7.1.1, hãy xem nội dung vấn đề #213534628.