当你点击 Android Studio 右上角 Sync Project With Gradle Files 同步你的项目时,大致流程是这样的:
arduino
点击 Sync
↓
Android Studio 找到项目根目录
↓
使用 Gradle Wrapper:gradlew / gradlew.bat
↓
读取 gradle/wrapper/gradle-wrapper.properties
↓
确认 Gradle 版本,不存在则下载
↓
启动 Gradle Daemon
↓
读取 settings.gradle / settings.gradle.kts
↓
确定有哪些 module
↓
读取根 build.gradle / build.gradle.kts
↓
读取每个 module 的 build.gradle / build.gradle.kts
↓
解析 plugins、android 配置、dependencies
↓
下载/解析依赖
↓
Android Gradle Plugin 生成 Android 项目模型
↓
Android Studio 根据模型配置 IDE
1. gradlew/gradlew.bat :-- wrapper启动脚本,用于启动gradle-wrapper这个java程序
- gradlew -- 适用于macOS/Linux/Unix系统
- gradlew.bat -- 适用 Windows 系统
2. gradle/wrapper/gradle-wrapper.jar:-- Gradle 启动程序
负责启动 Gradle 的 Java 程序,如果本地没有就下载到 Gradle缓存目录。
3. gradle/wrapper/gradle-wrapper.properties : -- gradle 配置文件
gradle-wrapper.jar 读取这个配置文件来确定 Gradle 版本。
4. settings.gradle
Gradle 启动后,会进入项目配置阶段。通常会先读取这个文件。该文件决定了项目包含哪些模块
scss
pluginManagement {
//声明Gradle插件仓库,告诉Gradle需要的插件从哪里去下载
//影响 plugins { ... } 里面用到的插件
repositories {
google() // Android Gradle Plugin 通常在这里
mavenCentral() // Kotlin 插件、普通 Maven 组件可能在这里
gradlePluginPortal() // Gradle 官方插件门户
}
}
dependencyResolutionManagement {
//项目依赖找仓库,告诉所有模块,依赖的插件从哪里下载
//影响 dependencies { ... } 里面用到的库
repositories {
google()
mavenCentral()
}
}
//项目别名
rootProject.name = "AndroidDemo"
//声明项目包含的模块
include ':app'
include ':lib'
5. root/build.gradle: -- 整个项目的顶层构建配置文件声明项目使用的 Gradle 插件版本。
通过 plugins 代码块声明 Android Gradle Plugin(AGP)和 Kotlin 等插件的版本号,子模块无需再重复定义版本。
arduino
plugins {
id 'com.android.application' version '8.2.0' apply false
id 'com.android.library' version '8.2.0' apply false
id 'org.jetbrains.kotlin.android' version '1.9.20' apply false
}
// com.android.application
// com.android.library
// org.jetbrains.kotlin.android
// 这些都是 Gradle 插件。
// apply false 表示声明了这个插件,但不立即应用到根项目上
// 每个子模块(如 app/build.gradle)会使用
// plugins { id 'com.android.application' } 来真正应用它,并直接继承这里的版本号
6. lib/build.gradle: -- 模块级构建脚本
它的作用是告诉 Gradle:这个具体模块应该怎么编译、是什么类型、依赖哪些库、Android 配置是什么。
arduino
//这表示是一个Android 应用模块,最终可以打包成 APK。
plugins {
id 'com.android.application'
}
//这个模块是 Android Library,通常输出 AAR,不能单独安装运行。
plugins {
id 'com.android.library'
}
配置 Android 编译参数
android {
namespace 'com.example.app' //这个模块的 R 类、BuildConfig 等使用的命名空间
compileSdk 35 //用哪个 Android SDK 版本来编译
defaultConfig {
applicationId 'com.example.app' //最终安装到手机上的应用包名
minSdk 23 //App 支持的最低 Android 系统版本
targetSdk 35 //App 适配到哪个 Android 系统版本
versionCode 1
versionName '1.0'
}
}
//配置 buildTypes
android {
buildTypes {
debug {
debuggable true
minifyEnabled false //是否开启混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' //使用哪些 ProGuard/R8 规则文件
}
release {
minifyEnabled true
...
}
}
}
//配置依赖
dependencies {
implementation 'androidx.core:core-ktx:1.13.1'
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation project(':coin-sdk')
}
注意:
namespace:源码文件命名空间(包路径),主要影响 R、BuildConfig 等生成类。applicationId:App 安装到手机上的真正应用包名,是系统识别 App 的唯一 ID。通常只出现在com.android.application模块,library 模块一般没有applicationId,只会有namespace。
对 Android 项目来说,关键角色是 Android Gradle Plugin(AGP)。它会告诉 Android Studio:
- 这个 module 是 app 还是 library
- 有哪些 build variant,例如
debug、release - source set 在哪里,例如
src/main/java、src/main/res - manifest 在哪里
- 资源目录在哪里
- 依赖关系是什么
- Kotlin / Java 编译配置是什么