Android 项目里众多的gradle文件,你知道他们是什么吗

当你点击 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,例如 debugrelease
  • source set 在哪里,例如 src/main/javasrc/main/res
  • manifest 在哪里
  • 资源目录在哪里
  • 依赖关系是什么
  • Kotlin / Java 编译配置是什么
相关推荐
plainGeekDev5 天前
RecyclerView.Adapter → ListAdapter
java·kotlin·gradle
plainGeekDev5 天前
findViewById → ViewBinding
java·kotlin·gradle
帅次9 天前
Jetpack Compose 动画实战:animateFloatAsState、AnimatedVisibility 与 graphicsLayer 避坑
android·kotlin·gradle·android jetpack
Carson带你学Android10 天前
告别复杂的 Gradle 配置!JetBrains Amper 0.10 发布:用 YAML 构建 Kotlin/Android 项目
kotlin·gradle
Java小学生丶10 天前
记录一下我的 Gradle 开发环境配置过程
android·java·gradle·maven·安卓
绿色水杯00712 天前
Android Gradle 依赖分析器
gradle
それども19 天前
Gradle 构建疑难杂症 Could not find netty-transport-native-epoll-linux-aarch_64.ja
java·服务器·gradle·maven
帅次1 个月前
深入 MaterialTheme:掌握 ColorScheme 与 Typography 的设计核心
android·kotlin·gradle·android jetpack·compose
帅次1 个月前
Navigation Compose:NavHost、NavController 与参数
android·kotlin·gradle·android jetpack·compose