25

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 ソース互換性 (ラムダ) を使用しており、AGP 3.2.0 でデフォルトで有効になっている Android gradle クラス dexer から警告が発生したようです。

  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. 警告を消す唯一の方法は、ファイルに設定minifyEnableduseProguardてすることですfalsebuild.gradle

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

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

4

2 に答える 2

19

更新: この問題は Android Gradle プラグイン 3.5.0-beta05 で修正されました (問題を参照してください: D8 desugaring 中に警告を選択的に抑制する機能)。


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 に代わる、コードの圧縮と難読化のための新しいツールです。プロジェクトのgradle.propertiesファイルに以下を含めることで、R8 のプレビュー バージョンの使用を開始できます。

android.enableR8 = true

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

android.enableR8.desugaring=false
于 2018-11-05T22:30:07.980 に答える