当前位置: 首页 > 编程日记 > 正文

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

背景📒

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才会识别,才会在构建的时候被包含进去。
在这里插入图片描述

build.gradle脚本

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

buildscript {
    repositories {
        jcenter()
        maven {
            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配置如下:

android闭包:可以配置项目构建的各种属性
compileSdk 33 用于指定项目的编译版本,假如指定33表示使用Android12系统的SDK编译
defaultConfig闭包:主要对项目的更多细节进行配置

buildTypes闭包:用于指定生成安装文件的相关配置,通常包含有个闭包,release和debug,debug可省略,通过Android Studio直接运行项目生成的都是测试版安装文件

Gradle的执行流程

可以概括为三个阶段:

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

总结就是先执行settings内容,再执行build.gradle中除了doLast闭包之外的内容,最后再执行doLast闭包。如果想验证的话,可以在三个文件中分别加入打印信息
在这里插入图片描述
❤️如果你想了解更多Gradle 的内容,可以参考这个专栏,一定有你想要的信息。 Gradle系列之大锅菜汇总❤️

相关文章:

国内第三方移动推送对接调查:Android、IOS、Flutter,各种云推送、个推、极光、统一推送联盟

第三方移动推送对接,刚开始是移动端发起的。在开会讨论这个对接时,心里突然很迷茫,为什么要做第三方移动推送对接?我们自己为什么不能做移动推送?话说,项目里目前所使用的推送就是自己做的。但是在App离线情况下,消息就收不到了。想起来了,这是最最重要的问题,是为了在离线的情况下,App还能收到通知和消息。如果不是因为这个,这个对接可以不做。因为手机端的app层不出穷太多了,为了给手机省电,用户会主动把运行在前端的app给咔嚓掉…虽然咔嚓掉,但是在有信息的情况下,用户还是希望能够收到信息。

mysql的varchar长度到底能插多少字符?

需要注意:这点和oracle的varchar2不同,oracle是字节数长度,不是字符长度,一个汉字占2个字节,所以长度6最多只能存3个汉字。varchar(6)表示可以插入6个汉字,或6个字母数字,或汉字和字母数字共6个,是表示插入的字符数,不是字节数。看下Oracle的测试:汉字占用2个字节。

mysql开启可以使用IP有权限访问

为实际的IP地址和你想要设置的密码。请小心操作,并确保你了解每个命令的作用。如果你对此有任何疑问,最好咨询经验丰富的数据库管理员。来设置或修改用户的密码。相反,你需要分两步来完成这个过程:首先创建或修改用户,并设置密码;然后授予相应的权限。用户应该能够从指定的内网IP地址访问MySQL服务器。用户已存在并且你只是想更改其密码或允许从另一个地址访问,使用。在MySQL 8.0及更高版本中,语句的语法有所变化。替换为你的内网IP地址,

鸿蒙Harmony-页面路由(router)详解

慢慢理解世界,慢慢更新自己,希望你的每一个昨天,今天,和明天都会很快乐,你知道的,先好起来的从来都不是生活,而是你自己

Spring Boot整合日期转换器(Converter)和拦截器(HandlerInterceptor)

配置文件形式针对框架进行个性化定制,例如:拦截器,类型转化器等等。WebMvcConfigurer配置类其实是。内部的一种配置方式,采用。

鸿蒙Harmony-层叠布局(Stack)详解

我们总是为了太多遥不可及的东西去拼命,却忘了人生真正的幸福不过是灯火阑珊处的温暖,柴米油盐的充实,人生无论你赚的钱,是多还是少,经历的事情是好还是坏,都不如过好当下的每一天!

Android 某个应用缺少特殊权限导致系统一直重启解决

系统一些应用会使用到特殊权限,这时候要在系统配置一下否则系统会一直重启。出现该问题的时候,系统一直显示开机Log界面,无法正常进入Android系统界面。下面一起分析总结一下吧。本文不仅正文有学习价值,后续的延伸介绍内容也是有学习价值的。framework 定义的所有 权限都是有定义包含 protectionLevel 等级的,主要等级有:普通,运行时,权限,特殊。

适用于 Windows 的 10 款顶级 PDF 阅读器评测

您是否正在寻找适用于 Windows 台式机或笔记本电脑的可靠且高效的最佳 PDF 阅读器?然后您就打开了正确的文章。在本文中,我提供了有关互联网上一些免费 PDF 阅读器软件的详细信息。我相信读完这篇文章后,您心中将不再有关于免费 PDF 阅读器软件的疑问。

Android Studio 如何设置允许访问网络资源

在 Android 应用中,有时需要访问网络资源,例如从服务器获取数据或者下载文件等。为了保证应用能够正常访问网络资源,需要在 AndroidManifest.xml 文件中添加网络权限。同时,在 Android 9.0 及以上版本中,还需要在代码中进行额外的配置,以确保应用能够正常访问网络资源。本文将介绍如何在 Android Studio 中设置允许访问网络资源。_在android中添加可以访问网络的权限语句

Flutter配置Android和IOS允许http访问

Android和IOS允许http访问

spring 笔记二 spring配置数据源和整合测试功能

• 数据源(连接池)是提高程序性能如出现的• 事先实例化数据源,初始化部分连接资源• 使用连接资源时从数据源中获取• 使用完毕后将连接资源归还给数据源常见的数据源(连接池):DBCP、C3P0、BoneCP、Druid① 导入数据源的坐标和数据库驱动坐标② 创建数据源对象③ 设置数据源的基本连接数据④ 使用数据源获取连接资源和归还连接资源。

如何在Android平板上远程连接Ubuntu服务器使用code-server代码开发

如何在Android平板上远程连接Ubuntu服务器使用code-server代码开发

鸿蒙ArkUI-X跨端应用开发,一套代码构建多平台应用

文章浏览阅读164次。ArkUI是一套构建分布式应用的声明式UI开发框架。它具备简洁自然的UI信息语法、丰富的UI组件、多维的状态管理,以及实时界面预览等相关能力,帮助您提升应用开发效率,并能在多种设备上实现生动而流畅的用户体验。详情可参考ArkUI框架介绍ArkUI-X进一步将ArkUI扩展到了多个OS平台:目前支持OpenHarmony、HarmonyOS、Android、 iOS,后续会逐步增加更多平台支持。开发者基于一套主代码,就可以构建支持多平台的精美、高性能应用。