前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android Studio点击Run背后发生了什么

Android Studio点击Run背后发生了什么

原创
作者头像
小曾同学.com
发布于 2024-01-31 10:55:29
发布于 2024-01-31 10:55:29
3030
举报

背景📒

Android Studio 中经常点击“RUN”按钮,即可对编写的代码进行编译、打包,安装到目标设备,并运行 APP,那么这一条龙服务具体是谁在帮我们做?当点击 RUN 之后会运行一系列 task,这些 Task 有什么关系又是怎么来的呢,今天就基于这些问题来聊聊一些本质问题。

运行按钮
运行按钮

真相 🐘

实际上 Android Studio 提供了Gradle这个工具,它可以为我们提供一条龙服务。这些按钮的底层实现都是通过 Gradle task 来完成的,当点击Run的时候我们看到控制台会有一系列的task在运行。如果针对 Gradle 不了解的可以参考这篇文章 [Gradle系列之大锅菜汇总]

实际上我们在点击 Run 的时候运行的是gradle assembleDebug任务,会生成一个 Debug 包,当我们连接手机的时候会自动帮我们安装到手机上,并打开 Main Activity

Projects 和 Task

如果想知道 Task 之间是怎么运行的,这就涉及到 Gradle 的调度顺序。在此之前需要了解的是 Gradle 中两个重要的概念:Projects 和 Tasks。

在 Gradle 中每个待编译的工程称为 Project,每个 Project 在构建时都包含一系列的 Task,而每个 Task 代表了构建过程中的一个原子性操作,比如编译、打包、发布等这些操作。一个 Project 到底包含了多少个 Task,其实是由编译脚本指定的插件决定的。

Settings文件

主要用于指定项目中所有引入的模块。一个子工程只有在 settings.gradle 文件里配置了,Gradle 才会识别,才会在构建的时候被包含进去。

Settings
Settings

build.gradle脚本

我们会发现根项目下有一个 build.gradle,子项目中也有一个 build.gradle。最外面的 build.gradle,表示的是全局的配置文件,可以对所有的子模块进行配置;

代码语言:groovy
AI代码解释
复制
buildscript {
    repositories {
        jcenter()
        maven {g
            url 'https://maven.google.com/'
            name 'Google'
        }
    }
    dependencies {
        classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.8"
        classpath 'com.android.tools.build:gradle:3.2.1'
     }
}

而内部的 build.gradle 文件是针对当前子模块进行配置。

常见的子模块中的 build.gradle 配置如下:

代码语言:groovy
AI代码解释
复制
android闭包:可以配置项目构建的各种属性
compileSdk 33 用于指定项目的编译版本,假如指定33表示使用Android12系统的SDK编译
defaultConfig闭包:主要对项目的更多细节进行配置
buildTypes闭包:用于指定生成安装文件的相关配置,通常包含有个闭包,release和debug,debug可省略,通过Android Studio直接运行项目生成的都是测试版安装文件

Gradle的执行流程

可以概括为三个阶段:

  1. 初始化(Initialization)阶段:在初始化阶段Gradle将会确定哪些项目将参与构建,并为每个项目创建一个 Project 对象实例。在Android项目中会先执行 setting.gradle 文件,
  2. 配置(Configureation)阶段:执行 Task闭包中的内容,并确定依赖关系;主要执行所有 build.gradle 脚本里面的内容,从根项目下的 build.gradle 开始执行,产出的结果是生成 Task 的有向无环图,即 Task 集合执行的流程图。
  3. 执行(Execution)阶段:即按照配置阶段生成的 Task 有向无环图,一个一个的执行具体 Task 中的 Action。

总结就是先执行 settings 内容,再执行 build.gradle 中除了 doLast 闭包之外的内容,最后再执行 doLast 闭包。如果想验证的话,可以在三个文件中分别加入打印信息

