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
É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
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 fichierbuild.gradle
- Utilisation de
android.enableR8=false
dans le fichiergradle.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
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
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:
- Remplacez l'interface
implements
StatusListener
parDriverStatusListener
- Ajoutez un paramètre
cause
Nullable
àupdateStatus
. - Appelez
DriverContextBuilder.setDriverStatusListener
au lieu desetStatusListener
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.
}
}
});