小编joe*_*joe的帖子

如何防止 Gradle 将库的依赖版本更改为更高版本,因为另一个库需要它作为传递依赖项?

语境

我正在尝试使用网络插件将Flipper 调试工具包含到我的应用程序中。为了使它有用,我需要在我的 HTTP 模块中添加一个 Flipper Network 拦截器,它提供一个 OkHttp 客户端供我的应用程序使用。我只在调试配置中包含 Flipper 库。我在我的 http 模块中包含了 Flipper deps,如下所示:

dependencies {
[...]
    debugImplementation dep('com.facebook.flipper:flipper')
    debugImplementation dep('com.facebook.flipper:flipper-network-plugin')
}

Run Code Online (Sandbox Code Playgroud)

问题

我面临的问题是Flipper 传递依赖okhttp:3.14.1',并且我们的应用程序支持高达 API 级别 16 的客户端。现在的问题是,在 API 21 (Lolipop) 以下,我无法使用 3.12.x 以上的任何版本的 okhttp。

正因为如此,其他依赖OkHttp的东西,开始使用OkHttp8.12.x以上的版本,这使得HTTP的初始化中断。

11-08 13:48:28.394 E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.NoClassDefFoundError: java.util.Objects
        at okhttp3.CertificatePinner.withCertificateChainCleaner(CertificatePinner.java:231)
        at okhttp3.OkHttpClient.<init>(OkHttpClient.java:238)
        at okhttp3.OkHttpClient.<init>(OkHttpClient.java:202)
Run Code Online (Sandbox Code Playgroud)

查看依赖关系树,在我看来,因为 Flipper 需要 OkHttp 版本 3.14.1,所以我的应用程序中在调试配置中需要 OkHttp 客户端的其他部分也使用 3.14.1 而不是 3.12.3:

debugAndroidTest
[...]
+--- project :libs:http-retrofit
|    +--- project …
Run Code Online (Sandbox Code Playgroud)

android gradle okhttp

7
推荐指数
1
解决办法
2429
查看次数

标签 统计

android ×1

gradle ×1

okhttp ×1