我使用vimeo网络库(https://github.com/vimeo/vimeo-networking-java)、系外播放器实现了vimeo网络,并在本文中解释了https://stackoverflow.com/a/65737556/8814924
现在的问题是,当我检查API 30时,它出现了错误。
无法启动活动ComponentInfo{com.emergingit.emergingstudy/com.emergingit.emergingstudy.activities.course.ExoPlayerActivity}:java.lang.IllegalStateException:无法提取Android10Platform上的信任管理器,sslSocketFactory是由: java.lang.IllegalStateException:无法提取Android10Platform上的信任管理器引起的,sslSocketFactory是类com.android.org.conscrypt.OpenSSLSocketFactoryImpl
表示错误的
VimeoClient.initialize(configuration);这里讨论的是哪个问题:https://github.com/square/okhttp/issues/5878,问题讨论:
I assume you are calling the deprecated form of sslSocketFactory, which is broken on newer Android versions. https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/OkHttpClient.kt#L719
/**
* Sets the socket factory used to secure HTTPS connections. If unset, the system default will
* be used.
*
* @deprecated [SSLSocketFactory] does not expose its [X509TrustManager], which is a field that
* OkHttp needs to build a clean certificate chain. This method instead must use reflection
* to extract the trust manager. Applications should prefer to call
* `sslSocketFactory(SSLSocketFactory, X509TrustManager)`, which avoids such reflection.
*/
@Deprecated(
message = "Use the sslSocketFactory overload that accepts a X509TrustManager.",
level = DeprecationLevel.ERROR
)
fun sslSocketFactory(sslSocketFactory: SSLSocketFactory) = apply {
if (sslSocketFactory != this.sslSocketFactoryOrNull) {
this.routeDatabase = null
}
this.sslSocketFactoryOrNull = sslSocketFactory
this.certificateChainCleaner = Platform.get().buildCertificateChainCleaner(sslSocketFactory)
}是否可以使用当前版本的网络库"1.1.3“来解决这个问题,或者我必须等到库更新后再使用?
发布于 2021-01-18 09:36:15
我主要使用Vimeo网络库(v1.1.3)解决了Android 10平台上的Vimeo视频流问题。主要问题是在OkHttpClient构建方法中
builder.sslSocketFactory(sSLSocketFactory);
//RetrofitClientBuilder.java#186 其中,使用1参数版本被降级,我需要将X509TTrustManager作为第二个参数传递,如下所示:
builder.sslSocketFactory(sSLSocketFactory, new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
});所以它解决了我的问题,直到这个更新进入这个库的稳定版本。下面描述了我是如何实现这一点的:
VimeoClient.initialize(accessToken);行上显示了
因此,我进入了
if (sSLSocketFactory != null) { builder.sslSocketFactory(sSLSocketFactory); }这个被废弃的方法被称为.因此,我只需创建两个名为VimeoClientUpdated.java和RetrofitClientBuilderUpdated.java的新java文件,它只是VimeoClient.java和RetrofitClientBuilder.java的一个重命名副本,而现在,我的RetrofitClientBuilderUpdated.java没有被反对的方法,而是正确的,VimeoClientUpdated.java正在调用RetrofitClientBuilderUpdated.java (因为最后一个类我无法扩展,甚至无法将类包装成通往该解决方案的网关,我不得不面对无法在包装器类中更改的私有方法()
VimeoClient.initialize(accessToken),而是给我的新创建的VimeoClientUpdated(accessToken)打电话,它不会在Android 10.上播放Vimeo视频时崩溃。
建议我是否有更好的方法来满足我的目的(解决从android活动中调用的废弃库方法)。干杯!
https://stackoverflow.com/questions/65737921
复制相似问题