Guide de migration du SDK Android Driver 5.0

Ce guide décrit les modifications nécessaires à la migration vers la version 5.0.

Mises à jour de Gradle et des plug-ins Android Gradle

Mettre à niveau les versions de Gradle et du plug-in Android Gradle

Commencez par mettre à niveau les versions de Gradle et du plug-in Android Gradle. Cette mise à niveau inclut une meilleure compatibilité avec certaines dépendances de SDK ; (y compris Kotlin 1.9), ainsi que quelques corrections de bugs critiques.

Cette version majeure du SDK nécessite les dépendances de version suivantes pour votre Projet d'application Android:

  • une version de Gradle (version 7.5.0 ou ultérieure à la version 7.6.0) ;
  • Une version du plug-in Android Gradle (AGP) comprise dans la plage v7.4.x.

Vous pouvez cibler une version supérieure des plug-ins. vous pouvez exécuter en avertissements d'abandon, ou certaines nouvelles fonctionnalités risquent de ne pas fonctionner.

Pour modifier la version de Gradle, modifiez la ligne dans le fichier /gradle/wrapper/gradle-wrapper.properties fichier

distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip

Pour modifier la version du plug-in Android Gradle, modifiez le fichier build.gradle que contient le bloc buildscript. Exemple :

buildscript {
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.1'
    }
}

Migration de la prise en charge des bibliothèques Java 7 vers Java 8

Étape 1 : Activez la compatibilité avec la bibliothèque Java 8

Source

Étant donné que le niveau d'API minimal du SDK est 23 et que la version AGP requise est 7.4+, le est légèrement différente de la documentation source mentionnée.

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'
}

Étape 2 : Passez de ProGuard ou Dexguard à R8

R8, source

AGP 7.4 et versions ultérieures utilisent R8 comme outil de minification, d'obscurcissement et d'optimisation par défaut pour le binaire, aucune action spéciale n'est donc requise à ce stade.

Si le projet est migré à partir d'AGP 4.0 ou version ultérieure, l'AGP peut générer les avertissements suivants sur la suppression de fichiers:

  • Utilisation de useProguard true dans le fichier build.gradle
  • Utilisation de android.enableR8=false dans le fichier gradle.properties

Supprimer ces lignes résout généralement ces problèmes.

Migration de Kotlin 1.6 vers Kotlin 1.6

Étape 1 : Migrer vers le plug-in Kotlin Gradle 1.9.0

Source

Mettre à jour la version du plug-in Kotlin Gradle dans le module de premier niveau de votre application build.gradle. Veillez à ajouter org.jetbrains.kotlin:kotlin-gradle-plugin dans les dépendances du bloc buildscript en cas de défaut.

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

Vous devez migrer votre application à partir de synthétiques Kotlin au cas où à partir du plug-in Kotlin Gradle 1.6.X ou 1.7.X. Consultez la documentation officielle sur la migration guide des plus d'informations.

Étape 2 : Mettez à niveau kotlin-stdlib vers la version 1.9.0

Source

Mettez à niveau kotlin-stblib vers la version 1.9.0 dans le fichier build.gradle de votre application.

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}

Veillez à supprimer toute référence à kotlin-stdlib-jdk7 ou kotlin-stdlib-jdk8 Les deux dépendances ont été consolidées dans kotlin-stdlib à partir de Kotlin 1.8.0.

Abandon de StatusListener

L'interface StatusListener est désormais obsolète (elle sera supprimée dans la version 6) au profit de sur DriverStatusListener.

Il y a principalement trois changements:

  1. Remplacez l'interface implements StatusListener par DriverStatusListener
  2. Ajoutez un paramètre cause Nullable à updateStatus.
  3. Appelez DriverContextBuilder.setDriverStatusListener au lieu de setStatusListener

DriverStatusListener partage la même structure que StatusListener. La principale la différence entre les deux est que DriverStatusListener.updateStatus() prend Paramètre supplémentaire nommé cause. Cela fournit aux utilisateurs des informations sur la cause d'une se mettent à jour avec le niveau d'état d'erreur.

En règle générale, vous devez utiliser cause pour récupérer le code d'erreur renvoyé par le parc. Moteur pour détecter les échecs de mise à jour de la position.

L'exemple suivant montre comment implémenter 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());

Voici un exemple d'implémentation de 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());

Implémenter DriverStatusListener en tant qu'interface fonctionnelle

DriverStatusListener est compatible avec les interfaces fonctionnelles Java, tout comme son prédécesseur. En voici un exemple:

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