android开发

Gradle 是什么?

Gradle 是一个开源的构建自动化工具 ,专门负责把源代码、依赖库、资源文件等"原料",按照你定义的规则,自动编译、打包成最终可运行的应用(如 Android 的 APK)。

核心特性

  • 🚀 基于 Groovy/Kotlin DSL: 用脚本语言写配置,比 XML 灵活太多
  • 📦 依赖管理: 自动从 Maven 仓库下载第三方库(像 npm 一样)
  • 🧩 多模块 / 多项目: 一个工程拆成多个子工程,各自独立构建
  • 增量构建: 自动判断哪些文件变了,只重编改动的部分(快)
  • 🔌 插件生态: Android、Java、Kotlin、Scala、RN 都有官方插件
  • 🤖 任务系统: 一切都是"任务"(Task),可以串行/并行/条件执行

历史背景

在 Gradle 出现之前,Android 官方用的是 Ant (2000 年前后出现),配置全靠写 XML,又长又难维护;后来 Google 又推了 Maven,依赖管理变好了,但写自定义构建逻辑依然痛苦。

到了 2012 年左右,Gradle 横空出世,被 Google 选为 Android Studio 的官方构建工具,核心原因就两点:

  • 用脚本语言写配置,比 XML 灵活太多
  • 天然支持多模块、多项目,对大型工程特别友好

为什么需要它

执行 ./gradlew tasks 时,Gradle 实际在帮你做这些事:

旧做法的痛点 Gradle 的改善
手动敲 javac 编译、手动拷贝 jar 包 一条命令自动完成所有编译、打包
依赖库要自己下载、管理版本 通过 dependencies { ... } 自动解析、下载
不同环境(debug/release)配置混乱 buildTypes 清晰区分
增量构建靠记忆 自动判断哪些文件变了,只重编改动的部分

简单说:没有 Gradle,你得手动完成"编译-拷包-签名-打包"这一整套流程;有了它,一行命令搞定

在 RN Android 项目中的角色

在 React Native 项目里,Gradle 负责打包的是整个 Android 原生壳子:

复制代码
源代码层                      构建层              产物
─────────                 ─────────         ──────────
JS 业务代码  ──── Metro ──>  index.bundle
                                              ↘
Java/Kotlin 源码  ── Gradle ──>  classes.dex
                                              ├──>  APK(可安装的 app)
资源/图片/布局    ── Gradle ──>  res/
                                              ↗
第三方原生库     ── Gradle ──>  .so / .aar

简单说:JS 部分归 Metro 管,Android 原生壳子归 Gradle 管,两条线最终汇合成 APK

关键概念速查

概念 作用 例子
build.gradle 构建脚本,定义怎么编译 android/app/build.gradle
settings.gradle 工程配置,声明有哪些子模块 include ':app'
Plugin 扩展能力的插件 apply plugin: "com.android.application"
Task 一个可执行的工作单元 assembleDebuginstallDebug
buildTypes 区分不同环境 debug / release
dependencies 声明依赖的库 implementation 'com.facebook.react:react-android'
gradlew Gradle Wrapper 启动脚本 ./gradlew tasks
gradle-wrapper.properties 锁 Gradle 版本 distributionUrl=...gradle-8.3-bin.zip

./gradlew tasks --no-daemon 在做什么

拆开看:

部分 含义
./gradlew 项目自带的 Gradle Wrapper 启动脚本,保证所有人用同一份 Gradle 版本
tasks 列出当前项目所有可执行的构建任务 (如 assembleDebuginstallDebug)
--no-daemon 不启动后台守护进程,每次都冷启动。适合 CI 环境或排查问题时用

💡 daemon 是什么 :Gradle 启动 JVM 一次比较慢(几秒到十几秒),daemon 让 Gradle 常驻内存,后续构建复用。开发时默认开 daemon(快),CI 上用 --no-daemon(干净,避免环境干扰)。

类似概念对比

工具 主要场景 与 Gradle 的核心区别
Maven Java 后端为主 用 XML 配置,约定优于配置,但灵活度低;没有原生多语言支持
npm/yarn/pnpm Node.js / RN 的 JS 侧 只管 JS 依赖和脚本,不懂 Java/Kotlin 编译;RN 里 JS 走 npm,Android 走 Gradle
Bazel Google 等超大 monorepo 更快、更严格,但配置复杂,Android 生态里基本被 Gradle 取代
Make / CMake C/C++ 历史更老,语法古老,Android 不直接用
Ant 老 Java 项目 纯 XML,基本被 Maven/Gradle 取代

一句话记忆

Gradle = Android 界的"Maven 升级版",用脚本语言写配置,专门解决"源代码怎么变成 APK"这件事。RN 项目里,JS 走 Metro,Android 走 Gradle,各管一摊,最后合包成 APK。

相关推荐
程序员看世界1 小时前
Kotlin协程是如何实现优先级机制的
android·kotlin
Carson带你学Android1 小时前
Kotlin放大招!官方 Skills 直接喂出「专家级」代码
android·前端·kotlin
Coffeeee1 小时前
一个kotlin的Smart cast导致的编译问题
android·前端·kotlin
plainGeekDev2 小时前
XML 布局 → Compose 声明式 UI
android·java·kotlin
杊页2 小时前
系列一:架构思想进阶 | 第2篇 分层架构实战:四层拆分、单向依赖与架构防腐
android
weiggle2 小时前
第四篇:布局系统——从 Row、Column 到 Box 的声明式布局思维
android
用户86022504674722 小时前
Now in Android 架构深度解析
android
杊页2 小时前
系列一:架构思想进阶 | 第1篇 Android 架构演进实录:从 MVC 的“万能类”到 MVVM 的数据驱动
android
Database_Cool_2 小时前
AI Agent 混合检索选型:阿里云 AnalyticDB MySQL 向量+全文一站式方案
android·adb