Trình bổ trợ Android cho Gradle 4.2.0 (tháng 3 năm 2021)
Khả năng tương thích
Phiên bản tối thiểu | Phiên bản mặc định | Ghi chú | |
---|---|---|---|
Gradle | 6.7.1 | Không áp dụng | Để tìm hiểu thêm, hãy xem nội dung cập nhật Gradle. |
Công cụ tạo SDK | 30.0.2 | 30.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.4.7075529 | Cài đặt hoặc định cấu hình phiên bản khác của NDK. |
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.
Ngôn ngữ Java phiên bản 8 theo mặc định
Kể từ phiên bản 4.2, theo mặc định, AGP sẽ sử dụng ngôn ngữ Java cấp 8. Java 8 cung cấp quyền truy cập vào một số tính năng ngôn ngữ mới hơn, bao gồm biểu thức lambda, tham chiếu phương thức và phương thức giao diện tĩnh. Để biết danh sách đầy đủ các tính năng được hỗ trợ, hãy xem tài liệu về Java 8.
Để giữ lại hành vi cũ, hãy chỉ định Java 7 một cách rõ ràng trong tệp build.gradle.kts
hoặc build.gradle
ở cấp mô-đun:
// build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
// build.gradle.kts
android {
...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
Trình biên dịch tài nguyên JVM mới
Trình biên dịch tài nguyên JVM mới trong công cụ trình bổ trợ Android cho Gradle 4.2 thay thế các phần của trình biên dịch tài nguyên AAPT2, có thể cải thiện hiệu suất bản dựng, đặc biệt là trên máy Windows. Trình biên dịch tài nguyên JVM mới được bật theo mặc định.
Hỗ trợ ký bằng v3 và v4
Trình bổ trợ Android cho Gradle 4.2 hiện hỗ trợ các định dạng ký APK v3 và APK v4.
Để bật một hoặc cả hai định dạng này trong bản dựng, hãy thêm các thuộc tính sau vào tệp build.gradle
hoặc build.gradle.kts
ở cấp mô-đun:
// build.gradle
android {
...
signingConfigs {
config {
...
enableV3Signing true
enableV4Signing true
}
}
}
// build.gradle.kts
android {
...
signingConfigs {
config {
...
enableV3Signing = true
enableV4Signing = true
}
}
}
Tính năng ký APK v4 cho phép bạn nhanh chóng triển khai các tệp APK lớn bằng cách sử dụng quy trình cài đặt tệp APK tăng dần ADB trong Android 11. Cờ mới này đảm nhận bước ký APK trong quy trình triển khai.
Định cấu hình việc ký ứng dụng theo biến thể
Giờ đây, bạn có thể bật hoặc tắt tính năng ký ứng dụng trong trình bổ trợ Android cho Gradle cho mỗi biến thể.
Ví dụ này minh hoạ cách thiết lập tính năng ký ứng dụng cho mỗi biến thể bằng phương thức onVariants()
trong Kotlin hoặc Groovy:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})
Thuộc tính Gradle mới:
android.native.buildOutput
Để giảm tình trạng lộn xộn trong đầu ra của bản dựng, AGP 4.2 sẽ lọc thông báo từ các bản dựng gốc có sử dụng CMake và ndk-build
, theo mặc định, chỉ hiển thị đầu ra của trình biên dịch C/C++. Trước đây, một dòng đầu ra được tạo cho mỗi tệp được tạo, dẫn đến một lượng lớn thông báo thông tin.
Nếu bạn muốn xem toàn bộ kết quả gốc, hãy đặt thuộc tính Gradle mới android.native.buildOutput
thành verbose
.
Bạn có thể thiết lập thuộc tính này trong tệp gradle.properties
hoặc thông qua
dòng lệnh.
gradle.properties
android.native.buildOutput=verbose
Dòng lệnh
-Pandroid.native.buildOutput=verbose
Giá trị mặc định của thuộc tính này là quiet
.
Thay đổi hành vi các tệp gradle.properties
Kể từ AGP 4.2, bạn không thể ghi đè các thuộc tính Gradle qua các dự án phụ nữa. Nói cách khác, nếu bạn khai báo thuộc tính trong tệp gradle.properties
trong một dự án phụ thay vì dự án gốc, thì thuộc tính đó sẽ bị bỏ qua.
Ví dụ: trong các bản phát hành trước, AGP sẽ đọc các giá trị từ <var>projectDir</var>/gradle.properties
, <var>projectDir</var>/app/gradle.properties
, <var>projectDir</var>/library/gradle.properties
, v.v. Đối với các mô-đun ứng dụng, nếu có cùng một thuộc tính Gradle trong cả <var>projectDir</var>/gradle.properties
và <var>projectDir</var>/app/gradle.properties
, thì giá trị của <var>projectDir</var>/app/gradle.properties
sẽ được ưu tiên.
Trong AGP 4.2, hành vi này đã được thay đổi và AGP sẽ không tải giá trị từ gradle.properties
trong các dự án phụ (ví dụ:
<var>projectDir</var>/app/gradle.properties
). Thay đổi này phản ánh hành vi mới của Gradle và hỗ trợ việc lưu cấu hình vào bộ nhớ đệm
Để biết thêm thông tin về cách thiết lập giá trị trong tệp gradle.properties
, hãy xem tài liệu về Gradle.
Thay đổi về cấu hình và khả năng tương thích với Gradle
Khi chạy trong Android Studio, công cụ bản dựng Gradle sẽ sử dụng JDK đi kèm của Studio. Trong các bản phát hành trước, JDK 8 được đóng gói với Studio. Tuy nhiên, trong 4.2 thì lại là JDK 11. Khi sử dụng JDK 11 được đóng gói để chạy Gradle, điều này có thể dẫn đến một số điểm không tương thích hoặc ảnh hưởng đến hiệu suất của JVM do những thay đổi đối với bộ thu gom rác. Những vấn đề này được mô tả dưới đây.
Lưu ý: Mặc dù bạn nên chạy Gradle với JDK 11, nhưng bạn có thể thay đổi JDK dùng để chạy Gradle trong hộp thoại Project Structure (Cấu trúc dự án). Việc thay đổi chế độ cài đặt này sẽ chỉ thay đổi JDK dùng để chạy Gradle và sẽ không thay đổi JDK dùng để chạy chính Studio.
Khả năng tương thích của Studio với trình bổ trợ Android cho Gradle (AGP)
Android Studio 4.2 có thể mở các dự án sử dụng AGP 3.1 trở lên, miễn là AGP đang chạy Gradle 4.8.1 trở lên. Để biết thêm thông tin về khả năng tương thích với Gradle, hãy xem phần Cập nhật Gradle.
Tối ưu hoá bản dựng Gradle cho JDK 11
Bản cập nhật này của JDK 11 ảnh hưởng đến cấu hình mặc định của bộ thu gom rác JVM, vì JDK 8 sử dụng bộ thu gom rác song song, còn JDK 11 sử dụng bộ thu gom rác G1.
Để có thể cải thiện hiệu suất của bản dựng, bạn nên kiểm thử bản dựng Gradle bằng trình thu thập rác song song. Trong gradle.properties
, hãy thiết lập những mục sau:
org.gradle.jvmargs=-XX:+UseParallelGC
Nếu các tuỳ chọn khác đã được thiết lập trong trường này, hãy thêm tuỳ chọn mới:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
Để đo tốc độ bản dựng với nhiều cấu hình, hãy xem bài viết Phân tích tài nguyên bản dựng.
Tệp DEX không nén trong tệp APK khi minSdk
= 28 trở lên
Theo mặc định, AGP sẽ đóng gói các tệp DEX không nén trong APK khi minSdk
= 28 trở lên. Điều này làm tăng kích thước tệp APK, nhưng sẽ làm giảm kích thước cài đặt trên thiết bị và kích thước tải xuống gần như tương đương.
Để buộc AGP phải đóng gói các tệp DEX đã nén, bạn có thể thêm đoạn mã sau vào tệp build.gradle
:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
Sử dụng DSL để đóng gói thư viện gốc đã nén
Bạn nên đóng gói thư viện gốc ở dạng không nén, vì điều này sẽ giúp kích thước cài đặt ứng dụng nhỏ hơn, kích thước tải ứng dụng xuống nhỏ hơn và thời gian tải ứng dụng nhanh hơn cho người dùng. Tuy nhiên, nếu bạn muốn trình bổ trợ Android cho Gradle đóng gói các thư viện gốc được nén khi tạo ứng dụng, hãy đặt useLegacyPackaging
thành true
trong tệp build.gradle
của ứng dụng:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Cờ useLegacyPackaging
thay thế thuộc tính tệp kê khai extractNativeLibs
. Để biết thêm thông tin cơ bản, hãy xem ghi chú phát hành Thư viện gốc đóng gói không nén theo mặc định.