Trình bổ trợ Android cho Gradle 4.1.0 (tháng 8 năm 2020)

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

Phiên bản tối thiểu Phiên bản mặc định Lưu ý
Gradle 6,5 Không áp dụng Để tìm hiểu thêm, hãy xem phần cập nhật Gradle.
Công cụ tạo SDK 29.0.2 29.0.2 Cài đặt hoặc định cấu hình Công cụ tạo SDK.
NDK Không áp dụng 21.1.6352462 Cài đặt hoặc định cấu hình phiên bản khác của NDK.

<p>This version of the Android plugin requires the following:</p>
<ul>
  <li>
    <p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
    To learn more, read the section about <a href="#updating-gradle">updating
    Gradle</a>.</p>
  </li>
  <li>
    <p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
    29.0.2</a> or higher.</p>
  </li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>

Tính năng mới

Phiên bản trình bổ trợ Android cho Gradle này có các tính năng mới sau đây.

Hỗ trợ DSL tập lệnh Kotlin

Để giúp cải thiện trải nghiệm chỉnh sửa cho người dùng tập lệnh buildscript Kotlin, DSL và API của trình bổ trợ Android cho Gradle 4.1 hiện được xác định trong một tập hợp các giao diện Kotlin tách biệt với các lớp triển khai. Điều này có nghĩa là:

  • Giờ đây, tính chất rỗng và khả năng biến đổi được khai báo rõ ràng trên các loại Kotlin.
  • Tài liệu tạo từ các giao diện đó được phát hành trong Tài liệu tham khảo về API Kotlin.
  • Giao diện API của trình bổ trợ Android cho Gradle được xác định rõ ràng để giúp giảm rắc rối trong việc mở rộng bản dựng Android trong tương lai.

Lưu ý quan trọng: Nếu bạn đã sử dụng các tập lệnh bản dựng của KTS hoặc sử dụng mã Kotlin trong buildSrc, thì thao tác này có thể huỷ khả năng tương thích nguồn đối với một số lỗi có thể đã được kê khai dưới dạng lỗi thời gian chạy trong các bản phát hành trước.

Các kiểu tập hợp được thiết kế để thay đổi trong DSL hiện được xác định thống nhất như sau:

val collection: MutableCollectionType

Điều này có nghĩa là bạn không thể viết các lệnh sau trong tập lệnh Kotlin đối với một số tập hợp từng hỗ trợ các lệnh này:

collection = collectionTypeOf(...)

Tuy nhiên, việc thay đổi tập hợp được hỗ trợ thống nhất nên collection += …collection.add(...) hiện sẽ hoạt động ở mọi nơi.

Nếu bạn phát hiện vấn đề khi nâng cấp một dự án sử dụng API và DSL Kotlin của trình bổ trợ Android cho Gradle, vui lòng báo cáo lỗi.

Xuất phần phụ thuộc C/C++ qua tệp AAR (đề xuất được tự động áp dụng)

Trình bổ trợ Android cho Gradle 4.0 bổ sung khả năng nhập các gói Profab trong các phần phụ thuộc AAR. Trong AGP 4.1, hiện bạn có thể xuất các thư viện từ hệ thống bản dựng gốc bên ngoài trong tệp AAR cho dự án Thư viện Android.

Để xuất các thư viện gốc, hãy thêm đoạn mã sau vào khối android của tệp build.gradle trong dự án thư viện:

buildFeatures {
    prefabPublishing true
}

prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }

<var>myotherlibrary</var> {
    headers "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

buildFeatures {
    prefabPublishing = true
}

prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }

