Как разрешить несколько предупреждений D8:не найден, требуется для десагеринга методов по умолчанию или статического интерфейса? - PullRequest
0 голосов
/ 12 октября 2018

После обновления до Android Gradle Plugin с 3.1.4 до 3.2.x я получаю несколько предупреждений, таких как:

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()`
...

Проект использует совместимость с исходным кодом Java 1.8 (лямбда-выражения) и выглядит как предупрежденияпришло от dexer класса gradle для Android, который был включен по умолчанию в AGP 3.2.0.

  1. Я пытался подавить эти предупреждения в proguard-rules.pro следующими строками, но ничегопохоже, работает.

    -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.**
    
  2. Единственный способ заставить предупреждения исчезнуть - это установить minifyEnabled и useProguard в false в файле build.gradle

  3. Я пробовал AGP 3.3.0-alpha13 и новый AGP 3.2.1, но безуспешно.

Вы можете клонировать репозиторий с помощьюпример проекта от https://github.com/mdawid/D8WarningTest

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Я думаю, это потому, что этот класс написан на Java8, но проект скомпилирован на Java7.Так я обновляю следующее:

compileOptions {
     sourceCompatibility JavaVersion.VERSION_1_8
     targetCompatibility JavaVersion.VERSION_1_8
 }

это решает мою проблему

0 голосов
/ 06 ноября 2018

Обновление : проблема была исправлена ​​в плагине Android Gradle 3.5.0-beta05 (см. Проблему: Возможность выборочного подавления предупреждений во время отладки D8 ).


Для плагинов Android Gradle 3.2.1 - 3.4.1 используйте следующие обходные пути:

Из плагина Android Gradle 3.2.1 changelog :

Обеззараживание с помощью D8 теперь включено по умолчанию.

Поэтому вам следует отключить обесцвечивание с помощью D8 (в файле gradle.properties проекта):

android.enableD8.desugaring=false

Если вы используете R8:

R8 - это новый инструмент для сжатия и запутывания кода, который заменяет ProGuard.Вы можете начать использовать предварительную версию R8, включив в файл gradle.properties вашего проекта следующее:

android.enableR8 = true

отключить десагеринг с R8 (в файле gradle.properties проекта):

android.enableR8.desugaring=false
...