Android Studio:Gradle、SDK配置全局代理

4,359 阅读3分钟

Gradle.zip 下载代理

项目gradle包名下,wrapper包下有两个文件,其中 gradle-wrapper.properties 文件记录了当前项目要使用的gradle版本

腾讯有关于gradle的镜像,阿里应该也有,就先拿腾讯的来当例子了

#Mon Mar 25 16:05:28 CST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
// distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

官方源码 全局的代理

解决下载官方库缓慢和失败的情况,官方的一般都在 google()jcenter()mavenCentral() 中。这里使用 阿里的代理

单个使用很简单,将上说的那些换成阿里的即可:

// jcenter 的代替
maven {
    url "https://maven.aliyun.com/repository/public/"
}

// mavenCentral 的代替
maven {
    url "https://maven.aliyun.com/repository/central"
}

// google 的代替
maven {
    url "https://maven.aliyun.com/repository/google/"
}

注意:要将 allprojectsbuildscript 的都换了;在 gradle7.0 后没有了 allprojects,给迁移到 setting.gradle 文件中。

全局替换:在 .gralde 根目录创建 init.gradle 文件,写入

allprojects{
    repositories {
        def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
        def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/public'
        def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
        def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
                if (url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
                    remove repo
                }
                if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
                    remove repo
                }
                if (url.startsWith('https://plugins.gradle.org/m2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
                    remove repo
                }
            }
        }
        maven { url ALIYUN_REPOSITORY_URL }
        maven { url ALIYUN_JCENTER_URL }
        maven { url ALIYUN_GOOGLE_URL }
        maven { url ALIYUN_GRADLE_PLUGIN_URL }
    }
}

Android SDK 下载代理配置

因为google被墙,导致 Android studio 使用 SDK 的难度直线上升,网上也有很多配置的办法,就连 Android Studio 都给出来了一个 Http Proxy 来代理,但是都不是特别的好使,今天发现一个好使的办法,而且非常的简单,特此记录一下。

SDK 的下载都是在 dl.google.com 域名下下载的,而墙的也好像只是这个域名,所以只要设置一下host就可以愉快的使用了:

  1. 使用 ping检测 来查一下 dl.google.com 的ip地址 image.png
  2. 将查到的ip地址,设置到hosts中,就完成了。

如果有设置 Http Proxy 的话,将其关闭才可以使用,Android Studio中不见得可以完全的关闭,可以在全局或项目 gradle.properties 中查看是否有 proxy 设置,将其删除。

Ps: 据说 github 也可以使用这种方式快速访问

mac 设置host

  1. 打开终端,输入命令 sudo vi /etc/hosts 打开hosts文件
  2. 输入 i 进入编辑模式
  3. 输入想要的host配置,比如 203.208.40.33 dl.google.com
  4. 点击 esc 退出编辑模式
  5. 输入命令 :wq 终端关闭该文件

题外话:全局的 gradle.properties

为什么要设置全局的 gradle.properties 呢,有时候需要将项目打包并发布用到了账号,一般都是把账号信息放入到 gradle.properties 中,那每一个项目都要在项目中的 gradle.properties 写一遍也挺烦的,就想着可不可以全局设置,然后还真找到了。

  1. 首先是找到.gradle根目录
    • mac 都是在users目录下,是隐藏起来的,可以通过 shift + com + . 来显示
    • window 一般都在c盘的里面,手上没有wiodows,等确定了再补充
  2. 在该目录创建 gradle.properties,有时候因为有配置什么全局的,可能已经有了,就可以直接写入(嫌创建麻烦,可以将项目中的同名文件复制进去,再删除内容即可)。
  3. 写入想要的公共信息,比如:

USERNAME=XXXX
PASSWORD=****

isTest = true

  1. 使用(不管是在项目根目录还是哪里都是一样的使用方式):
buildscript {
    ext.kotlin_version = "1.3.72"

    // 跟kotlin用法很相似呢
    println("--------------$USERNAME")
    println("--------------${USERNAME}")
    println("--------------${USERNAME.startsWith("ext")}")
    if (isTest) {
        println("--------------aaaa")
    }
    
    repositories {
        // ...
    }
}

// 运行结果为
--------------XXXX
--------------XXXX
--------------false
--------------aaaa