Android SDK 与 Apache HTTP 在 API 23 更新后发生冲突

Conflict between Android SDK and Apache HTTP after API 23 update

在我的项目中,我使用了这些库:

compile 'org.apache.httpcomponents:httpclient:4.5.2'
compile 'org.apache.httpcomponents:httpcore:4.4.4'

一切正常,直到我为 API 23 更新了 Android 工具。然后当我尝试执行 HttpPost 时,出现以下异常:

java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:966)
at org.apache.http.impl.client.HttpClients.createDefault(HttpClients.java:58)

这是它发生的库代码:

public class SSLConnectionSocketFactory implements LayeredConnectionSocketFactory {

public static final String TLS   = "TLS";
public static final String SSL   = "SSL";
public static final String SSLV2 = "SSLv2";

@Deprecated
public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER
    = AllowAllHostnameVerifier.INSTANCE;

查看外部库时,我可以看到 android.jar 下的 AllowAllHostnameVerifier class:

当使用此问题答案中的代码时:

我得到这个输出:

jar:file:/E:/Program%20Files/Eclipse%20Android%20SDK/adt-bundle-windows-x86_64-20140702/sdk/platforms/android-23/android.jar!/org/apache/http/conn/ssl/AllowAllHostnameVerifier.class

所以我可以看到构建是从 SDK 而不是从 Apache 库中获取这个 class。

所以问题是,如何修复我的 class 路径或其他必要的配置,以指示构建使用这些 classes 像以前一样来自 Apache 而不是来自 SDK?

提前致谢!

简而言之,只需编辑 android.jar 文件,删除 类 需要被 Apache 库替换的内容。