背景
Android Studio新建项目后,Gradle Sync报错如下,总之就是环境配置和版本问题。
先说结论吧,不是AGP版本的问题,而是Maven仓库找不到。
总报错信息:
FAILURE: Build failed with an exception.
* Where:
Build file 'E:\Workspace\AndroidTestDemo\build.gradle' line: 8* What went wrong:
Plugin [id: 'com.android.application', version: '8.5.1'] was not found in any of the following sources:- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Included Builds (No included builds contain this plugin)
- Plugin Repositories (could not resolve plugin artifact 'com.android.application:com.android.application.gradle.plugin:8.5.1')
Searched in the following repositories:
MavenRepo
Gradle Central Plugin Repository
check build.gradle error:
Plugin [id: 'com.android.application', version: '8.5.1', apply: false] was not found in any of the following sources:
* Exception is:
org.gradle.api.plugins.UnknownPluginException: Plugin [id: 'com.android.application', version: '8.5.1'] was not found in any of the following sources:- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Included Builds (No included builds contain this plugin)
- Plugin Repositories (could not resolve plugin artifact 'com.android.application:com.android.application.gradle.plugin:8.5.1')
Searched in the following repositories:
MavenRepo
Gradle Central Plugin Repositoryat org.gradle.plugin.use.resolve.internal.PluginResolutionResult.getFound(PluginResolutionResult.java:112)
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.resolvePluginRequest(DefaultPluginRequestApplicator.java:192)
新建minSDK为 Android 14.0的时候,项目目录结构如下:
- app
- src
- androidTest 安卓测试
- java
- com.demo.test 共包名
- ExampleInstrumentedTest.java 通常使用 Espresso、UI Automator 等测试框架来进行 UI 测试。
- main 应用源代码
- java
- com.demo.test 共包名
- res
- AndroidManifest.xml
- test 单元测试
- java
- com.demo.test 共包名
- ExampleUnitTest.java 通常使用 JUnit 框架来编写和运行测试
- build.gradle 单应用使用
- gradle
- wrapper
- gradle-wrapper.jar
- gradle-wrapper.properties 可配置本地路径distributionUrl
- libs.versions.toml(以前没有)
- build.gradle 项目用
- local.properties sdk.dir配置
- settings.gradle (包含下面属性项配置)
- pluginManagement
- dependencyResolutionManagement
- rootProject.name
Note:因为没有sync成功,才会显示背景黄色的行。
问题分析
尝试找到8.5.1的来源,但是没有找到项目配置8.5.1指定版本的文件,打开Settings看是默认的AGP。
$versions.agp
打算手动在build.gradle配置8.4.0(本地其他project可用的)还是不行,说明没有生效。其实根因也不是插件版本问题,而是仓库找不到(解决方案第二点)。
其实8.5.1是在Gradle 新增的文件 libs.versions.toml
中,即$versions.agp的引用来源就是该文件的版本。
gradle 版本变化记录
在老版本的项目创建时,配置都集中在build.gradle,包含项目以及各app的build.gradle文件(此文件可以有多个,当然也可以只有一个)。
旧APP Project 的 build.gradle 配置参考:
buildscript {
repositories {}
dependencies {
classpath 'com.android.tools.build:gradle:8.4.0' // 指定版本
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.9.2'
}
}
allprojects {
repositories {}
}
apply plugin: 'com.android.application'
新建项目选择minSDK版本为 Android U 的项目时,repositories等大量配置是在settings.gradle中的
查看本地默认Gradle Verison
一般在C:\Users\XXXXX\.gradle,也可以系统变量指定 GRADLE_HOME和 GRADLE_USER_HOME
gradle-wrapper.properties
默认配置如下:
#Wed Nov 20 11:02:28 CST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
此处会引用GRADLE_USER_HOME,该值跟Android Studio设置中的 Gradle user home 似乎还是有区别的。
参考:
IDEA如何正确配置Gradle? GRADLE_USER_HOME 和 Gradle user home的区别_grade user home-CSDN博客
排查建议
1. Gradle 插件版本正确性
首先确保指定的插件版本是正确的。查看 Android Gradle 插件官方文档 确认 8.5.1
是否为可用版本。
- 可以在 Android Studio 的 File > Project Structure > Project 菜单中指定插件版本,也可以在顶级
build.gradle.kts
文件中指定。 - 如果指定的插件版本尚未下载,则 Gradle 会在下次构建项目时进行下载;或者也可以在 Android Studio 菜单栏中依次点击 File > Sync Project with Gradle Files 进行下载。
2. 插件仓库是否包含
确保在 build.gradle
文件中包含了正确的 repositories
配置,保证 Gradle 能够访问到 Google Maven 仓库。通常在项目的 build.gradle
文件(在根目录下)中应该有类似如下的配置:
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.5.1'
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
3. Gradle 包含问题
如果使用较旧的 Gradle 版本,可能不支持较新的 Android Gradle 插件。在 gradle/wrapper/gradle-wrapper.properties
文件中,确保 Gradle 版本符合要求。例如,Android Gradle 插件 8.5.1
需要 Gradle 8.0
或更高版本。可以按以下方式更新:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
可以将上面的url修改成本地路径
4. 网络连接问题
确保开发环境可以访问网络,以便 Gradle 能够在线下载所需的插件。如果处在某个需要 VPN 代理才能访问外部网络的环境,要确保已正确配置。
比如在公司经常有网络限制,导致连接问题下载失败。
5. IDE 问题
如果使用 Android Studio,可以尝试重启 IDE,有时候 IDE 可能没有正确加载 Gradle 插件。也可以尝试使 Gradle 重新同步,通常可以通过点击 “Sync Now” 提示来实现。
解决方案:替换镜像
修改 settings.gradle 文件的 repositories 配置。
修改前默认只有 google 和 mavenCentral。
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "AndroidTestDemo"
include ':app'
打开sync界面查看Download info可以看到仓库下载失败
修改后替换成阿里云镜像(或者公司内部镜像)
在pluginManagement 和dependencyResolutionManagement 的repositories中首先添加如下配置:
maven { url=uri( "https://maven.aliyun.com/repository/central") }
maven { url=uri( "https://maven.aliyun.com/repository/public") }
maven { url=uri( "https://maven.aliyun.com/repository/google") }
maven { url=uri( "https://maven.aliyun.com/repository/gradle-plugin") }
成功之后正常显示目录:
需要注意,不要修改默认的build.gradle 如下配置为true,否则sync 失败。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
alias(libs.plugins.android.application) apply false
}