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。

相关推荐
FfHUCisI1 小时前
Golang 数据库连接池深度调优
android·数据库·golang
古法安卓4 小时前
Android-epoll原理详解
android·java·android studio
字节暗面6 小时前
四款 APP 加固强度测评:让 AI 拆了四个包,结果有点出乎意料
android·逆向工程·加固
网安蟹佬霸6 小时前
蓝队防御实战:SIEM与SOAR构建安全运营中心(万字详解+实战配置)
android·安全·web安全·网络安全·网安
敢敢のwings7 小时前
世界模型与FlashWorld:从“在梦中学习“到秒级3D场景生成
android·学习·3d
Dovis(誓平步青云)8 小时前
牛奶不能减成负数:冰箱库存的筛选、去重与不可变更新
android·java·开发语言
Awna8 小时前
MySQL 存储空间与索引运维实战:从空间排查到在线扩容
android·运维·mysql
智购科技无人售货机工厂9 小时前
2026自动售货机触摸屏驱动开发:从I2C协议到多点触控校准的工程实践~YH
android·驱动开发·python·单片机·云原生·django
又见情义9 小时前
RK3568 Android 13驱动适配-WiFi&BT模块(RTL8822CS)
android·arm开发·驱动开发
美狐美颜SDK开放平台9 小时前
直播APP源码如何实现美颜功能?视频美颜SDK开发方案详解
android·大数据·人工智能·计算机视觉·直播美颜sdk