gpt4 book ai didi

java - 如何在 Android 上使用外部库使用的 Apache http-client 4.5.x

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:14 25 4
gpt4 key购买 nike

我正在尝试了解 Android 当前与 Apache http 客户端的关系。我需要使用依赖于 org.apache.httpcomponents:httpclient:4.5.2 的标准 Java 库,这在 Android 上似乎是不可能的。

我们可以看到在Android M中,support was removed对于 http 客户端。在 Android P 中,库 was removed from the boot class path并且对于没有 list 条目的应用程序不可用。我还可以看到有一个官方 Apache Android port of httpclient如果您需要稍微更现代的库版本,它是 4.3.5.1 的合适直接替代品。甚至还有一个 third party port of 4.4.1.1适用于具有现代目标 SDK 的应用。

我的应用程序的最小 sdk 是 17,目标 sdk 是 28。所以我的第一个问题是,是否真的有可能在最小 sdk 卡在 17 的情况下终止对 Android 版本的 apache httpclient 的任何引用,如果不能,如何我可以用库中的 4.5.2 替换那个版本吗?

我的具体错误是 java.lang.NoSuchFieldError: org.apache.http.conn.ssl.AllowAllHostnameVerifier.INSTANCE,即使我的目标 SDK 为 28,Android 仍在查找并使用没有 INSTANCE 字段的遗留 AllowAllHostnameVerifier.java 类:

enter image description here

最佳答案

您不能直接替换 Android 框架中包含的类。唯一的解决方案是使用不同的命名空间。这就是为什么 Spongy Castle使用 org.spongycaSTLe.* 而不是 org.bouncycaSTLe.*,并且您链接的项目使用 cz.msebera.android.httpclient.*而不是 org.apache.http.*

不幸的是,这意味着您必须更改库中对 http-client 的所有引用。

自 Android Jetpack 发布以来,SDK 中包含 Jetifier,这是一个翻译工具 构建时库字节码中的引用。有一个 standalone version ,它可以使用自定义映射配置。

在你的情况下,这意味着:

  • 创建自定义配置,将 org.apache.http 转换为 cz.msebera.android.httpclient
  • 转换您的标准 Java 库
  • 使用改造后的库和http-client的第三方端口

另一种可能的转换库的解决方案是使用 Jar Jar .

关于java - 如何在 Android 上使用外部库使用的 Apache http-client 4.5.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54652322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com