本指南介绍了迁移到 5.0 版所需的更改。
Gradle 和 Android Gradle 插件更新
升级 Gradle 和 Android Gradle 插件版本
首先,升级 Gradle 和 Android Gradle 插件版本。此次升级包括与某些 SDK 依赖项(包括 Kotlin 1.9)的更好兼容性,以及一些重要的 bug 修复。
此 SDK 主要版本需要以下版本依赖项 Android 应用项目:
- Gradle 版本至少为 v7.5.0,但不高于 v7.6.0。
- Android Gradle 插件 (AGP) 版本在 v7.4.x 范围内。
您可以以更高版本的插件为目标;但您可以运行 或某些新功能可能无法正常使用。
要修改 Gradle 版本,请修改项目
/gradle/wrapper/gradle-wrapper.properties
个文件
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
如需修改 Android Gradle 插件版本,请修改 build.gradle
文件,
包含 buildscript
代码块。例如:
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
Java 7 到 Java 8 库支持迁移
第 1 步 - 启用 Java 8 库支持
由于 SDK 的最低 API 级别为 23,所需的 AGP 版本为 7.4 及更高版本,因此 配置与上述源文档略有不同。
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'
}
第 2 步 - 从 Proguard 或 Dexguard 迁移到 R8
AGP v7.4 及更高版本使用 R8 作为默认的缩减、混淆和优化工具 因此此时无需执行任何特殊操作。
如果项目是从 AGP 4.0 及更高版本迁移的,AGP 可能会针对文件移除发出以下警告:
build.gradle
文件中的useProguard true
使用情况gradle.properties
文件中的android.enableR8=false
用法
移除这些行通常可以解决这些问题。
从 Kotlin 1.6 迁移到 1.9
第 1 步 - 迁移到 Kotlin Gradle 插件 1.9.0
更新应用顶级模块 build.gradle 文件中的 Kotlin Gradle 插件版本。请务必添加 org.jetbrains.kotlin:kotlin-gradle-plugin
。
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
您必须从 Kotlin-synthetics 中迁移您的应用, 从 Kotlin Gradle Plugin 1.6.X 或 1.7.X 导入。请参阅官方迁移 请参阅 。
第 2 步 - 将 kotlin-stdlib 升级到 1.9.0
在应用的 build.gradle 文件中将 kotlin-stblib
升级到 1.9.0。
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
请务必移除对 kotlin-stdlib-jdk7
或
kotlin-stdlib-jdk8
。从 Kotlin 1.8.0 开始,这两个依赖项已合并到 kotlin-stdlib
中。
弃用 StatusListener
StatusListener
接口现已废弃(将于 v6 中移除),取而代之的是
共 DriverStatusListener
个。
主要有 3 项更改:
- 将
implements
接口从StatusListener
更改为DriverStatusListener
。 - 向
updateStatus
添加Nullable
cause
参数。 - 调用
DriverContextBuilder.setDriverStatusListener
,而不是setStatusListener
。
DriverStatusListener
与 StatusListener
采用相同的结构。它们之间的主要区别在于,DriverStatusListener.updateStatus()
接受一个名为 cause
的额外参数。这让用户可以深入了解更新出现错误状态级别的原因。
通常,您可以使用 cause
检索 Fleet Engine 针对位置信息更新失败而返回的错误代码。
以下示例说明了如何实现 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());
下面展示了一个示例 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());
将 DriverStatusListener
实现为功能接口
DriverStatusListener
与其前身一样支持 Java 函数接口。示例如下:
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.
}
}
});