android studio运行项目报错PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderExce

遇到问题

android studio今天编译突然就遇到问题:

A problem occurred configuring root project 'android'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Could not download MobSDK2022-2023.0713.1137.jar (com.mob.sdk:MobSDK2022:2023.0713.1137)
      > Could not get resource 'https://mvn.mob.com/android/com/mob/sdk/MobSDK2022/2023.0713.1137/MobSDK2022-2023.0713.1137.jar'.
         > Could not GET 'https://mvn.mob.com/android/com/mob/sdk/MobSDK2022/2023.0713.1137/MobSDK2022-2023.0713.1137.jar'.
            > PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

解决方案

下载证书,导入到android studio中即可。
步骤如下,以MAC电脑为例:

  1. https://mvn.mob.com/android/com/mob/sdk/MobSDK2022/2023.0713.1137/MobSDK2022-2023.0713.1137.jar 先打开看一下能否正常下载,如果能正常下载说明页面是没问题的。
  2. 再打开https://mvn.mob.com/ 网站,不用管里面显示的内容。
    在这里插入图片描述
  3. 点击锁图标→连接是安全的 →证书有效→导出
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  1. 先去到Android studio jdk的证书目录下
cd /Applications/Android Studio.app/Contents/jre/Contents/Home/lib/security

进入security目录后,使用keytool命令导入证书

keytool -import -alias mob -keystore cacerts -file /Downloads/_.mob.com.cer

-alias mob 设置别名,这个是唯一的,不要跟已有的冲突,可以自己随便取,最好有相关意义。
终端库密钥口令输入:changeit(这是默认密码)
再输入:Y
提示证书导入成功,重启android studio再进行编译,即可解决问题。
在这里插入图片描述

-keystore 指定存储文件
注意: cacerts 是因为当前目录就是cacerts文件所在的目录,才可指定 -keystore cacerts, 否则应该指定全路径;
-file 指定证书文件全路径(证书文件所在的目录)
注意: 此时命令行会提示你输入cacerts证书库的密码,敲入changeit即可,这是java中cacerts证书库的默认密码,当然也可自行修改。
库密钥口令输入:changeit
是否信任:Y

最好在android studio也配上相关证书。
在这里插入图片描述
最后重启android studio。

补充

个人还遇到访问https://developer.huawei.com/repo/ 下载华为推送库没有证书,按照以上方式,再导入一份华为的证书即可。

keytool -import -alias huawei -keystore cacerts -file /Downloads/appgallery.cloud.huawei.com.cer 

本地java环境导入证书

在android studio环境中导入证书又出现问题,我就尝试在本地java环境中导入,执行的流程跟上面一样。

查看本地java环境

/usr/libexec/java_home
输出显示:/Library/Java/JavaVirtualMachines/jdk-11.0.17.jdk/Contents/Home

执行命令

keytool -import -alias mob -keystore cacerts -file /Downloads/_.mob.com.cer
keytool -import -alias huawei -keystore cacerts -file/Downloads/appgallery.cloud.huawei.com.cer 

如果遇到提示:java.io.FileNotFoundException: cacerts (Permission denied)
解决: cacerts文件没有写权限,再执行导入

sudo chmod 777 cacerts

尝试使用,但没有成功,做个记录

  1. File -> invalidate caches,清空缓存没有效果
  2. 考虑可能是代理问题, gradle 的某个全局配置被改变,而 gradle 的全局配置文件路径为
~/.gradle/gradle.properties

如果里面存在以下内容

...
systemProp.http.proxyHost=127.0.0.1
systemProp.https.proxyPort=7890
systemProp.https.proxyHost=127.0.0.1
systemProp.http.proxyPort=7890
...

则把内容注释,重启android studio也无法解决。

参考链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException是Java中的一个错误,表示构建PKIX路径失败,无法找到有效的证书路径。这个错误通常发生在使用SSL连接时,由于Java不信任SSL证书导致的。 解决这个问题的方法有多种,其中一种是手动导入证书到本地的信任库。这种方法比较复杂,需要按照一定的步骤进行操作。另一种方法是信任SSL证书,可以通过以下步骤解决该问题: 1. 创建一个TrustManager,用于信任所有的SSL证书。可以使用X509TrustManager接口的实现类,如下所示: ```java import javax.net.ssl.X509TrustManager; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; public class TrustAllManager implements 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]; } } ``` 2. 在使用SSL连接之前,将TrustManager设置为信任所有SSL证书。可以使用以下代码片段实现: ```java import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; // 创建SSL上下文 SSLContext sslContext = SSLContext.getInstance("TLS"); // 创建TrustManager数组,只包含一个TrustAllManager TrustManager[] trustManagers = {new TrustAllManager()}; // 初始化SSL上下文 sslContext.init(null, trustManagers, null); // 设置默认的SSLSocketFactory和HostnameVerifier HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true); ``` 通过以上步骤,你可以解决PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值