Gradle安装与Android Studio配置(想必你也想吐槽一下Gradle吧!!)
init.gradle文件差点把我人都干懵了,虽然wrapper很方便,但我不喜欢wrapper
温馨提示
本文对Gradle的安装与环境变量配置不做具体介绍,重点内容是后面Gradle对于init.gradle文件的配置以及Android Studio设置Gradle(不用Wrapper),并不想听废话的直接跳转点击跳转到本文正文部分,前面废话的内容主要是解释Gradle3个文件的配置优先级,也就是后续实例演示时为什么要这样配置?

Android Studio
Android Studio 是基于 IntelliJ IDEA 的用于开发 Android 应用的官方集成开发环境 (IDE)。
但是和IDEA不同的是,Android Studio 完全免费,所以不要因为思维惯性傻傻地去搜软件绿色版。
Gradle
Android Studio是基于Gradle的灵活构建系统,所以Gradle和ANdroid Studio的关系就像火腿肠和泡面,完美搭档,缺谁谁都难受。
其我第一眼看到Gradle并没有多么害怕,从它的功能来说,与Java开发的Maven区别不大。
但是,当我使用时,发现它的外在构建逻辑会比Maven更加难理解。
咱们先不说安装过程,先提及几个概念
下面这张图是Gradle官网的介绍:
-
左边虚线框涉及2个重要概念,
setting.gradle文件,build.gradle 文件,项目源码自己爱咋写咋写不重要。 -
中间虚线框(也就是Gradle本体)会读取
setting.gradle文件,build.gradle 文件,并将自身缓存,外部插件与外部依赖都加载到构建流中,然后输出右边虚线框打包后的文件,我们并不需对右边虚线框做过多了解,那一般是运维测试该干的事。

理解重点
文章开头Gradle介绍提及过两个概念,也就是setting.gradle文件,build.gradle文件,以及前文在配置过程中需要配置的init.gradle文件,一共3个重要概念。理解这3个概念后,才是真正学会了Gradle的外在构建逻辑。
1. settings.gradle
作用:
- 主要用于配置项目的层次结构和多模块项目的模块包含关系。
- 定义项目的根目录名称和包含的子模块。
常见配置内容:
rootProject.name: 设置根项目的名称。include: 包含子模块。例如,include 'app', 'lib'表示项目包含app和lib两个子模块。
示例:
rootProject.name = 'MyAwesomeProject'
include 'app', 'lib'
2. init.gradle
作用:
- 用于在Gradle构建开始之前执行一些初始化操作。
- 通常用于全局配置,比如设置仓库、插件、属性等。
常见配置内容:
- 配置全局的仓库、插件、属性等。
- 可以在用户的主目录下放置一个全局的
init.gradle,这样所有的Gradle项目都会应用这些配置。
示例:
allprojects {
repositories {
mavenCentral()
}
}
3. build.gradle
作用:
- 定义项目的构建脚本,包括依赖、插件、任务等。
- 每个模块都有自己的
build.gradle文件。
常见配置内容:
plugins: 声明使用的插件。dependencies: 声明项目的依赖。repositories: 声明依赖的仓库。tasks: 定义自定义任务。
示例:
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'com.google.guava:guava:31.0.1-jre'
}
task hello {
doLast {
println 'Hello, World!'
}
}
Gradle安装与配置
这里偷个懒,网上这方面的文章已经很多了,前面的环境配置大差不差,但是对于init.gradle文件的配置五花八门,一连试了好几个博文的,都不太管用。所以我只说最关键的init.gradle的文件配置内容。
// Gradle 全局配置
settingsEvaluated { settings ->
println "Configuring pluginManagement repositories..."
settings.pluginManagement {
repositories {
// 首先尝试使用阿里云 Maven 镜像仓库
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
// 如果阿里云仓库无法解析,回退到官方仓库
gradlePluginPortal() // Gradle 官方插件仓库
google() // Google 官方 Maven 仓库
mavenCentral() // Maven Central 仓库
}
}
}
buildscript {
repositories {
println "Configuring buildscript repositories..."
// 首先尝试使用阿里云 Maven 镜像仓库
maven { url "https://maven.aliyun.com/repository/google" }
maven { url "https://maven.aliyun.com/repository/central" }
maven { url "https://maven.aliyun.com/repository/public" }
// 如果阿里云仓库无法解析,回退到官方仓库
google()
mavenCentral()
}
allprojects {
println "Configuring repositories for all projects: ${project.name}"
repositories {
// 首先尝试使用阿里云 Maven 镜像仓库
maven { url "https://maven.aliyun.com/repository/google" }
maven { url "https://maven.aliyun.com/repository/central" }
maven { url "https://maven.aliyun.com/repository/public" }
// 如果阿里云仓库无法解析,回退到官方仓库
google()
mavenCentral()
}
}
}
优先级关系
当这些文件中的配置发生冲突时,Gradle会按照以下优先级来决定使用哪个配置:
build.gradle: 优先级最高,因为它是最具体的构建脚本,直接定义了项目的构建行为。settings.gradle: 优先级次之,主要用于项目结构的配置,不会直接覆盖build.gradle中的配置。init.gradle: 优先级最低,通常用于全局配置,不会覆盖项目级别的配置。
实例展示(这里仅介绍groxy语法构建的项目)
-
创建一个空视图(Empty Views Activity)项目,注意别用上面的Empty Activity,那是kotlin语法的项目。不拿Android当就业方向的同学最好少碰,不然又多一份学习成本。