create("<var>myotherlibrary</var>") {
    headers = "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

Trong ví dụ này, thư viện mylibrarymyotherlibrary từ bản dựng ndk-build hoặc bản dựng gốc CMake bên ngoài sẽ được đóng gói trong AAR do bản dựng của bạn tạo ra. Đồng thời, mỗi thư viện sẽ xuất các tiêu đề từ thư mục được chỉ định đến các phần phụ thuộc.

Lưu ý: Đối với người dùng trình bổ trợ Android cho Gradle 4.0 trở lên, các chế độ cài đặt cấu hình để nhập các thư viện gốc tạo sẵn đã thay đổi. Để biết thêm thông tin, hãy xem Ghi chú phát hành 4.0.

Hỗ trợ R8 cho siêu dữ liệu Kotlin

Kotlin sử dụng các siêu dữ liệu tuỳ chỉnh trong các tệp lớp Java để xác định cấu trúc ngôn ngữ Kotlin. R8 hiện hỗ trợ duy trì và ghi lại siêu dữ liệu Kotlin để hỗ trợ đầy đủ việc thu gọn các thư viện và ứng dụng Kotlin bằng kotlin-reflect.

Để lưu trữ siêu dữ liệu Kotlin, hãy thêm những quy tắc lưu trữ sau:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

Thao tác này sẽ hướng dẫn R8 lưu trữ siêu dữ liệu Kotlin cho mọi lớp được lưu trữ trực tiếp.

Để biết thêm thông tin, hãy xem phần Thu gọn các thư viện và ứng dụng Kotlin bằng phương thức phản chiếu Kotlin trong R8{:.external} trên Medium.

Nhận định trong bản gỡ lỗi

Khi bạn xây dựng phiên bản gỡ lỗi cho ứng dụng bằng cách sử dụng trình bổ trợ Android cho Gradle 4.1.0 trở lên, trình biên dịch tích hợp (D8) sẽ ghi lại mã ứng dụng để bật tính năng nhận định tại thời điểm biên dịch. Nhờ đó, tính năng kiểm tra nhận định của bạn sẽ luôn bật.

Thay đổi về hành vi

Xoá bộ nhớ đệm bản dựng trình bổ trợ Android cho Gradle

Bộ nhớ đệm bản dựng AGP đã bị xoá trong AGP 4.1. Ra mắt trong AGP 2.3 trước đây để bổ sung cho bộ nhớ đệm bản dựng Gradle, bộ nhớ đệm bản dựng AGP đã được thay thế hoàn toàn bằng bộ nhớ đệm bản dựng Gradle trong AGP 4.1. Thay đổi này không ảnh hưởng đến thời gian tạo bản dựng.

Tác vụ cleanBuildCache cũng như các thuộc tính android.enableBuildCacheandroid.buildCacheDir bị ngừng sử dụng và sẽ bị xoá trong AGP 7.0. Thuộc tính android.enableBuildCache hiện không có hiệu lực, trong khi thuộc tính android.buildCacheDir và tác vụ cleanBuildCache sẽ hoạt động cho đến khi AGP 7.0 xoá tất cả nội dung bộ nhớ đệm bản dựng hiện có của AGP.

Giảm đáng kể kích thước ứng dụng sử dụng tính năng rút gọn mã

Kể từ bản phát hành này, các trường thuộc lớp R không còn được lưu giữ theo mặc định. Điều này có thể giúp tiết kiệm đáng kể kích thước tệp APK đối với những ứng dụng bật tính năng rút gọn mã. Hành động này sẽ không làm thay đổi hành vi trừ phi bạn truy cập vào các lớp R bằng phương thức phản chiếu. Trong trường hợp này, bạn cần bổ sung quy tắc lưu giữ cho các lớp R đó.

Đổi tên thuộc tính android.namespacedRClass thành android.nonTransitiveRClass

Cờ thử nghiệm android.namespacedRClass đã được đổi tên thành android.nonTransitiveRClass.

Được thiết lập trong tệp gradle.properties, cờ này sẽ bật không gian tên của từng lớp R trong thư viện để lớp R của thư mục chỉ chứa các tài nguyên được khai báo trong chính thư viện và không chứa tài nguyên từ các phần phụ thuộc của thư viện, từ đó giảm quy mô của lớp R cho thư viện.

DSL Kotlin: Đổi tên coreLibraryDesugaringEnabled

Chế độ biên dịch DSL Kotlin coreLibraryDesugaringEnabled đã được thay đổi thành isCoreLibraryDesugaringEnabled. Để biết thêm thông tin về cờ này, hãy xem phần Hỗ trợ đơn giản hoá API của Java 8+ (trình bổ trợ Android cho Gradle 4.0.0+).

Xoá thuộc tính phiên bản khỏi lớp BuildConfig trong các dự án thư viện

Chỉ trong các dự án thư viện, thuộc tính BuildConfig.VERSION_NAMEBuildConfig.VERSION_CODE đã bị xoá khỏi lớp BuildConfig được tạo vì các giá trị tĩnh này không phản ánh giá trị cuối cùng của mã và tên phiên bản ứng dụng, do đó gây hiểu lầm. Ngoài ra, các giá trị này bị loại bỏ trong quá trình hợp nhất tệp kê khai.

Trong một phiên bản tương lai của trình bổ trợ Android cho Gradle, các thuộc tính versionNameversionCode cũng sẽ bị xoá khỏi DSL cho thư viện. Hiện tại, không có cách tự động truy cập vào mã/tên phiên bản ứng dụng từ dự án phụ trong thư viện.

Không có gì thay đổi đối với các mô-đun ứng dụng. Bạn vẫn có thể gán giá trị choversionCodeversionName trong DSL. Những giá trị này sẽ truyền đến tệp kê khai của ứng dụng và các trường BuildConfig.

Thiết lập đường dẫn NDK

Bạn có thể thiết lập đường dẫn đến chế độ cài đặt NDK cục bộ bằng cách dùng thuộc tính android.ndkPath trong tệp build.gradle của mô-đun.


android {
  ndkPath "your-custom-ndk-path"
}

android {
  ndkPath = "your-custom-ndk-path"
}

Nếu bạn sử dụng thuộc tính này cùng vớithuộc tính android.ndkVersion, đường dẫn này phải chứa phiên bản NDK khớp với android.ndkVersion.

Thay đổi về hành vi kiểm thử đơn vị thư viện

Chúng tôi đã thay đổi hành vi cách thức biên dịch và chạy kiểm thử đơn vị thư viện. Kiểm thử đơn vị thư viện hiện được biên dịch và chạy trên các lớp biên dịch/thời gian chạy của chính thư viện, dẫn đến việc kiểm thử đơn vị tiêu thụ thư viện theo cách tương tự như các dự án phụ bên ngoài. Cấu hình này thường giúp kiểm thử tốt hơn.

Trong một số trường hợp, việc kiểm thử đơn vị thư viện sử dụng chức năng liên kết dữ liệu có thể gặp phải tình trạng lớp DataBindingComponent hoặc BR bị thiếu. Bạn cần chuyển các kiểm thử đó sang một kiểm thử đo lường trong dự án androidTest, vì việc biên dịch và chạy trên các lớp đó trong kiểm thử đơn vị có thể tạo đầu ra không chính xác.

Ngừng sử dụng trình bổ trợ Gradle io.fabric

Trình bổ trợ Gradle io.fabric đã bị ngừng sử dụng và không tương thích với phiên bản 4.1 của trình bổ trợ Android cho Gradle. Để biết thêm thông tin về SDK Fabric bị ngừng sử dụng và việc chuyển sang SDK Firebase Crashlytics, hãy xem nội dung Nâng cấp lên SDK Firebase Crashlytics.