Hướng dẫn này mô tả những thay đổi cần thiết để di chuyển sang phiên bản 5.0.
Các điểm cập nhật của Gradle và Trình bổ trợ Android cho Gradle
Nâng cấp phiên bản Gradle và Trình bổ trợ Android cho Gradle
Trước tiên, hãy nâng cấp phiên bản Gradle và Trình bổ trợ Android cho Gradle. Bản nâng cấp này giúp cải thiện khả năng tương thích với một số phần phụ thuộc SDK (bao gồm cả Kotlin 1.9), cũng như khắc phục một số lỗi nghiêm trọng.
Bản phát hành chính này của SDK yêu cầu các phần phụ thuộc phiên bản sau đây cho dự án ứng dụng Android:
- phiên bản Gradle tối thiểu là v7.5.0 nhưng không cao hơn v7.6.0.
- phiên bản Trình bổ trợ Android cho Gradle (AGP) trong phạm vi v7.4.x.
Bạn có thể nhắm đến phiên bản cao hơn của các trình bổ trợ; tuy nhiên, bạn có thể gặp phải cảnh báo ngừng sử dụng hoặc một số tính năng mới có thể không hoạt động.
Để sửa đổi phiên bản Gradle, hãy sửa đổi dòng trong tệp /gradle/wrapper/gradle-wrapper.properties của dự án
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
Để sửa đổi phiên bản Trình bổ trợ Android cho Gradle, hãy sửa đổi tệp build.gradle có chứa khối buildscript. Ví dụ:
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
Di chuyển tính năng hỗ trợ thư viện từ Java 7 sang Java 8
Bước 1 – Bật tính năng hỗ trợ thư viện Java 8
Vì cấp độ API tối thiểu của SDK là 23 và phiên bản AGP bắt buộc là 7.4 trở lên, nên cấu hình này hơi khác so với tài liệu nguồn đã đề cập.
buildscript {
repositories {
google()
mavenCentral()
jcenter()
maven {
url = uri("https://storage.googleapis.com/r8-releases/raw")
}
}
dependencies {
classpath 'com.android.tools:r8:8.0.46'
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
android {
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.0.3'
}
Bước 2 – Di chuyển từ Proguard hoặc Dexguard sang R8
AGP v7.4 trở lên sử dụng R8 làm công cụ mặc định để rút gọn, làm rối mã và tối ưu hoá tệp nhị phân, vì vậy, bạn không cần thực hiện hành động đặc biệt nào tại thời điểm này.
Nếu dự án được di chuyển từ AGP 4.0 trở lên, AGP có thể đưa ra cảnh báo sau đây về việc xoá tệp:
- việc sử dụng
useProguard truetrong tệpbuild.gradle - việc sử dụng
android.enableR8=falsetrong tệpgradle.properties
Việc xoá các dòng này thường giải quyết được những vấn đề đó.
Di chuyển từ Kotlin 1.6 sang 1.9
Bước 1 – Di chuyển sang Trình bổ trợ Kotlin cho Gradle 1.9.0
Cập nhật phiên bản Trình bổ trợ Kotlin cho Gradle trong tệp build.gradle của mô-đun cấp cao nhất của ứng dụng. Nhớ thêm org.jetbrains.kotlin:kotlin-gradle-plugin vào các phần phụ thuộc từ khối buildscript trong trường hợp bị thiếu.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Bạn phải di chuyển ứng dụng của mình từ Kotlin-synthetics trong trường hợp bạn đang sử dụng Trình bổ trợ Kotlin cho Gradle 1.6.X hoặc 1.7.X. Hãy tham khảo hướng dẫn di chuyển chính thức để biết thêm thông tin.
Bước 2 – Nâng cấp kotlin-stdlib lên 1.9.0
Nâng cấp kotlin-stblib lên 1.9.0 trong tệp build.gradle của ứng dụng.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
Nhớ xoá mọi tham chiếu đến kotlin-stdlib-jdk7 hoặc kotlin-stdlib-jdk8. Cả hai phần phụ thuộc đều đã được hợp nhất thành
kotlin-stdlib kể từ Kotlin
1.8.0.
Ngừng sử dụng StatusListener
Giao diện StatusListener hiện đã ngừng sử dụng (sẽ bị xoá trong phiên bản 6) và được thay bằng DriverStatusListener.
Có 3 thay đổi chính:
- Thay đổi giao diện
implementstừStatusListenerthànhDriverStatusListener. - Thêm tham số
NullablecausevàoupdateStatus. - Gọi
DriverContextBuilder.setDriverStatusListenerthay vìsetStatusListener.
DriverStatusListener có cùng cấu trúc với StatusListener. Điểm khác biệt chính giữa chúng là DriverStatusListener.updateStatus() có thêm một tham số có tên là cause. Điều này giúp người dùng hiểu rõ nguyên nhân của một bản cập nhật có cấp độ trạng thái lỗi.
Thông thường, bạn sẽ sử dụng cause để truy xuất mã lỗi do Fleet Engine trả về cho các bản cập nhật vị trí không thành công.
Ví dụ sau đây minh hoạ cách triển khai StatusListener:
class MyStatusListener implements StatusListener {
/** Called when background status is updated during actions such as location reporting. */
@Override
public void updateStatus(
StatusLevel statusLevel, StatusCode statusCode, String statusMsg) {
// Implementation
}
}
// Inject StatusListener into DriverContext.
DriverContextBuilder.setStatusListener(new MyStatusListener());
Sau đây là một ví dụ về cách triển khai DriverStatusListener:
class MyStatusListener implements DriverStatusListener {
/** Called when background status is updated during actions such as location reporting. */
@Override
public void updateStatus(
StatusLevel statusLevel, StatusCode statusCode, String statusMsg, @Nullable Throwable cause) {
// Existing implementation
if (cause != null && cause instanceof StatusRuntimeException) {
if (Status.NOT_FOUND.getCode().equals(cause.getStatus().getCode())) {
// NOT_FOUND gRPC exception thrown by Fleet Engine.
}
}
}
}
DriverContextBuilder.setStatusListener(new MyStatusListener());
Triển khai DriverStatusListener dưới dạng giao diện chức năng
DriverStatusListener hỗ trợ các giao diện chức năng Java giống như phiên bản tiền nhiệm. Dưới đây là một ví dụ về giao diện này:
DriverContextBuilder.setDriverStatusListener((statusLevel, statusCode, statusMsg, cause) -> {
if (cause != null && cause instanceof StatusRuntimeException) {
if (Status.NOT_FOUND.getCode().equals(cause.getStatus().getCode())) {
// NOT_FOUND gRPC exception thrown by Fleet Engine.
}
}
});