如何解决D8警告:未找到org.conscrypt.Conscrypt类型?
解决OkHttp 3.10.0引发的D8未找到
org.conscrypt.Conscrypt警告 这问题我之前帮不少开发者排查过,本质是OkHttp 3.10.0版本在内部会尝试使用Conscrypt作为安全提供者,但你的项目里没引入这个依赖,或者脱糖配置没跟上导致的。给你几个靠谱的解决办法,按优先级排序:
1. 直接引入Conscrypt依赖
最直接的方式就是把Conscrypt库添加到项目里,让OkHttp能找到对应的类。在你的Module级别build.gradle中添加以下依赖:
implementation 'org.conscrypt:conscrypt-android:2.5.2'
Conscrypt是Google维护的开源安全库,不仅能解决这个警告,还能提升网络请求的安全性和兼容性,推荐使用这个方案。
2. 升级OkHttp到较新版本
OkHttp从3.12版本开始,已经把Conscrypt的依赖改成了可选的,不会再强制依赖它。如果你不需要Conscrypt的特性,直接升级OkHttp到稳定版就能解决问题。比如升级到3.x的最后一个稳定版,或者直接跳转到4.x系列:
// 3.x稳定版 implementation 'com.squareup.okhttp3:okhttp:3.12.13' // 或者4.x最新稳定版(需要Java 8+支持) implementation 'com.squareup.okhttp3:okhttp:4.11.0'
升级还能顺便修复旧版本的bug,获得一些新特性,一举两得。
3. 临时屏蔽警告(不推荐长期使用)
如果暂时不想调整依赖或升级,可以让D8忽略这个警告。在项目根目录的gradle.properties中添加:
android.d8.failOnError=false
或者在Module的build.gradle里配置:
android { compileOptions { // 如果开启了脱糖,确保已经添加了脱糖依赖 coreLibraryDesugaringEnabled true coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' } d8 { ignoreWarnings true } }
注意:这个方案只是掩盖问题,没有从根本上解决依赖缺失的问题,长期来看还是前两个方案更稳妥。
内容的提问来源于stack exchange,提问作者smoothdvd
相关产品推荐
相关产品推荐

