init.gradle 的错误配置导致 Gradle 构建失败

init.gradle 的错误配置导致 Gradle 构建失败

其中,init.gradle 文件存在于 Android Studio 中 File | Settings | Build, Execution, Deployment | Build Tools | Gradle > Gradle user home 所配置的文件目录下。

错误分析

使用 Android Studio 和 Gradle 构建 APP 时报错:

Caused by: org.gradle.api.InvalidUserCodeException: Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository 'maven(http://maven.aliyun.com/nexus/content/repositories/jcenter)' to redirect to a secure protocol (like HTTPS) or allow insecure protocols. See https://docs.gradle.org/8.0.2/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol for more details.

这个错误表明在 Android Studio 项目中使用了不安全的协议访问 Maven 仓库。Gradle 8.0.2 版本引入了对不安全协议的默认禁用,因此需要采取一些措施来解决这个问题。

build.gradle 文件中,找到涉及 http://maven.aliyun.com/nexus/content/repositories/jcenter 的 Maven 仓库声明,并将其协议更改为安全的 HTTPS。例如, Maven 仓库声明可能如下:

maven {
    url "http://maven.aliyun.com/nexus/content/repositories/jcenter"
}

应该将其修改为:

maven {
    url "https://maven.aliyun.com/nexus/content/repositories/jcenter"
}

确保所有 Maven 仓库声明都使用了 HTTPS 协议。这样可以遵循 Gradle 8.0.2 版本的要求,同时确保依赖项能够成功下载。

如果项目中有多个 build.gradle 文件,要确保在所有相关的文件中都进行了相应的更改。

如果 Maven 仓库不提供 HTTPS 支持,可以联系仓库的管理员,询问是否有其他支持 HTTPS 协议的地址。如果没有其他选择,可能需要考虑使用其他支持 HTTPS 的 Maven 仓库。

错误纠正

  • 错误的 init.gradle 配置:

    allprojects{
        repositories {
            def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/repository/public'
            def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/repository/public'
            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
                    }
                }
            }
            maven {
                url ALIYUN_REPOSITORY_URL
                url ALIYUN_JCENTER_URL
            }
        }
    }
    
  • 正确的 init.gradle 配置:

    allprojects{
        repositories {
            def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
            def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/public'
            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
                    }
                }
            }
            maven {
                url ALIYUN_REPOSITORY_URL
                url ALIYUN_JCENTER_URL
            }
        }
    }
    
posted @ 2023-11-24 23:56  飞仔FeiZai  阅读(1004)  评论(0编辑  收藏  举报