首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vimeo网络库崩溃的安卓10平台(api29)

Vimeo网络库崩溃的安卓10平台(api29)
EN

Stack Overflow用户
提问于 2021-01-15 14:29:35
回答 1查看 1.9K关注 0票数 1

我使用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

表示错误的

代码语言:javascript
复制
VimeoClient.initialize(configuration);

这里讨论的是哪个问题:https://github.com/square/okhttp/issues/5878,问题讨论:

代码语言:javascript
复制
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“来解决这个问题,或者我必须等到库更新后再使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-18 09:36:15

我主要使用Vimeo网络库(v1.1.3)解决了Android 10平台上的Vimeo视频流问题。主要问题是在OkHttpClient构建方法中

代码语言:javascript
复制
builder.sslSocketFactory(sSLSocketFactory);
//RetrofitClientBuilder.java#186    

其中,使用1参数版本被降级,我需要将X509TTrustManager作为第二个参数传递,如下所示:

代码语言:javascript
复制
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);行上显示了

  1. 错误,我搜索了该错误并发现它是由于这个OkHttpClient方法的弃用(带有一个参数)引起的。

因此,我进入了

  1. ,并在它的构造函数中看到了私有Retrofit () createRetrofit()被调用,而在它内部私有OkHttpClient createOkHttpClient()被调用。在那里创建了公共类RetrofitClientBuilder对象,它的问题解决方法是公共OkHttpClient build(),其中:if (sSLSocketFactory != null) { builder.sslSocketFactory(sSLSocketFactory); }这个被废弃的方法被称为.

因此,我只需创建两个名为VimeoClientUpdated.javaRetrofitClientBuilderUpdated.java的新java文件,它只是VimeoClient.javaRetrofitClientBuilder.java的一个重命名副本,而现在,我的RetrofitClientBuilderUpdated.java没有被反对的方法,而是正确的,VimeoClientUpdated.java正在调用RetrofitClientBuilderUpdated.java (因为最后一个类我无法扩展,甚至无法将类包装成通往该解决方案的网关,我不得不面对无法在包装器类中更改的私有方法()

  1. ,最后不是打电话给VimeoClient.initialize(accessToken),而是给我的新创建的VimeoClientUpdated(accessToken)打电话,它不会在Android 10.

上播放Vimeo视频时崩溃。

建议我是否有更好的方法来满足我的目的(解决从android活动中调用的废弃库方法)。干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65737921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档