栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

gradle相关知识整理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

gradle相关知识整理

Gradle知识学习:
1.应用研发的周期:开发、编译、测试、发布

2.gradle是什么:构建即将源代码生成可执行应用程序的过程,这个流程包括拷贝、编译、打包、签名、对齐、安装等,按照最原始的方式,开发人员需要手动、逐个执行这些步骤,浪费宝贵的编码时间,即使封装为一个脚本,依旧可能遇到由于开发环境不一致等因素而带来的各种兼容性问题。因此,开发领域引入了构建工具的概念,其定义为一个可编程的工具更准确的说是一个编程框架,它能够以可执行和有序的任务来表达满足需要的自动化过程,可自定义编译过程中的不同需求,常用的编译工具有ant、Maven、Gradle,gradle综合了前两者的优点,具备以下优势,基于jvm虚拟机,具有平台无关性,无缝在各个平台运行,基于插件、提高构建逻辑复用能力,并具备强大的官方插件库,基于groovy的DSL,提供声明式的构建语言,构建流程定制能力强,可以基于插件、任务、生命周期等维度进行定制,

3.groovy语言

Groovy 是我们与gradle工具之间的交流语言,Groovy基于JVM,定位偏向于工具型语言,可以无缝集成所有已经存在的java类库,语法上支持动态类型,闭包等新一代语言特性。并且同时支持面向对象编程也支持面向过程编程。

3.gradle的安装
在gradle中可以通过wrapper来自动安装配置我们的环境,而不需要手动 去做配置,在我们的AS目录结构中体现为gradlew.bat对应window,gradlew对应mac或者linux

4.gradle的执行
Gradle的执行通常是通过命令行的形式,在AS中,其实也可以通过右上角gradle窗口的Execute Gradle Task 来执行。

5.gradle版本修改
针对gradle Wrapper,要修改版本直接修改工程根目录gradle-wrapper.properties中的distributionUrl字段即可。如果是在系统范围内进行了全局安装,则下周再最新的gradle,解压并替换原有gradle解压目录即可。

6.groovy 语法:
1.注释方法同Java,基本类型同Java ,日志打印同dart,集合同dart,集合遍历同dart,流程控制条件选择同dart,方法同java,回参用def表示

7.DSL,DSL为领域专用语言,是为了实现某种目的,而实现的api接口,例如groovy只能用于android 构建,在我们的android项目中的gradle文件中,就使用到了DSL来配置我们应用的构建信息,DSL的实现是基于groovy中的闭包概念的,闭包是一个开放匿名代码块,可以接受参数,具有返回值,也可以被分配给变量,闭包的使用比较像方法,闭包需要与类对象进行关联使用。
8.Gradle构建脚本基础:
Settings.gradle:用来申明当前工程包含了哪些子工程
工程根目录下的Build.gradle:用来定义所有子工程都可以共用的配置
每一个子工程目录下的build.gradle:用来针对当前子工程的构建行为
Gradle.properties:用来配置开关型参数的文件

9.gradle构建的生命周期:
Gradle的构建可以分为三大部分,初始化阶段,配置阶段,执行阶段,在初始化阶段,收集需要参加本次构建的所有子工程,创建项目的层次结构,并且为每一个项目创建一个project实例,此阶段主要执行settings.gradle脚本,配置阶段会执行各个目录下的build.gradle脚本,完成project对象的配置,并且根据项目自身的配置,构造出一个有向五环的任务依赖关系图,以便在下一个阶段执行,执行阶段会负责将上一步生成的任务依赖图,依次执行。

10.gradle的主要角色:
在初始化阶段gradle就准备好了root project对象,它其实是一个接口,通过它可以设置和获取项目的配置信息,在配置阶段就可以拿到所有子工程对应的project对象,project可以拿到当前子工程构建所有的信息,在执行阶段会拿到task,gradle会在执行阶段根据依赖关系决定哪些task会被优先执行以及执行的先后顺序,task指的是任务,是gradle的最小执行单元,我们所有的构建编译打包等都是由许多个task组成,我们可以通过task关键字来创建一个任务

11.gradle插件
在gradle中,几乎所有的功能都是通过插件的方式去提供的,插件负责封装并且提供gradle运行期间的task,在工程中,依赖某个插件之后,就能复用这个插件的构建行为,使用插件可以将相似的代码进行封装以提高复用性
12.如何使用gradle插件
Gradle插件主要分为2种类型,一种是二进制插件,一种是脚本插件。二进制插件通常是实现了plugin接口,它可以存在于一个独立的脚本中,也可以作为独立的工程区维护,这些插件最终会对外发布成一个jar包,脚本插件比二进制插件更轻量,它是一个独立的gradle脚本,脚本中通过可以对工程的build.gradle的配置进行更一步的配置或补充,这个脚本即可以存在于工程的目录中,也可以存在于远程服务器。
二进制插件的开发过程,首先需要建立插件工程,然后实现插件内部逻辑建立插件的运行入口,最后是通过apply的方式使用插件。

