本指南說明遷移至 5.0 版所需的變更。
Gradle 和 Android Gradle 外掛程式更新
升級 Gradle 和 Android Gradle 外掛程式版本
首先,請升級 Gradle 和 Android Gradle 外掛程式版本。這項升級可改善與特定 SDK 依附元件 (包括 Kotlin 1.9) 的相容性,並修正部分重要錯誤。
這個 SDK 主要版本需要下列 Android 應用程式專案版本依附元件:
- Gradle 版本至少為 7.5.0,但不得高於 7.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 外掛程式版本,請修改包含 buildscript
區塊的 build.gradle
檔案。例如:
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 7.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 外掛程式版本。請務必在 buildscript 區塊的依附元件中新增 org.jetbrains.kotlin:kotlin-gradle-plugin
,以免遺漏。
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
如果您是從 Kotlin Gradle 外掛程式 1.6.X 或 1.7.X 遷移,則必須從 Kotlin 合成物件遷移應用程式。詳情請參閱官方遷移指南。
步驟 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
。 - 將
Nullable
cause
參數新增至updateStatus
。 - 請呼叫
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.
}
}
});