在我的项目中,我正在使用这些库:
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
类:
我得到了这个输出:
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?
提前致谢!
答案 0 :(得分:1)
简而言之,只需编辑android.jar
文件,删除需要被Apache库替换的类。