我们用的是自定义的endpoint,http的时候可以上传,但是改到HTTPS就报错,ssl之类的, 和read only 什么的错误 java.io.FileNotFoundException: /jacoco.exec (Read-only file system) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:308) at java.io.FileOutputStream. (FileOutputStream.java:238) at org.jacoco.agent.rt.internal_8ff85ea.output.FileOutput.openFile(FileOutput.java:67) at org.jacoco.agent.rt.internal_8ff85ea.output.FileOutput.startup(FileOutput.java:49) at org.jacoco.agent.rt.internal_8ff85ea.Agent.startup(Agent.java:122) at org.jacoco.agent.rt.internal_8ff85ea.Agent.getInstance(Agent.java:50) at org.jacoco.agent.rt.internal_8ff85ea.Offline. (Offline.java:31) at org.jacoco.agent.rt.internal_8ff85ea.Offline.getProbes(Offline.java:51) at com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider.$jacocoInit(Unknown Source:13) at com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider. (Unknown Source:0)
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:229) at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:319) at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:283) at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:168) at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:257) at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135) at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:254) at okhttp3.RealCall.execute(RealCall.java:92)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从您提供的错误信息来看,问题主要涉及两个方面:SSL握手失败和文件系统只读错误。下面我将分别针对这两个问题提供可能的解决方案。
错误信息中提到的javax.net.ssl.SSLHandshakeException
表明在尝试建立HTTPS连接时,由于证书验证问题导致SSL握手失败。具体原因是“Trust anchor for certification path not found”,即信任锚点未找到,这通常意味着客户端不信任服务端的SSL证书。
解决方法:
检查服务器证书:确保您的HTTPS endpoint使用的SSL证书是由受信任的CA(证书颁发机构)签发的,并且该证书的有效期、域名匹配等都正确无误。
导入证书到信任库:如果您的应用需要访问自签名证书或内部CA签发的证书,需要将该CA的根证书或整个证书链添加到Android的信任库中。可以参考Android官方文档了解如何处理这种情况。
配置OkHttp以接受特定证书:如果您无法修改应用的信任库,可以在OkHttp客户端配置中添加一个自定义的TrustManager
来接受特定的证书。但请注意,这种方法会降低安全性,仅建议在测试环境或有特殊需求的情况下使用。
另一个问题是关于java.io.FileNotFoundException: /jacoco.exec (Read-only file system)
,这表示应用程序试图写入/jacoco.exec
文件时遇到只读文件系统的限制。
解决方法:
更改输出路径:由于系统目录可能是只读的,您可以考虑将文件输出路径更改为应用私有目录或其他可写目录。例如,可以使用Context.getFilesDir()
或Context.getExternalFilesDir(null)
获取可写的私有目录路径。
检查运行环境权限:虽然这个问题看起来与权限无关,但确认应用是否拥有必要的存储权限也是个好习惯。对于Android 6.0及以上版本,即使写入私有目录也需要在运行时请求存储权限。
综上所述,首先解决SSL证书信任问题以确保HTTPS连接成功,同时调整文件输出路径以避免只读文件系统的问题。希望这些建议能帮助您解决问题。