You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级AGP 8.0.0与Kotlin 1.8.20后OkHttp3 R8混淆报错求助

解决AGP 8.0.0 + Kotlin 1.8.20下R8混淆时OkHttp可选依赖类缺失的问题

这个问题在升级AGP 8.x后很常见,本质是OkHttp的可选平台依赖类被R8误判为必须存在的依赖——OkHttp本身会在运行时检测这些类(BouncyCastle、Conscrypt、OpenJSSE等)是否存在,不存在就自动 fallback 到系统默认的SSL实现,所以这些类缺失不会导致运行时崩溃,只是R8的严格检查触发了报错。

下面是几种比直接加-keep更合理的解决方案:

1. 添加对应可选依赖的轻量实现

如果希望彻底消除R8的报错,可以按需添加这些可选依赖的官方轻量版本:

  • 针对BouncyCastle:
    implementation "org.bouncycastle:bcpkix-jdk15on:1.70"
    
  • 针对Conscrypt(仅当项目用到Conscrypt SSL时添加):
    implementation "org.conscrypt:conscrypt-android:2.5.2"
    
  • 针对OpenJSSE:
    implementation "org.openjsse:openjsse:1.1.13"
    
  • 针对SLF4J日志:如果不需要实际日志输出,添加nop实现即可:
    implementation "org.slf4j:slf4j-nop:1.7.36"
    

注意:不需要全加,只添加你项目可能用到的即可。

2. 用-dontwarn忽略可选依赖的警告

这是最轻便的方案,因为这些类本来就是可选的,运行时不会被调用,直接告诉R8忽略这些缺失类的警告即可,不会影响代码优化:
在proguard-rules.pro中添加:

-dontwarn org.bouncycastle.**
-dontwarn org.conscrypt.**
-dontwarn org.openjsse.**
-dontwarn org.slf4j.impl.**

这个方案比-keep更合理,因为不会额外保留无用代码,只是关闭不必要的检查。

3. 升级Ktor和OkHttp版本

Ktor 2.2.4依赖的OkHttp版本相对较旧,升级到更新的Ktor版本(比如2.3.0及以上),对应的OkHttp版本会同步升级到4.10.0+,这些新版本已经针对AGP 8.x的R8做了兼容性优化,自带的ProGuard规则会自动处理这些可选依赖的警告,无需手动配置。

比如升级Ktor客户端依赖:

implementation "io.ktor:ktor-client-android:2.3.5"

内容的提问来源于stack exchange,提问作者J. Hegg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:45:35