一、问题起因

Android studio新建了一个Android项目,同步gradle时间过长。耗时主要集中在两方面:gradle下载和gradle依赖下载。

二、解决方案

两种配置方式,单项目配置和全局配置。先暂停gradle下载,配置完成后再启动gradle下载。(建议这里先用单项目配置,全局配置常存在冲突,参考别人文章也未能很好解决)

1.gradle下载慢解决方案

gradle-wrapper.properties中,替换https://services.gradle.org/distributions为https://mirrors.cloud.tencent.com/gradle

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

如果使用本地下载文件,用这种格式,distributionUrl=file:///c:/tools/gradle-8.2-bin.zip

2. gradle依赖下载慢解决方案

有两种解决方式,单项目中配置或全局配置,选择其一即可。(建议这里先用单项目配置,全局配置常存在冲突,参考别人文章也未能很好解决)

(1)单项目中配置

如果使用kotlin配置,修改settings.gradle.kts。将对应阿里云镜像仓库添加到google()和mavenCentral()上方,优先从国内源下载,如果没有再去原网站下。如下,对应位置添加上maven设置。

pluginManagement {
repositories {
	// 使用阿里镜像源
	maven(url = "https://maven.aliyun.com/repository/google")
	maven(url = "https://maven.aliyun.com/repository/central")
	maven(url = "https://maven.aliyun.com/repository/gradle-plugin")
	google()
	mavenCentral()
	gradlePluginPortal()
}
}
dependencyResolutionManagement {
	repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
	repositories {
		// 使用阿里镜像源
		maven(url = "https://maven.aliyun.com/repository/google")
		maven(url = "https://maven.aliyun.com/repository/central")
		google()
		mavenCentral()
	}
}

rootProject.name = "Demo"
include(":app")

若你使用的groovy,修改settings.gradle

pluginManagement {
    repositories {
        // 使用阿里镜像源
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        // 使用阿里镜像源
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        google()
        mavenCentral()
    }
}

rootProject.name = "Demo"
include ':app'

完毕!重试gradle下载。

建议:不要随意改变仓库位置。仓库的列出顺序决定了 Gradle 在这些仓库中搜索各个项目依赖项的顺序。例如,如果从仓库 A 和 B 均可获得某个依赖项,而先列出了仓库 A,则 Gradle 会从仓库 A 下载该依赖项。
备注:Android Studio中Settings Gradle设置按照默认,没有做修改。Gradle user home相当于仓库位置,和maven仓库类似。
在这里插入图片描述
(2)全局配置。
在C:\Users\Admin\.gradle下新建配置init.gradle文件。

allprojects{
    repositories {
        def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
        def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
        def HUAWEICLOUD_REPOSITORY_URL = 'https://mirrors.huaweicloud.com/repository/maven/'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
                if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
                    remove repo
                }
                if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $HUAWEICLOUD_REPOSITORY_URL."
                    remove repo
                }
            }
        }
        maven {
            url ALIYUN_REPOSITORY_URL
            url ALIYUN_JCENTER_URL
            url HUAWEICLOUD_REPOSITORY_URL
        }
    }
}

屏蔽掉settings.gradle.kts文件中的dependencyResolutionManagement 模块。

pluginManagement {
    repositories {
        // 使用阿里镜像源
        maven(url = "https://maven.aliyun.com/repository/google")
        maven(url = "https://maven.aliyun.com/repository/central")
        maven(url = "https://maven.aliyun.com/repository/gradle-plugin")

        google {
            content {
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        mavenCentral()
        gradlePluginPortal()
    }
}
//dependencyResolutionManagement {
//    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
//    repositories {
//        // 使用阿里镜像源
//        maven(url = "https://maven.aliyun.com/repository/google")
//        maven(url = "https://maven.aliyun.com/repository/central")
//        google()
//        mavenCentral()
//    }
//}

rootProject.name = "My Application"
include(":app")

完毕!重试gradle下载。
如果全局配置过程中遇到maven冲突问题,因为settings.gradle.kts文件中的dependencyResolutionManagement 模块和init.gradle文件产生了冲突。
在这里插入图片描述

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