❤️如果你想了解更多Gradle 的内容,可以参考这个专栏,一定有你想要的信息。 [Gradle系列之大锅菜汇总]❤️

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为什么说 Gradle 是 Android 进阶绕不去的坎
Gradle 作为官方主推的构建系统,目前已经深度应用于 Android 的多个技术体系中,例如组件化开发、产物构建、单元测试等。可见,要成为 Android 高级工程师 Gradle 是必须掌握的知识点。在这篇文章里,我将带你由浅入深建立 Gradle 的基本概念,涉及 Gradle 生命周期、Project、Task 等知识点,这些内容也是 Gradle 在面试八股文中容易遇见的问题。
用户9995743
2022/09/26
2.7K0
为什么说 Gradle 是 Android 进阶绕不去的坎
Android Gradle 学习笔记整理
对于Android开发人员已经了解build.gradle 的 android{} 和 dependencies{} ,但是他的编译过程是什么样的?这个过程中可以干些什么事了解吗?
做个快乐的码农
2021/12/14
1K0
Android Gradle 学习笔记整理
Android-Gradle(二) Gradle相关配置详解
Gradle是一个项目自动化建构工具,它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。Gradle主要帮我们做了依赖,打包,部署,发布,各种渠道的差异管理等工作。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
android_薛之涛
2019/08/23
3.6K0
Android-Gradle(二) Gradle相关配置详解
Android Gradle配置分析
Android 开发目前大家使用的IDE是Android Studio,所以和Gradle打交道就是必不可少的了。 大部分时间可能我们关注的都是业务代码的开发,然而了解gradle可以帮助我们更好的构建我们的项目
艳龙
2021/12/16
1K0
Android Gradle配置分析
Gradle详解
Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具,gradle跟ant、maven一样,是一种依赖管理、自动化构建工具。但跟ant、maven不一样的是,它并没有使用xml语言,而是采用了Groovy语言,这使得它更加简洁、灵活,更加强大的是,gradle完全兼容maven和ivy。详细介绍可以查看官网的介绍:http://www.gradle.org/ Gradle入门 在学习Gradle之前,先看一下Groovy的介绍。 Groovy安装 G
xiangzhihong
2018/02/06
1.4K0
Gradle详解
Gradle入门基础一
最近项目中使用到了Gradle所以就抓紧学习了一下。以下资料来自互联网,属于个人整理。图片如有侵权会删除
@派大星
2023/06/28
3160
Gradle入门基础一
使用Gradle管理你的Android Studio工程
关于Android Gradle更多详细内容已经出书《Android Gradle权威指南》,大家可以购买,看更多没有介绍的知识点和内容,购买链接如下
飞雪无情
2018/08/28
1.1K0
Gradle-构建生命周期
实际上,一个项目是什么取决于你要用 Gradle 做什么?项目通常代表的是构建内容。 例如在 Android 中,一个 module 就是一个项目;
佛系编码
2019/12/11
9690
Gradle for Android简要指南
前言 Android官网构建系统介绍https://developer.android.com/studio/build/index.html
Anymarvel
2018/10/22
8840
Gradle构建之生命周期
gradle执行的最小单元是task任务,任何无主函数都可以在Project中找到
小柔
2022/10/09
4590
Gradle构建之生命周期
掌控 Android Gradle
写在前面 目前国内对Android领域的探索已经越来越深,不少技术领域如插件化、热修复、构建系统等都对Gradle有迫切的需求,不懂Gradle将无法完成上述事情。所以Gradle必须要学习。 Gradle 里的几乎任何东西都是基于这两个基础概念: task project 掌握了这两个,你就掌握了一大半的 Gradle 知识了。 首先讲 Task 字面理解为任务,Gradle 中所有执行的事件都是借由 Task 执行的。 例如我们新建一个 Android 工程,在其根目录中输入: gradle tasks
用户1907613
2018/07/20
6430
最新版gradle安装使用简介
gradle的最新版本是6.7,从2009年的第一个版本,到2020年的6.7,已经发展了11年了。gradle是作为android的官方构建工具引入的,除了java,它还能够支持多种语言的构建,所以用途非常广泛。
程序那些事
2021/02/07
1.3K0
Android—Gradle教程(一)「建议收藏」
在前几篇中,讲解了Groovy的基础语法,学习新语法过程总是枯燥的,但为了更好的掌握Gradle,那就必须经过该过程。当然从这一篇将会从零基础开始,开展对Gradle的讲解。
全栈程序员站长
2022/09/14
1.8K0
Android—Gradle教程(一)「建议收藏」
Android Gradle 入门
Gradle是一款非常优秀的构建系统工具,它的DSL基于Groovy实现,可以让你很方便的通过代码控制这些DSL来达到你构建的目的,其构建的大部分功能都是通过插件的方式来实现,所以非常灵活方便,如果内置插件不能满足你的需求你可以自定义自己的插件。
飞雪无情
2018/08/28
9510
Gradle For Android(7)--创建Task以及Plugin
到目前为止,我们已经看到了很多Gradle构建的属性,并且知道了怎么去执行Tasks。这一章,会更多的了解这些属性,并且创建我们自己的Task。一旦知道如何自定义Task之后,就可以完成更多的事情,并且自定义自己的插件,而在多工程中使用这些Task和Plugin。
None_Ling
2018/10/24
2K0
Gradle For Android(7)--创建Task以及Plugin
Android Gradle Get Start
Gradle其实是一套平台和规范,为打包提供的规范。而Android的打包,是Google写的一个Gradle插件。
Oceanlong
2019/03/12
9340
Android Gradle Get Start
Android Gradle系列-入门篇
接下来的一段时间会对Android Gradle的相关知识进行梳理,所以借此整理成一个系列。如果你是刚入行的新秀,那么这个系列将会非常适合你,因为Android基本的配置都与Gradle有关。当然如果你已经入行,但对Gradle还是停留在表面的认知上,这个系列也会对你有所帮助。
Rouse
2019/07/17
8410
Android Gradle系列-入门篇
安卓入门-熟悉Android Studio以及创建第一个安卓模块
Package name:表示项目的包名,Android系统就是通过包名来区分不同应用程序的,因此包名一定要具有唯一性。
Fisherman渔夫
2020/02/18
2.4K0
安卓入门-熟悉Android Studio以及创建第一个安卓模块
Android Gradle知识梳理
Android Studio已经成为现在Android 开发的主要工具,在开发过程中学习使用gradle显得格外重要,本篇博客,我们一起学习gradle打包的一些知识。
老马的编程之旅
2022/06/22
7770
Android  Gradle知识梳理
安卓-Gradle浅谈
本人20年硕士毕业于广东工业大学,于2020年6月加入37手游安卓团队;目前主要负责海外游戏发行安卓相关开发。
37手游安卓团队
2021/02/04
4.5K0
安卓-Gradle浅谈
相关推荐
为什么说 Gradle 是 Android 进阶绕不去的坎
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档