Android开发中 Maven 与 Gradle 详解

1 阅读4分钟

在 Android 开发中,构建系统是项目编译、打包、依赖管理、生成 APK/AAB 的核心工具。Google 官方从 Android Studio 早期就全面转向 Gradle,目前(Android Studio 最新版本)Android 项目 100% 使用 Gradle,不再直接使用 Maven 作为构建工具。

Maven 主要作为依赖仓库格式(Maven Central、Google Maven 等)被 Gradle 调用。你可以用 Gradle 把库打包成 AAR 并发布到 Maven 仓库,但主构建工具永远是 Gradle

下面从概念、区别、文件结构、配置示例、实际使用一步步详细讲解。

1. Maven 是什么?(为什么 Android 不用它做主构建)

  • Maven 是 Apache 的项目管理工具(不止构建,还管文档、报告)。
  • 核心文件:pom.xml(Project Object Model,XML 格式)。
  • 核心理念:约定优于配置(Convention over Configuration)。
  • 构建生命周期固定:clean → validate → compile → test → package → verify → install → deploy
  • 优点:配置简单、所有 Java 项目都懂、仓库生态成熟(Maven Central)。
  • 缺点:XML 写起来繁琐、扩展性差、构建速度慢、大项目容易卡、任务间依赖关系不灵活。

Android 历史

  • 早期(2010 年前)用 Ant。
  • 2011-2013 年有 maven-android-plugin,但非常难用、插件维护差。
  • 2013 年 Google 推出 Android Studio + Gradle,彻底废弃 Maven 构建。
  • 现在你只能用 Gradle 把模块发布成 Maven 坐标(group:artifact:version),供其他项目依赖。

总结:Maven 在 Android 里只剩“仓库”角色,不推荐新项目用 Maven 构建 Android

2. Gradle 是什么?(Android 官方构建系统)

  • Gradle 是新一代构建自动化工具,支持 Java、Kotlin、Android、C++ 等。
  • 核心语言:Groovy DSL(旧)或 Kotlin DSL(推荐,.kts 文件)。
  • 核心理念:任务(Task) + 插件(Plugin) + 输入/输出,构建一个**有向无环图(DAG)**自动调度。
  • Android Gradle Plugin(AGP) 是 Google 官方插件,专门为 Android 提供 compileSdkminSdkbuildTypesproductFlavors 等功能。

Gradle 运行三大阶段(官方文档):

  1. 初始化:读取 settings.gradle,确定所有模块。
  2. 配置:执行所有 build.gradle(.kts),注册任务、解析依赖。
  3. 执行:根据 DAG 只运行必要任务(增量构建,输入没变就跳过,极快)。

优势对比 Maven

  • 脚本更灵活(代码而非 XML)。
  • 增量构建 + 缓存,速度远超 Maven(大项目快 3-10 倍)。
  • 支持多模块、复合构建、自定义 Task 极易。
  • 依赖管理更强大(可强制覆盖、排除、版本目录 BOM)。

3. Android 项目 Gradle 文件结构(官方标准)

典型项目根目录结构(Android Studio 新建项目):

MyApp/
├── gradle/                  # Gradle Wrapper
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties  # 指定 Gradle 版本(如 8.9)
├── gradlew                  # Linux/Mac 执行脚本
├── gradlew.bat              # Windows 执行脚本
├── settings.gradle.kts      # 项目设置(必须)
├── build.gradle.kts         # 项目级(插件版本)
├── gradle.properties        # 全局属性
├── local.properties         # 本地 SDK 路径(git ignore)
├── app/                     # 主模块
│   ├── build.gradle.kts     # 模块级配置(最重要)
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/ 或 kotlin/
│   │   │   ├── res/
│   │   │   └── AndroidManifest.xml
│   │   ├── debug/           # debug 专用资源
│   │   └── release/         # release 专用
│   └── proguard-rules.pro
└── libs.versions.toml       # 推荐:版本目录(BOM)

4. 核心文件详细讲解 + 示例(Kotlin DSL 推荐)

settings.gradle.kts(项目入口)

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "MyApp"
include(":app")   // 包含模块

项目级 build.gradle.kts(只放插件版本)

plugins {
    id("com.android.application") version "9.1.0" apply false
    id("com.android.library") version "9.1.0" apply false
    id("org.jetbrains.kotlin.android") version "2.0.20" apply false
}

模块级 app/build.gradle.kts(最重要)

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}

android {
    namespace = "com.example.myapp"
    compileSdk = 36

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 24
        targetSdk = 36
        versionCode = 1
        versionName = "1.0"
    }

    buildTypes {
        release {
            isMinifyEnabled = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }

    // 多渠道(产品风味)
    flavorDimensions += "channel"
    productFlavors {
        create("google") { dimension = "channel" }
        create("huawei") { dimension = "channel" }
    }
}

dependencies {
    implementation("androidx.core:core-ktx:1.13.1")
    implementation(project(":mylibrary"))  // 本地模块依赖
    implementation("com.google.android.material:material:1.12.0")
}

5. 常用命令(终端或 Android Studio Terminal)

./gradlew tasks                     # 查看所有任务
./gradlew assembleDebug             # 打包 debug APK
./gradlew assembleRelease           # 打包 release
./gradlew bundleRelease             # 生成 AAB(Google Play 推荐)
./gradlew clean                     # 清空 build 目录
./gradlew dependencies              # 查看依赖树(解决冲突神器)

6. Maven 与 Gradle 在 Android 中的关系总结

维度MavenGradle(Android)
配置语言XML (pom.xml)Kotlin/Groovy DSL
灵活性低(固定生命周期)极高(自定义 Task、DAG)
构建速度快(增量 + 缓存 + 并行)
Android 支持已废弃官方 AGP
依赖仓库Maven Central可直接用 Maven 仓库 + Google 仓库
多模块较难原生支持(include + project())
Android 适用仅发布库唯一推荐构建工具

7. 学习建议(2026 年最新)

  1. 新项目直接用 Kotlin DSL(.kts)。
  2. 强烈推荐 版本目录 libs.versions.toml 统一管理版本。
  3. 想加速构建:打开 Gradle 并行、守护进程、配置缓存。
  4. 官方文档必看:

掌握了上面这些,Android 项目 90% 的构建问题都能解决。如果你有具体问题(如多渠道打包、R8 混淆、复合构建、迁移旧 Maven 项目等),可以继续问我,我可以给出完整配置代码!