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

OkHttp3类存在于APK的dex文件却抛出ClassNotFoundException求助

解决OkHttp类在AAR引入后找不到的问题

我之前也碰到过一模一样的类加载坑,结合你描述的细节——测试应用正常、APK里能找到类但运行时找不到、单独加依赖就好——核心问题几乎可以确定是依赖传递失效,下面给你几个针对性的解决方案:

1. 修正库的依赖声明方式

你的Android库的build.gradle里,OkHttp的依赖大概率用了implementation,这个关键字会把依赖限制在库内部,不会传递给引入它的宿主应用。你需要把它改成api,这样宿主应用在引入AAR时会自动拉取OkHttp依赖:

// 原来的写法(不会传递)
// implementation 'com.squareup.okhttp3:okhttp:3.10.0'

// 修改后的写法(支持依赖传递)
api 'com.squareup.okhttp3:okhttp:3.10.0'

改完后重新打包AAR,再引入宿主应用试试。

2. 强制宿主应用统一OkHttp版本

如果宿主应用里还有其他依赖库引入了不同版本的OkHttp,可能会导致类加载冲突(即使APK里有类,也可能因为版本不一致被类加载器拒绝)。你可以在宿主应用的build.gradle里添加版本强制规则:

configurations.all {
    resolutionStrategy.force 'com.squareup.okhttp3:okhttp:3.10.0'
}

这样不管其他依赖要求什么版本,都会统一用你库依赖的3.10.0版本。

3. 清理Gradle缓存并重建

有时候Gradle的缓存会残留旧的依赖配置,导致依赖传递异常。你可以:

  • 先删除库和宿主应用的build文件夹
  • 执行命令行清理:./gradlew clean assembleDebug(或者对应Release版本)
  • 重新打包AAR并导入宿主应用

4. 验证AAR的依赖清单

你可以把AAR文件解压,查看里面的pom.xml文件(如果是通过Maven规范打包的),确认里面是否包含了OkHttp的依赖条目。如果用api声明的话,这里应该会有对应的<dependency>节点,确保宿主应用能识别到这个依赖。

补充说明

AAR本身不会打包第三方依赖的代码,它只是记录依赖关系,让宿主应用去拉取对应的库。所以如果库用了implementation,宿主应用完全不知道需要OkHttp,自然运行时会找不到类——这也是为什么你单独给宿主应用加依赖就正常的原因。

内容的提问来源于stack exchange,提问作者dedda1994

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:07:16