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。

相关推荐
方白羽10 小时前
Android Gradle 缓存与文件目录深度解析
android·gradle·android studio
曲幽13 小时前
Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招!
android·termux·nohup·services·wake-lock
plainGeekDev14 小时前
单例模式 → object 声明
android·java·kotlin
程序员陆业聪14 小时前
读者点单·03|Compose 与传统 View 混用的 12 个真实坑
android
程序员陆业聪15 小时前
读者点单·02|Android 启动优化实战:Trace 抓取→Application 编排→冷启动全流程拆解
android
Coffeeee15 小时前
帮你快速理解AI Agent之我想招个Android实习生
android·人工智能·agent
恋猫de小郭16 小时前
苹果 AirPods 协议,Android 也可以使用完整版 AirPods 能力
android·前端·flutter
黄林晴16 小时前
告别无效重建:Gradle 9.6.0 解决 CI 构建缓存失效痛点告别无效重建:Gradle 9.6.0 解决 CI 建筑缓存失效痛点
android·gradle
张风捷特烈17 小时前
Flutter 类库大揭秘#01 | path_provider架构与设计
android·flutter
_阿南_1 天前
Android文件读写和分享总结
android