-
选择build.gradle的构建语法

-
项目创建时默认模板目录结构展示

-
这时你会发现右下角有弹窗在下载Gradle而且网速慢到出奇,因为此时你并没有对Android Studio的Gradle进行配置。

-
在setting里找到Gradle的相关设置,(可能2023后版本比较新,每次新建项目我都要改这个,目前还没找到让Android Studio全局禁止wrapper下载的方法,知道的朋友也可以分享一下)
Gradle user home(Gradle下载文件存储位置)
作用:指定下载位置,避免C盘炸裂
Gradle Distribution(Gradle 分发)
作用:指定 Gradle 的版本和来源。
解释:Gradle 是 Android Studio 用于构建项目的工具。Distribution 设置决定了 Gradle 的版本(如 7.0、8.0 等)以及是从本地缓存加载还是从远程仓库下载。Gradle JDK(Gradle JDK 设置)
作用:指定 Gradle 使用的 JDK 版本。
解释:Gradle 在构建项目时需要一个 JDK 来执行 Java 代码。此设置决定了 Gradle 使用哪个 JDK 版本(如 JDK 11、JDK 17 等)。如果项目需要特定的 JDK 版本,可以通过这里进行配置。通常建议选择与项目兼容的 JDK 版本。

6. 修改成下图配置
使用本地的Gradle,JDK不需要用1.8,大多数项目把兼容下限都放到了JDK-17,用Android Studio自带的就好。
-
清空缓存重启Android Studio,会自动弹出一个代理窗口,直接点叉叉或者no关掉它

