继续使用过时的Apache HttpClient继续使用遗留代码库(摆脱它在“下一个版本之后”路线图中)。使用在扩展createClientConnectionManager()
的类DefaultHttpClient
中覆盖public class CustomHttpClient extends DefaultHttpClient {
public CustomHttpClient() {
// calling no-arg super ctor implicitly
}
@Override
protected ClientConnectionManager createClientConnectionManager() {
// return ThreadSafeClientConnManager
// using a SchemeRegistry for https port 443
// with certificate-pinning SSLSocketFactory for https port 443
}
实现的证书固定:
compileSdkVersion 23
这适用于使用useLibrary 'org.apache.http.legacy'
和compileSdkVersion 23
的调试版本。这适用于没有旧版支持库的较小编译SDK版本的调试和发布版本。
这不适用于使用createClientConnectionManager()
和旧版支持库的发布版本。 proguard-android-optimize.txt
未被调用。
使用SDK -dontwarn org.apache.http.**
之后的设置为Proguard启用发布版本,并为旧版支持库添加了以下内容:
-dontoptimize
添加minifyEnabled false
没有效果。
使用createClientConnectionManager()
禁用proguard会再次调用覆盖。但是,禁用proguard对我来说不是一个选择。
我知道一个解决方法。有兴趣了解根本原因,也许还有更好的解决方法。
答案 0 :(得分:0)
通过使public class CustomHttpClient extends DefaultHttpClient {
public CustomHttpClient() {
super(crateClientConnectionManager(), null);
}
private static ClientConnectionManager createClientConnectionManager() {
// return ThreadSafeClientConnManager
// using a SchemeRegistry for https port 443
// with certificate-pinning SSLSocketFactory for https port 443
}
从构造函数调用静态帮助器并显式传递给超级构造函数来解决该问题:
:before
现在,所有配置都使用自定义连接管理器。