首页 > 解决方案 > OkHttp3 类未找到异常但存在于 apk 的 dex 文件中

问题描述

我正在构建一个使用 okhttp 版本 3.10.0 的 android 库,它到目前为止工作。没有编译器问题,测试应用程序中的请求正常,一切都很好。一旦我想在另一个应用程序中包含构建的 aar 文件,我就会得到一个 ClassNotFoundException

Caused by: java.lang.ClassNotFoundException: Didn't find class "okhttp3.OkHttpClient" on path: DexPathList[...]

我已经尝试了我在网络上(在库项目和应用程序中)可以找到的任何 proguard 规则的所有可能组合,甚至禁用了 proguard 以确保它不是一些混淆或优化问题。

buildTypes {
    release {
        minifyEnabled false
        useProguard false
    }
    debug {
        minifyEnabled false
        useProguard false
    }
}

我还分析了android studio中构建的apk,并在apk的classes.dex文件的正确包中找到了我需要的类。所以我完全不知道什么会导致这个异常。

gradle 版本是 lib 中的 2.1.3 和应用程序中的 2.2.2。如果您需要更多信息,请告诉我,并提前致谢。

更新:将 OkHttp 包含为应用程序项目的单独依赖项就可以了。看起来类没有正确复制。它们以某种方式存在但无法使用/找到(这有意义吗?)。

标签: androidgradleproguardokhttp3dex

解决方案


尝试重新启用 proguard 并将此规则添加到proguard-rules.pro

-keep class okhttp3.** { *; }
-dontwarn okhttp3.**

告诉我如果得到另一个ClassNotFoundException


推荐阅读