Crash 信息如下图
三方sdk调用位置
跟踪系统源码找到抛出异常所在位置
结论:从AndroidQ后传入SSLSocketFactory不能为null
调试验证后最终得出结论如下
1.Android Q HttpsURLConnectionImpl的setSSLSocketFactory方法做了更改,传入为SSLSocketFactory为null会抛异常
2.友盟在用jar集成方式在HttpsHelper.getSSL获取为null,在connection.setSSLSocketFactory传入了null,对应第1点,结果就是AndroidQ直接崩溃,AndroidQ以下的没有问题;友盟在用gradle集成方式时,HttpsHelper.getSSL获取值不为null,所以onnection.setSSLSocketFactory传入不为null,故没有问题。
继续分析HttpsHelper.getSSL为什么为null,先看下图
图中可以看出获取sslSocketFactory时需求相应的证书,在用jar包集成方时无法将资源文件打入jar,而gradle集成最终拉下来的包是一个aar,所以gradle集成时证书已经在里面了!
解决方案
解决方案有如下两种:
第一种,把jar集成方式改为gradle集成方式;
第二种,在工程的assets目录下放入相应的证书