如果应用要使用 okhttp3,是不是必须包含 okio?

Posted

技术标签:

【中文标题】如果应用要使用 okhttp3,是不是必须包含 okio?【英文标题】:Is it mandatory to include okio if an app wants to use okhttp3?如果应用要使用 okhttp3,是否必须包含 okio? 【发布时间】:2018-08-10 11:45:18 【问题描述】:

我在低于 LOLLIPOP (api 21) 的 android 版本中包含了 okhttp3 并测试了 PATCH 和 DELETE 方法。我没有包括 Okio,它运行良好。但是,在 okhttp site 中,他们提到了以下内容:

您还需要 Okio,OkHttp 使用它来实现快速 I/O 和可调整大小的缓冲区。下载最新的 JAR。

任何人都可以确认是否可以安全地忽略 Okio 以使用 OkHttp 吗?

附加信息: 在使用 OkHttp 3.10.0 进行 PATCH 调用时,我在 Android 4.1.2 Samsung Galaxy Note 中看到了使用和不使用 okio 1.14.0 的相同警告日志。

03-02 14:18:39.850 6123-6159/ W/dalvikvm: VFY: 无法找到签名中引用的类 (Ljava/nio/file/Path;) 03-02 14:18:39.850 6123-6159/ W/dalvikvm: VFY: 无法找到签名中引用的类 ([Ljava/nio/file/OpenOption;) 03-02 14:18:39.850 6123-6159/ I/dalvikvm: 找不到方法 java.nio.file.Files.newOutputStream,引用自方法 okio.Okio.sink 03-02 14:18:39.855 6123-6159/ W/dalvikvm: VFY: 无法解析静态方法 30883: Ljava/nio/file/Files;.newOutputStream (Ljava/nio/file/Path;[Ljava/nio/file /OpenOption;)Ljava/io/OutputStream; 03-02 14:18:39.855 6123-6159/D/dalvikvm: VFY: 在 0x000b 处替换操作码 0x71 03-02 14:18:39.860 6123-6159/ W/dalvikvm: VFY: 无法找到签名中引用的类 (Ljava/nio/file/Path;) 03-02 14:18:39.865 6123-6159/ W/dalvikvm: VFY: 无法找到签名中引用的类 ([Ljava/nio/file/OpenOption;) 03-02 14:18:39.865 6123-6159/ I/dalvikvm: 找不到方法 java.nio.file.Files.newInputStream,引用自方法 okio.Okio.source 03-02 14:18:39.865 6123-6159/ W/dalvikvm: VFY: 无法解析静态方法 30882: Ljava/nio/file/Files;.newInputStream (Ljava/nio/file/Path;[Ljava/nio/file /OpenOption;)Ljava/io/InputStream;

【问题讨论】:

如果okhttp背后的公司告诉你需要它还不够,你在寻找什么样的确认? "I didn't include Okio"的意思是你明确排除了吗?否则它将被包含为传递依赖项。 @Henry 我没有排除它。我不确定它是否包含在传递依赖中。由于未明确包含某些依赖项,我遇到了一些错误:例如:nimbus 需要 json smart。如果我没有在 gradle 文件中明确包含 json smart 作为依赖项,则会导致运行时崩溃。如果我没记错的话,是 NoClassDefFoundError。例如:编译 'com.nimbusds:nimbus-jose-jwt:4.26@jar' 编译组:'net.minidev',名称:'json-smart',版本:'2.3' 您可以在Android Studio的项目视图中打开“External Libraries”节点。这会向您显示包含的所有库(直接或传递)。 感谢@Henry 我确认 okio 1.14.0 与 okhttp3.10.0 一起列在“外部库”中。如果您在下面回答,我会接受您的回答。再次非常感谢! :) 【参考方案1】:

okiookhttp3 工作所必需的。但是,它作为传递依赖项自动包含在内。所以没有必要明确地包含它。

【讨论】:

以上是关于如果应用要使用 okhttp3,是不是必须包含 okio?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Retrofit2 和 OkHttp3 在 API 获取请求后将 XML 布局转换为 Jetpack Compose

OkHttp3基本认证(Basic Authentication)

Okhttp3拦截器-应用拦截器和网络拦截器的区别

OkHttp3 hostnameVerifier 原因:javax.net.ssl.SSLException:读取错误:ssl=0xc8cf1fc8:系统调用期间的 I/O 错误,对等方重置连接

UNP学习第六章

Picasso:设置旧版本的 OkHttp3