Android Driver SDK 5.0 移行ガイド

このガイドでは、バージョン 5.0 に移行するために必要な変更について説明します。

Gradle と Android Gradle プラグインのアップデート

Gradle と Android Gradle プラグインのバージョンをアップグレードする

まず、Gradle と Android Gradle プラグインのバージョンをアップグレードします。このアップグレードには、特定の SDK 依存関係(Kotlin 1.9 など)との互換性の向上と、いくつかの重大なバグの修正が含まれています。

この SDK メジャー リリースでは、 Android アプリ プロジェクト:

  • Gradle バージョンが v7.5.0 以降、v7.6.0 以降であること。
  • v7.4.x の範囲の Android Gradle プラグイン(AGP)バージョン。

より高いバージョンのプラグインをターゲットにできます。ただし、 非推奨の警告が表示されるか、一部の新機能が動作しない可能性があります。

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 に移行する

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 ブロックの依存関係に

buildscript {
  dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
  }
}

Kotlin Gradle プラグイン 1.6.X または 1.7.X から移行する場合は、Kotlin-synthetics からアプリケーションを移行する必要があります。公式の移行に関するガイドを ガイド ご確認ください。

ステップ 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-jdk8Kotlin 1.8.0 以降、両方の依存関係は kotlin-stdlib に統合されています。

StatusListener の非推奨

StatusListener インターフェースのサポートは終了し、v6 で削除される予定です(v6 で削除される予定です)。 /DriverStatusListener

主な変更点は次の 3 つです。

  1. implements インターフェースを StatusListener から DriverStatusListener
  2. Nullable cause パラメータを updateStatus に追加します。
  3. setStatusListener ではなく DriverContextBuilder.setDriverStatusListener を呼び出します。

DriverStatusListenerStatusListener と同じ構造を共有します。主な 違いは、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.
    }
  }
});