有时候可能会遇到需要修改依赖jar包中某些类的某些方法的需求,比如有些第三方sdk会出现空指针等异常导致应用程序崩溃,但是想等第三方更新sdk来解决时间又来不及,我们可以修改class文件加个异常捕获来避免crash出现。
最近工作中遇到一个问题,需要抓包分析某个sdk的网络请求,经过一番折腾终于可以抓包了,但是发现网络请求总是提示ssl异常,去分析sdk的源码发现,改sdk使用okhttp进行网络请求,但是设置了很多https的校验条件,比如HostNameVerifier为strictMode。我们先来看下它是如何初始化OkHttpClient的:
private static final Builder a;
public static OkHttpClient CustomTrust(String var0) {
SSLSocketFactory var1 = null;
try {
InputStream var2 = (new Buffer()).writeUtf8(var0).inputStream();
SSLContext var3 = a(var2);
var1 = var3.getSocketFactory();
} catch (GeneralSecurityException var4) {
throw new RuntimeException(var4);
} catch (IOException var5) {
var5.printStackTrace();
}
return a.sslSocketFactory(var1).hostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.STRICT_HOSTNAME_VERIFIER).build();
}
我们可以看到,主要