Andorid Gradle

简介

Android studio上应用程序开发默认使用Gradle为自动化构建工具,Gradle是在Ant、Maven等自动化工具"前辈"们的基础上发展起来了的。

一、Gradle的核心要点

1.Groovy与Gradle

  • Gradle脚本是基于Groovy语言的,因而它一定遵循Groovy的语法。
  • Groovy和java可以达到二进制级别的兼容,对于JVM来说他们没有区别
  • Groovy还可以使用java类中的api,两者可以混合编程

1.1.与Gradle相关的Groovy的核心特性1:闭包(Closure)

java 复制代码
def greeting = { "hello, $it!" }
assert greeting('Patrick') == 'hello, Patrick!'

我们定义了闭包greeting,通过向闭包传入参数来使用它。
基础语法规则:

css 复制代码
{ [closureParameters -> ] statements }
  • {}:将代码块'框'起来,作为一个整体对象来处理
  • closureParameters -\> :表示这个闭包所需要的参数,这一段是可选的,Groovy会自动判断分析有没有参数
  • statements:代表真正的代码片段
    部分闭包样式:
  • { -> item ++ }: 通过箭头来分隔开闭包参数和代码实现,不使用参数实现
  • { println it} : 使用隐含的参数
  • { it -> println it} : 和上面打的一样,显示了隐藏的参数
  • { String x,String y -> println " x x xy"} : 使用两个参数
  • 闭包中可以包含多条代码语句

1.2.与Gradle相关的Groovy的核心特性2:Command Chains

Croovy可以让开发者不使用()进行函数调用:

  1. turn("left") -> turn left
  2. turn("left").then("right") -> turn left then right
  3. turn() -> turn():复合时使用,如有参和无参调用时

1.3.与Gradle相关的Groovy的核心特性3:运算符重载

Groovy中的不少运算符会被映射为针对对象的常规函数调用例如:

    • a+b -> a.plus(b)
    • a-b -> a.minus(b)
    • ab=c -> a.putAt(b,c) 特殊效果
arduino 复制代码
task hellowhellow
hellowhellow {
    print "A"
}
hellowhellow {
    print "A"
}

调用gradle hellowhellow结果为:AA

1.4.与Gradle相关的Groovy的核心特性4:动态类型

变量不需要指明所属类型,代码行不需要;号隔断

css 复制代码
hellowhellow {
    def a
    a = "A"
    print a
}

2.Gradle的生命周期

Gradle的三个生命周期,Initialzation,Configuration,Execution

  1. Initialzation:主要作用定位有哪些需要build的文件
  2. Configuration:根据上一阶段的结果主动处理单个或多个build文件,当前并不代表工程已经开始编译了,这个阶段的产出实际上是一个task所组成的DAG图。这一阶段还会调用开发者编写的hook方法
  3. Execution:它会基于上一步中的DAG结果来生成目标产物。

3.Gradle依赖版本管理

libs.versions.toml是官方推荐的依赖版本管理方式,位于project > gradle目录下

引用:

相关推荐
Godikov4 小时前
硬件异步事件下的业务一致性:智能柜领取/归还流程的竞态设计
android
Godikov4 小时前
不用 Netty:Android 手写 TCP 客户端实战——自定义协议帧、粘包处理与可靠重连
android
事圆则缓4 小时前
Java 面向对象如何落到 Android View 体系
android
iPad协议个微协议5 小时前
# 微信自动营销系统如何基于 WechatApi 做事件驱动设计
android·微信·企业微信·个人开发·wechatapi·微信个人号开发
AirDroid_cn5 小时前
隐私沙盒:第三方应用读取剪切板内容如何拦截?
android·gitee
2501_915918417 小时前
怎么把 Python 写的 Flet 应用打包成 iOS App 并上架 App Store?
android·ios·小程序·https·uni-app·iphone·webview
邪修king9 小时前
Re:Linux系统篇(二十六):文件系统(二):Ext 文件系统底层详解:从 inode、块组到软硬链接,结合 Windows 讲透文件管理本质
android·java·linux
又见情义9 小时前
RK3568 Android 13 版本号管理实战:基于 ROCKCHIP_BUILD_NUMBER 的定制化方案
android
终端安全笔记9 小时前
iOS 27 强制 TLS 1.2:租赁设备的注册链路会在哪一环断
android·网络·安全·ios·智能手机
mmsx9 小时前
MapLibre 实战 11|用户说"我的地块丢了":一个 sealed class 图层模型,和四个让我重构三版的坑
android·前端·开源