You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Run app与Rebuild执行Gradle任务差异的疑问

为什么Run App时不需要重新执行:library:assembleDebug?

这背后的核心是Gradle的增量构建机制——Gradle会智能判断哪些任务需要重新执行,哪些可以跳过,避免做重复劳动。咱们一步步拆解你的问题:

1. Rebuild vs Run App的本质区别

  • Rebuild Project 是强制先执行clean(删除所有模块的build目录),再执行全量的assembleDebug(包括app和library)。这相当于把所有构建产物清空,从头来过,所以你会看到三个任务依次运行。
  • 而Run App(在Clean之后),Gradle会先检查每个任务的输入和输出状态:
    • 输入:比如你的library源码、资源、配置文件有没有修改;
    • 输出:对应的build目录下的产物(比如aar文件、编译后的class文件)是否存在且和输入匹配。

2. 为什么你看不到:library:assembleDebug被执行?

你提到Clean后Run App只看到:app:assembleDebug,大概率是因为:

  • 你的library代码、资源、配置没有任何变化;
  • Gradle判断:library:assembleDebug的所有依赖任务(比如compileDebugJavaWithJavac、processDebugResources等)的输入输出都是一致的,标记这些任务为UP-TO-DATE(最新状态),直接跳过执行;
  • 而:app:assembleDebug依赖于library的输出产物,既然library的产物已经是最新的,Gradle就只需要执行app模块自身的构建任务。

3. 验证这个逻辑的小技巧

你可以做个小测试:

  • Clean Project之后,不要直接Run App,先修改library里的任意一行代码(比如加个注释);
  • 再Run App,你会发现Gradle会先执行:library:assembleDebug,再执行:app:assembleDebug——因为此时library的输入发生了变化,Gradle必须重新构建它。

补充:关于你看到的Clean任务内容

你提到Clean执行了:library:generateDebugSources等任务,这是因为Android Studio的Clean操作除了删除build目录,还会触发一些生成源码的任务(比如Data Binding、Room的源码生成),但这些任务的输出会在后续构建中被Gradle复用,只要输入没变化就不会重复生成。

内容的提问来源于stack exchange,提问作者John M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:14:33