下了新浪微博的sdk,发现2.3不能成功发布,
新浪微博官方用的是httpclient https,而android4.0一下的都有一个https请求bug,于是只好改他的sdk源码。只要改com.weibo.sdk.android.net下的httpmanager.class.找到MySSLSocketFactory类.
1.修改一下createSocket方法:
@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose)
throws IOException, UnknownHostException
{
int currentApiVersion=android.os.Build.VERSION.SDK_INT;
Log.e("version", currentApiVersion+"");
if(currentApiVersion<0x0000000e) //api version smaller than ICE_CREAM_SANDWICH
{
injectHostname(socket, host);
}
return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
}
2.增加injectHostname方法:
private void injectHostname(Socket socket, String host)
{
try
{
Field field = InetAddress.class.getDeclaredField("hostName");
field.setAccessible(true);
field.set(socket.getInetAddress(), host);
}
catch (Exception ignored)
{
ignored.printStackTrace();
}
}