Après la mise à niveau vers Android Gradle Plugin de 3.1.4 à 3.2.x, je reçois plusieurs avertissements tels que:
D8: Type `com.google.gson.reflect.TypeToken` was not found, it is required for default or static interface methods desugaring of `com.google.gson.reflect.TypeToken org.springframework.http.converter.json.GsonHttpMessageConverter.getTypeToken(Java.lang.reflect.Type)`
D8: Type `com.squareup.okhttp.MediaType` was not found, it is required for default or static interface methods desugaring of `com.squareup.okhttp.MediaType org.springframework.http.client.OkHttpClientHttpRequest.getContentType(org.springframework.http.HttpHeaders)`
D8: Type `org.Apache.http.impl.client.HttpClients` was not found, it is required for default or static interface methods desugaring of `void org.springframework.http.client.HttpComponentsClientHttpRequestFactory.<init>()`
D8: Interface `org.Apache.http.HttpEntity` not found. It's needed to make sure desugaring of `org.springframework.http.client.HttpComponentsStreamingClientHttpRequest$StreamingHttpEntity` is correct. Desugaring will assume that this interface has no default method.
D8: Type `org.conscrypt.Conscrypt` was not found, it is required for default or static interface methods desugaring of `okhttp3.internal.platform.Platform okhttp3.internal.platform.ConscryptPlatform.buildIfSupported()`
...
Le projet utilise la compatibilité source Java 1.8 (lambdas) et il semble que les avertissements proviennent du dexer de classe gradle Android qui a été activé par défaut dans AGP 3.2.0.
J'ai essayé de supprimer ces avertissements dans proguard-rules.pro
Avec les lignes suivantes, mais rien ne semble fonctionner.
-dontwarn com.google.gson.reflect.TypeToken
-keep class com.google.gson.reflect.TypeToken { *; }
-dontwarn org.Apache.http.**
-keep class com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**
-keep class org.springframework.http.client.** { *; }
-dontwarn org.springframework.http.client.**
La seule façon de faire disparaître les avertissements est de définir minifyEnabled
et useProguard
sur false
dans le fichier build.gradle
J'ai essayé AGP 3.3.0-alpha13 et le nouveau AGP 3.2.1 mais sans succès.
Vous pouvez cloner le référentiel avec un exemple de projet à partir de https://github.com/mdawid/D8WarningTest
Mise à jour : le problème a été corrigé dans Android Gradle Plugin 3.5.0-beta05 (voir problème: Possibilité de supprimer sélectivement les avertissements lors du désuchage D8 ).
Pour Android Gradle Plugins 3.2.1 - 3.4.1, utilisez les solutions de contournement suivantes:
De Android Plugin Gradle .2.1 changelog :
Le désuchage avec D8 est désormais activé par défaut.
Vous devez donc désactiver le désuchage avec D8 (dans le fichier gradle.properties
Du projet):
Android.enableD8.desugaring=false
Si vous utilisez R8:
R8 est un nouvel outil de réduction de code et d'obscurcissement qui remplace ProGuard. Vous pouvez commencer à utiliser la version d'aperçu de R8 en incluant les éléments suivants dans le fichier
gradle.properties
De votre projet:Android.enableR8 = true
désactiver le désuchage avec R8 (dans le fichier gradle.properties
du projet):
Android.enableR8.desugaring=false
Je pense que c'est parce que cette classe est écrite en Java8, mais le projet est compilé en Java7. donc je mets à jour ce qui suit:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
cela résout mon problème