gpt4 book ai didi

android - 如何解决多个 D8 警告 : was not found, 它是 default 或静态接口(interface)方法 desugaring 所必需的?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:26:39 40 4
gpt4 key购买 nike

将 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 源兼容性 (lambdas),看起来警告来自 Android gradle 类 dexer,它已在 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. 让警告消失的唯一方法是在 build 中将 minifyEnableduseProguard 设置为 false .gradle 文件

  3. 我尝试了 AGP 3.3.0-alpha13 和新的 AGP 3.2.1,但没有成功。

您可以使用来自 https://github.com/mdawid/D8WarningTest 的示例项目克隆存储库

最佳答案

更新:该问题已在 Android Gradle Plugin 3.5.0-beta05 中修复(参见问题:Ability to selectively suppress warnings during D8 desugaring)。


对于 Android Gradle 插件 3.2.1 - 3.4.1,请使用以下解决方法:

来自 Android Gradle 插件 3.2.1 changelog :

Desugaring with D8 is now enabled by default.

所以你应该禁用 D8 的脱糖(在项目的 gradle.properties 文件中):

android.enableD8.desugaring=false

如果您使用 R8:

R8 is a new tool for code shrinking and obfuscation that replaces ProGuard. You can start using the preview version of R8 by including the following in your project’s gradle.properties file:

android.enableR8 = true

禁用 R8 脱糖(在项目的 gradle.properties 文件中):

android.enableR8.desugaring=false

关于android - 如何解决多个 D8 警告 : <Class X> was not found, 它是 default 或静态接口(interface)方法 desugaring <Class Y> 所必需的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52783212/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com