Dan*_*son 5 java android apache-httpclient-4.x
我试图了解Android目前与Apache http-client的关系.我需要使用依赖的标准Java库,org.apache.httpcomponents:httpclient:4.5.2而且在Android上似乎是不可能的.
我们可以看到在Android M中,httpclient 已删除支持.在Android P中,库已从引导类路径中删除,并且对于没有清单条目的应用程序不可用.我还可以看到有一个官方的Apache Android端口httpclient,如果你需要一个稍微更现代的库版本,它可以直接替代4.3.5.1.对于具有现代目标sdk的应用程序,甚至还有第四方端口4.4.1.1.
我的应用程序的min sdk是17,而目标sdk是28.所以我的第一个问题是,它是否真的可以杀死任何对apache httpclient的Android版本的引用,其中一个min sdk卡在17,如果不是,我怎么能替换4.5.2的那个版本在库内.
我的具体错误是java.lang.NoSuchFieldError: org.apache.http.conn.ssl.AllowAllHostnameVerifier.INSTANCE,即使我的目标SDK为28,Android仍然会查找并使用AllowAllHostnameVerifier.java没有INSTANCE字段的旧类:
您不能直接替换Android框架中包含的类。唯一的解决方案是使用不同的命名空间。这就是为什么Spongy Castle使用org.spongycastle.*而不是org.bouncycastle.*,并且您链接的项目使用cz.msebera.android.httpclient.*而不是org.apache.http.*。
不幸的是,这意味着您必须更改库中对 http-client 的每个引用。
自 Android Jetpack 发布以来,SDK 包含Jetifier,这是一个在构建时翻译库字节码中引用的工具。有一个独立版本,它可以使用自定义映射配置。
在你的情况下,这意味着:
org.apache.http为cz.msebera.android.httpclient转换库的另一种可能的解决方案是使用Jar Jar。