API 23更新后Android SDK与Apache HTTP之间的冲突

时间:2016-04-28 08:06:30

标签: android apache android-studio android-sdk-tools

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

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类:

AllowAllHostnameVerifier under android.jar

在使用此问题的答案代码时:java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE from Mashape Unirest in Java application

我得到了这个输出:

  

JAR:文件:/ E:/Program%20Files/Eclipse%20Android%20SDK/adt-bundle-windows-x86_64-20140702/sdk/platforms/android-23/android.jar /组织/阿帕奇/ HTTP /康涅狄格州/ SSL / AllowAllHostnameVerifier.class

所以我可以看到构建从SDK中获取此类,而不是从Apache库中获取。

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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