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

ソース

アプリの最上位モジュールで Kotlin Gradle プラグインのバージョンを更新する 追加します。org.jetbrains.kotlin:kotlin-gradle-plugin を必ず追加してください buildscript ブロックの依存関係にあります。

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

今後の予定に備えて、Kotlin 合成からアプリを移行する必要があります。 Kotlin Gradle プラグイン 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 への参照または URL への参照は必ず削除してください。 kotlin-stdlib-jdk8。両方の依存関係が統合され、 kotlin-stdlibKotlin で開始) 1.8.0.

StatusListener のサポート終了

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

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

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

DriverStatusListenerStatusListener と同じ構造を共有します。主な 違いは、DriverStatusListener.updateStatus()cause という名前の追加パラメータを使用します。これにより、発生している事象の原因について エラー ステータス レベルで更新できます。

通常は、cause を使用して Fleet から返されるエラーコードを取得します。 エンジンで処理します。

次のサンプルは、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 は、 あります。次に例を示します。

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.
    }
  }
});