13.APT知识
APT指的是注解处理器,可以对注解进行识别和处理,是javac内置的一个工具,它负责扫描所有的注解并且进行处理,注解可以理解为描述数据的数据

14.字节码插桩技术
字节码是什么,开发人员开发的代码一般是Java或kotlin文件,这些文件会被javac或kotlinc编译为.class文件,这里得class其实就是字节码,字节码是虚拟机执行的一种指令的格式,字节码最后会被编译为dex文件,最终会被打包到apk中,运行在用户的手机里,而字节码插桩指的是通过某种策略在.class文件转换为.dex时将一段代码插入到另一段代码中去或替换掉代码。Android 提供了一个transform的接口可以帮助我们进行插桩,可以通过ASM解析工具帮助我们解析或者修改class文件

15.android工程目录结构:
.gradle是当前项目用到的gradel包的缓存,.ideal是当前android studio用到的缓存目录,APP目录是我们默认的子工程,gradle 目录是给gradle wrapper 来用的,.gitgnore用于git版本管理工具,指定哪些目录不需要纳入到版本管理中去,gradle.properties中的配置面向的是gradle这个工具的一些参数配置或者android plugin 的参数配置,

16.apt工作原理:
在通常情况下,我们得安卓工程会通过javac对我们得源代码进行编译,这个时候就需要通过一个角色对我们标记得注解进行加工处理,就需要引入2个角色,一个是注解工程,一个是注解处理器工程,在注解工程中会定义我们将要用到得一些注解,定义好之后就可以在我们得安卓工程中依赖这些注解,然后在编译得时候javac会找到我们所有注册好的注解处理器工程,然后找到注解处理器工程里得meta-INF,然后根据meta-INF里得注册信息再次找到注解处理器,Javac会将所有找到得注解传递给我们得注解处理器,然后就可以在里面进行一些自定义得操作

16.为什么会产生方法数为65536得错误
在Android 虚拟机上,会将java和ko’t’lin编译好的所有.class文件再次编译为一个.dex文件,所有得方法会通过C++中得short类型分配索引,而short类型得取值范围是0到65535,所以在单个.dex文件内最多可以引用得方法也就是65536

17.安装包结构解析
Apk本质是一个ZIP压缩包,因此可使用常规得ZIP解压工具将其解压,解压后可看到由以下主要部分组成:Androidmanifest.xml它是应用得清单文件,用于描述应用程序得名称/版本/所需权限/注册得四大组件等信息。Lie,用于存放SO文件,大多数情况下只需要支持armeabi与X86架构即可,resource.arsc是编译后得二进制资源文件,res会存放编译后得资源文件,如drawable、layout等,assets是应用程序的资源,应用程序可以使用assetmanager来检索该资源,meta-INF该文件夹一般存放于已经签名的apk中,它包含了apk中所有的签名摘要等信息,Classes文件是java class,被dex编译后可供android 虚拟机所理解的文件格式。

18.android 构建流程
Android 构建主要分为三个部分,输入、构建和输出,输入部分会通过application类型的子工程查找工作代码及资源之间的依赖,将其进行收集,构建部分又分为两块,分为编译和打包,这部分内容已经被gradle进行了封装处理,在进入编译阶段后android plugin会收集所有需要编译的文件,然后通过appt2编译得到R.java文件和resource.ap文件,然后R.java文件又会将java与kotlin代码编译为.class文件,最后通过.dex生成器生成为classes.dex文件,然后这个.dex文件会和resource.ap文件一起打包为apk,apk再经过签名就会得到最终的安装包

19.aapt2是什么
Aapt2可以理解为android 资源打包工具,它负责将我们的资源进行解析、索引,并将我们的资源编译为适用于安卓平台的二进制格式文件,aapt又分为编译阶段与链接阶段,编译阶段会将我们的资源文件编译为后缀为.flat的中间二进制文件,之后会进入到链接阶段,链接阶段会将上一步生成的flat文件进行汇总,并生成索引号,处理资源之间的相互依赖关系,然后生成2个资源产物,一个产物是resource.ap压缩包,另外一个就是R.Java,其内部包含了与resource.ap资源文件所对应的静态映射表,resource.ap包含了资源文件并给资源设置了相关的ID,可以从角度为平时开发中R.Layout理解这个映射表

20.虚拟机支持java与kotlin的原因
因为在编译过程中,首先会去调用kotlinC将我们的java 与kotlin代码编译为.class文件,如果kotlin引用了JAVA代码那么就会去java代码中查找引用,然后调用javac对java代码进行编译,因为前面已经将kotlin代码编译为了.class文件,那么当java代码引用kotlin代码时只需要通过classpath去查找使用即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/697059.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号