-
现在我的Gradle已经切换到本地了,但是会报错,就不翻译了,这段说人话就是Gradle优先使用setting.gradle(项目级作用域文件)配置了Maven仓库,但是init.gradle文件(全局级配置文件)也配置了Maven仓库。
吐槽一下:既然项目级配置文件优先于全局级配置文件,那就直接暴力覆盖全局级配置文件就好了,还告诉我干吗?你觉得我刚入门安卓会知道咋干吗?
FAILURE: Build failed with an exception.
* Where:
Initialization script 'D:\development_soft\Gradle\gradle-8.6\init.d\init.gradle' line: 25
* What went wrong:
Build was configured to prefer settings repositories over project
repositories but repository 'maven' was added by initialization script
'D:\development_soft\Gradle\gradle-8.6\init.d\init.gradle'
这里不得不提Gradle的设计哲学了,从整体来看没啥问题,就是比较折腾入门的小白
Gradle 不直接覆盖配置的原因是为了确保依赖管理的明确性和一致性,避免因配置冲突导致的不可预测问题。报错的目的是提醒开发者手动解决冲突,而不是让 Gradle 自动处理,这样可以提高项目的稳定性和可维护性。
依赖冲突:如果 Gradle 随意覆盖配置,可能会导致项目中某些模块的依赖被意外替换,从而引发编译错误或运行时问题。
可维护性:明确的配置优先级规则可以让开发者清楚地知道哪些配置会生效,避免因配置冲突导致的调试困难。
安全性:在大型项目中,依赖管理是核心部分,Gradle 需要确保配置的明确性和一致性,而不是依赖于“覆盖”这种不可控的行为。
- 既然报错给我们了,那就老老实实改咯,点击查看setting.gradle默认模板文件内容,老早之前全局级别的init.gradle就改好了(改它就是为了一劳多逸),除了最下面那两行,全删除掉就好了。
// 插件管理配置块,用于定义插件的来源和管理规则
pluginManagement {
// 定义插件的仓库来源
repositories {
// 配置 Google Maven 仓库
google {
// 使用 content 块限制从 Google Maven 仓库中加载的依赖范围
content {
// 包含以 "com.android.*" 开头的依赖
includeGroupByRegex("com\\.android.*")
// 包含以 "com.google.*" 开头的依赖
includeGroupByRegex("com\\.google.*")
// 包含以 "androidx.*" 开头的依赖
includeGroupByRegex("androidx.*")
}
}
// 配置 Maven Central 仓库
mavenCentral()
// 配置 Gradle 插件门户(用于查找和下载 Gradle 插件)
gradlePluginPortal()
}
}
// 依赖解析管理配置块,用于定义项目依赖的仓库来源和解析规则
dependencyResolutionManagement {
// 设置仓库模式为 FAIL_ON_PROJECT_REPOS
// 这意味着 Gradle 会优先使用 settings-level 的仓库(如 google() 和 mavenCentral()),
// 而忽略项目中单独定义的仓库(除非明确允许)。
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
// 定义依赖的仓库来源
repositories {
// 使用 Google Maven 仓库
google()
// 使用 Maven Central 仓库
mavenCentral()
}
}
rootProject.name = "Hello"
include ':app'
补充知识点:repositoriesMode 是 Gradle 提供的一种配置方式,用于控制项目中依赖仓库的优先级和使用规则。它有以下三种模式:PREFER_PROJECT
描述:优先使用项目中定义的仓库(即在 build.gradle 文件中定义的仓库)。如果项目中没有定义仓库,则会使用 settings.gradle 中定义的仓库。
默认值:是的。
适用场景:适用于团队需要为不同子项目使用特定仓库的场景。
PREFER_SETTINGS
描述:优先使用 settings.gradle 中定义的仓库,忽略项目中定义的仓库。
默认值:否。
适用场景:适用于需要在大型团队中强制使用统一的仓库配置。
FAIL_ON_PROJECT_REPOS
描述:如果项目中定义了仓库(无论是直接定义还是通过插件定义),则会触发构建错误。
默认值:否。
适用场景:严格强制使用 settings.gradle 中定义的仓库,避免项目中意外定义仓库。
- 留下最后两行,点击右边那个下载的图标

- 看构建控制台有没有报错,有问题可以再评论区讨论,我这里因为是在本地仓库已经有缓存了,所以啥也没下,1秒就构建好了

拜拜
随便弄一个虚拟机(如果是新电脑或者从没用过虚拟机,第一次运行虚拟机可能需要在控制面板改点东西,这个网络上有解决办法),运行就成功了
提桶跑路🤣🤣🤣🤣🤣🤣🤣🤣
更多推荐



所有评论(0)