web-dev-qa-db-ja.com

複数のD8警告を解決する方法:<Class X>が見つかりませんでした。<Class Y>をデ糖化するデフォルトまたは静的インターフェイスメソッドに必要ですか?

Android Gradleプラグインを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ソース互換性(ラムダ)を使用しており、Android 3.2でデフォルトで有効になっているAGP gradleクラスdexerからの警告のようです.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. 消える警告を作成できる唯一の方法は、build.gradleファイルでminifyEnabledおよびuseProguardfalseに設定することです

  3. AGP 3.3.0-alpha13と新しいAGP 3.2.1を試しましたが、成功しませんでした。

https://github.com/mdawid/D8WarningTestからサンプルプロジェクトでリポジトリをクローンできます

13
mdev

Update:この問題はAndroid Gradle Plugin 3.5.0-beta05(問題を参照: D8脱糖中の警告を選択的に抑制する機能 )。


Android Gradle Plugins 3.2.1-3.4.1では、次の回避策を使用します。

From Android Gradle plugin .2.1 changelog

D8での脱糖がデフォルトで有効になりました。

そのため、(プロジェクトのgradle.propertiesファイル内の)D8での脱糖を無効にする必要があります。

Android.enableD8.desugaring=false

R8を使用する場合:

R8は、ProGuardに代わるコードの縮小と難読化のための新しいツールです。プロジェクトのgradle.propertiesファイルに以下を含めることにより、R8のプレビューバージョンの使用を開始できます。

Android.enableR8 = true

(プロジェクトのgradle.propertiesファイル内の)R8での脱糖を無効にします:

Android.enableR8.desugaring=false
9
kuelye

これは、このクラスがJava8で記述されているが、プロジェクトがJava7。でコンパイルされているためだと思うので、以下を更新します。

compileOptions {
     sourceCompatibility JavaVersion.VERSION_1_8
     targetCompatibility JavaVersion.VERSION_1_8
 }

これは私の問題を修正します

0
王楠楠