Android Studio 3.0.1 gradle构建pkix pathbuilding失败

14

我在Android Studio 3.0.1中创建了一个新项目,设置了公司代理设置,并添加了自签名证书下的服务器证书。当我尝试构建时,会列出以下错误并构建失败。

错误:

Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.android.support:appcompat-v7:26.1.0.

Could not resolve com.android.support:appcompat-v7:26.1.0.
Required by:
    project :app
 > Could not resolve com.android.support:appcompat-v7:26.1.0.
    > Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/26.1.0/appcompat-v7-26.1.0.pom'.
          > Could not GET 'https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/26.1.0/appcompat-v7-26.1.0.pom'.
                   > sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
                               > PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
                                              > unable to find valid certification path to requested target

有人可以帮我吗?


可能是重复的问题:无法解析com.android.support:appcompat-v7:26.1.0。 - Roberto Martucci
1
这不可能是因为我已经在gradle.properties中设置了代理。 - ninjaxelite
6个回答

12

我通过将公司的自签名证书添加到 Android Studio 的 cacerts 文件中解决了此问题。cacerts 文件位于此处:C:\Program Files\Android\Android Studio\jre\jre\lib\security\cacerts

我还在 gradle.properties 中添加了 http/https 的代理详细信息。


你是怎么做到的?以及如何获取我的代理证书? - Yury Kerbitskov
2
只需将您公司的自签名证书添加到上述指定路径或您安装Android Studio的任何位置即可。 - ninjaxelite
谢谢,我以为cacerts是一个文件而不是一个文件夹。我会尝试的。 - Yury Kerbitskov
1
cacerts当然是一个文件,只需用管理员身份打开(例如使用keystore explorer),然后添加您的证书。 - ninjaxelite
对我有用,谢谢 - 记住打开cacerts文件的默认密码是“changeit”,keystore explorer的下载链接为 - http://keystore-explorer.org/downloads.html - Sanjay Kumar
显示剩余2条评论

2

让我们解决这个问题,所以请查看堆栈跟踪并查看堆栈跟踪的第一个URL,其中指出了问题,就像在这篇文章中一样。

https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/26.1.0/appcompat-v7-26.1.0.pom

在你的浏览器中:但在此之前,要从您的url中删除最后一个.pom/文件名.扩展名

  • 在chrome中 - 点击地址栏中左侧的url图标(通常为锁形图标),

  • 选择"证书" -> "证书路径"->选择类似"Corp-Prj-Root-CA"-> "查看证书" -> "详细信息" -> "复制到文件..."并以"Der编码二进制X.509(.CER)"格式保存单个证书文件,命名为rootCertFile.cer

  • 现在你有了包含密钥库文件,需要将其添加到JVM中。确定cacerts文件的位置,例如:C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts

  • 或者检查您的Android Studio Java路径项目设置

接下来将rootCertFile.cer文件导入cacerts。

解决方法1

使用命令行中的keytool(您需要以管理员身份运行命令提示符):

keytool -import -alias example -keystore  "C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts" -file rootCertFile.cer

默认情况下,您将被要求输入密码,密码为changeit

解决方案2

您可以使用keyExplorer软件作为管理员运行,并打开其中的yourjavapath->jre->lib->security->cacerts文件,路径根据安卓工作室进行设置。

  • 它将要求您输入密码,密码默认为changeit,请键入。

  • 单击“导入信任证书”图标或从“工具”选项中选择并提供上述保存的证书名称的路径rootCertFile.cer

  • 然后它会要求您输入别名,请给出一些唯一的名称并按确定

  • 单击“保存”图标

  • 还要确保关于代理设置(如果有)是否与依赖公司相关的证书相同,那么我们也需要以同样的方式添加该证书

  • 完成后,删除android studio缓存目录,现在尝试在您的项目中进行gradle同步


1

是的,我通过更改WiFi网络连接解决了问题。请按以下步骤操作: 1. 连接到其他或移动网络(使用热点),然后重新连接WiFi网络 2. 在笔记本电脑上重置您的WiFi网络


1
我通过在根目录的build.gradle文件中的buildscript标签下添加以下脚本代码来解决了这个问题。
repositories {
        maven {
            url "https://jitpack.io"
        }
        maven {
            url "https://raw.github.com/Raizlabs/maven-releases/master/releases"
        }
        maven {
            url "http://oss.sonatype.org/content/repositories/snapshots"
            allowInsecureProtocol = true
        }
        maven {
            url "https://jcenter.bintray.com"
            allowInsecureProtocol = true
        }
        maven {
            url "https://plugins.gradle.org/m2/"
        }
        maven {
            url "https://maven.google.com"
        }
        google()
        jcenter()
    }

关键是要添加

allowInsecureProtocol = true

这一行代码。

0
有时候,升级到最新的gradle wrapper(gradle-wrapper.properties)和gradle插件(主build.gradle-> buildscript-> dependencies-> com.android.tools.build:gradle)会有所帮助。如果您正在加载多个项目并更新其中一个,则尤其如此。我就是这样做的,突然我的“其他”项目无法同步/构建。将它们也更新后解决了该问题。
值得注意的是,我们公司确实有一个非常锁定的网络,有大量的流量嗅探和证书重写,因此这很可能是问题的根本原因。即使将自签名证书添加到Android Studio的“批准”证书列表中,我仍然遇到问题,直到我执行了上述操作。以前,我甚至看到在终端中构建(./gradlew assembleDebug,更常见)和在Android Studio中构建之间存在差异(较少工作)。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接