http的时候可以上传,但是改到HTTPS就报错,ssl之类的,和只读什么的错误java.io.FileNotFoundException:/jacoco.exec(只读文件系统)在java.io.FileOutputStream.open0(本机方法)在java.io.FileOutputStream.open(FileOutputStream.java:308)处。(FileOutputStream.java:238)在org.jacoco.agent.rt.internal_8ff85ea.output.FileOutput.openFile(FileOutput.java:67)在org.jacoco.agent.rt.internal_8ff85ea.output.FileOutput.startup(FileOutput.java :49)在org.jacoco.agent.rt.internal_8ff85ea.Agent.getInstance(Agent.java:50)在org.jacoco.agent.rt.internal_8ff85ea.Agent.startup(Agent.java:122)在org.jacoco。 agent.rt.internal_8ff85ea.Offline。(offline.java:31),位于org.jacoco.agent.rt.internal_8ff85ea.Offline.getProbes(Offline.java:51),位于com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider。com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider上的$ jacocoInit(未知来源:13)。(未知来源:0)
javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。在com.android.org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:229)在okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:319)在okhttp3.internal.connection.RealConnection。EstablishmentProtocol(RealConnection.java) :283),位于okhttp3.internal.connection.RealConnection.connect(RealConnection.java:168),位于okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:257),位于okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation。 okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114)的okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java的java:135):
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从您提供的错误信息来看,问题主要涉及两个方面:SSL握手失败和文件系统权限问题。下面我将分别针对这两个问题提供可能的解决方案。
错误信息中提到的javax.net.ssl.SSLHandshakeException
表明在尝试建立HTTPS连接时,由于证书验证问题导致握手失败。具体原因是找不到信任锚点(trust anchor),这通常意味着客户端不信任服务器的SSL证书。
解决方法:
检查服务器证书:确保您的HTTPS服务器使用的是受信任的CA(证书颁发机构)签发的证书,并且该证书未过期,且域名匹配正确。
导入证书到信任库:如果您的应用需要信任自签名证书或内部CA签发的证书,需要将这些证书导入到Android的信任库中。可以通过编写代码动态添加或在应用安装时静态导入。
忽略证书验证(谨慎操作):在开发或测试阶段,可以暂时禁用证书验证以快速排查问题,但请注意,这会降低安全性,不应在生产环境中使用。在OkHttp客户端中,可以通过如下方式配置:
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(InsecureTrustManagerFactory.INSTANCE.get(), (X509TrustManager) null);
builder.hostnameVerifier((hostname, session) -> true);
OkHttpClient client = builder.build();
请仅在调试目的下使用上述代码,并确保在发布前移除或替换为正确的安全设置。
错误信息中的java.io.FileNotFoundException: /jacoco.exec (只读文件系统)
表明应用试图写入一个只读文件系统上的文件。JaCoCo(Java Code Coverage Library)用于代码覆盖率分析,它尝试写入jacoco.exec文件时遇到了权限问题。
解决方法:
更改输出目录:修改JaCoCo的输出目录至可写位置。如果您是在Android应用中使用JaCoCo,确保指定的路径是应用私有目录下的可写路径,如getExternalFilesDir(null)
或getCacheDir()
。
检查运行环境:确认应用运行的设备或模拟器是否对预期的文件系统路径施加了额外的限制。
权限检查:虽然对于内部存储的私有目录通常不需要显式请求权限,但如果是外部存储或其他特定情况,请确保已正确请求并获得了必要的存储权限(如WRITE_EXTERNAL_STORAGE
,但注意在Android 10及以上版本中应使用更细粒度的存储访问策略)。
综上所述,您需要根据具体情况调整SSL证书的处理逻辑以及文件系统的访问权限,以解决遇到的问题。