生成签名APK时app:minifyReleaseWithR8失败,缺失Conscrypt类求助
R8编译缺失org.conscrypt类问题解决方案
问题原因
OkHttp的ConscryptPlatform在编译阶段尝试调用Conscrypt加密库的类,但项目未引入该依赖,或R8混淆时误将相关类移除,导致编译失败。
解决方法
方法一:引入Conscrypt依赖
在app模块的build.gradle(或build.gradle.kts)的dependencies块中添加Conscrypt依赖:
// Groovy语法 implementation 'org.conscrypt:conscrypt-android:2.5.2' // Kotlin DSL语法 implementation("org.conscrypt:conscrypt-android:2.5.2")
同步项目后重新生成签名Bundle/APK即可。
方法二:添加R8保留规则
若无需引入Conscrypt库,可通过保留规则阻止R8处理相关类:
- 打开项目中的
app/proguard-rules.pro文件 - 添加以下规则:
-dontwarn org.conscrypt.** -keep class org.conscrypt.** { *; }
也可直接将报错提示路径D:\AndroidStudioProjects\W-Android\app\build\outputs\mapping\release\missing_rules.txt中的内容复制到proguard-rules.pro中。
方法三:指定OkHttp使用其他平台实现
通过配置OkHttpClient,强制其使用Android内置的平台实现,避开Conscrypt相关逻辑:
// Java OkHttpClient client = new OkHttpClient.Builder() .platform(new okhttp3.internal.platform.AndroidPlatform()) .build();
// Kotlin val client = OkHttpClient.Builder() .platform(okhttp3.internal.platform.AndroidPlatform()) .build()
内容的提问来源于stack exchange,提问作者Pinkdia Banth
相关产品推荐
相关产品推荐

