Android Studio gradle代理https失败的解决办法

  • 内容
  • 评论
  • 相关
文章目录
[隐藏]

前言

这篇文章所有的方法全都是在stackoverflow上找到的,我也是最近强迫自己使用英语搜索,才发现stackoverflow的好处。以前虽然看一些大牛说stackoverflow是开发者圣,但是我基本都是用中文作为关键词搜索,虽然同样是在Google上搜索,但是找到的内容不可相提并论。越来越后悔以前没有好好学英语了,只能慢慢补了。

设置gradle代理

在 USER_HOME/.gradle/中新建一个gradle.properties,然后输入以下内容
xx-net

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

ss

systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080
systemProp.socks.proxyHost=127.0.0.1
systemProp.socks.proxyPort=1080

解决https证书错误

设置好代理之后,可能出现htpps代理失败的问题。因为jc库默认是https的,我用的免费代理软件,需要导入自签证书才能使用。然而我安装官方教程使用keytool向java导入了CA证书,还是无法使用。一般会显示如下的错误

"Error:(26, 13) Failed to resolve: com.alibaba:fastjson:1.1.34.android"
"Error:A problem occurred configuring project ':app'.peer not authenticated.

去代理软件后台看到其报错

Aug 10 16:59:59.618 - [INFO] ssl error: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:590),create full domain cert for host:jcenter.bintray.com

就是因为软件不能信任我们自己的证书,所以导致https通讯失败。而解决办法就是将jcenter仓库地址替换为http。即将build.gradle中的

repositories {
    jacenter()
}

全部替换为(应该有两个,一个是app的,一个是module的)

repositories {
    jcenter 
    { 
        url 'http://jcenter.bintray.com' 
    } 
}

永久替换jcenter()

按照上述方法,就成功的设置了代理。但是缺点是需要每次新建项目后都修改一下仓库地址,尤其是初学Android时,基本上每个示例都要新建一个项目,难不成每个都改一遍么?当然不可能,自然有替换方法,将下面的内容,保存为init.gradle,和gradle.properties一样,也放到USER_HOME/.gradle/中。

allprojects{
    repositories {
        def REPOSITORY_URL = 'http://jcenter.bintray.com/'
        all { ArtifactRepository repo ->
            println repo.url.toString()
            if ((repo instanceof MavenArtifactRepository) && repo.url.toString().startsWith("https://jcenter.bintray.com/")) {
                project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                remove repo
            }   
        }
        jcenter { 
            url REPOSITORY_URL
        }
    }
}

重新打开Android Studio并进行同步gradle,你会发现一切都正常了。

init.gradle是Gradle的初始化脚本(Initialization Scripts),会再每次gradle运行时执行,即上述代码是在gradle运行时修改jcenter仓库链接而不会去修改build.gradle文件里的内容。

参考链接

主要参考了以下链接的内容
https://stackoverflow.com/questions/27056733/change-gradle-mavencentral-url-to-my-repo
https://stackoverflow.com/questions/27206040/android-studio-intellij-gradle-errorcause-peer-not-authenticated
http://gradle.org/docs/current/userguide/init_scripts.html