Gradle的Kotlin DSL提供了一种替代传统Groovy DSL的语法,它在受支持的ide中增强了编辑体验,具有更好的内容辅助、重构、文档等功能。本章详细介绍了主要的Kotlin DSL结构,以及如何使用它与Gradle API进行交互。
作为Android开发习惯了面向对象编程,习惯了IDEA提供的各种辅助开发快捷功能。
由于 Kotlin 具有丰富的功能,如一等函数和扩展方法等,因此它可以保留和改进 Gradle 构建脚本的最佳部分——包括简明的声明式语法以及轻松制作 DSL 的能力。
上篇文章我们已经将Gradle基础运用介绍了一遍,可以这么说,只要你一直看了我这个Gradle系列,那么你的Gradle也将过关了,应对正常的工作开发已经不成问题了。
Android应用开发涉及大量的依赖库和第三方组件,因此有效地管理这些依赖关系至关重要。本文将介绍四种主要的Android依赖管理方式,分析它们的优点、缺点以及最佳实践。
到目前为止,Gradle基础以及Kotlin基础讲解完毕。因此,在本篇里,将会以Gradle的构建优化以及如何从Groovy迁移到KTS进行详解!
如果你想用 gradle kotlin DSL,那么请注意,accessors 的支持从 0.8.0 开始(gradle 3.5),后续也做了一些完善和更新,目前已经默认开启了这一项功能。使用时由于 accessors 是动态生成的,因此要注意使用 plugins{...} 可以直接触发 accessors 的动态生成,其他情况下就比较麻烦了。
对于Android开发来说,Gradle是必不可少的. 而对于Android来说,并不像后端Java一样,有类似Maven这样的替代选择. Gradle几乎是唯一选择
现在我们的 Gradle 脚本都迁移到 KTS 了。接下来我们要考虑的问题是,能不能添加一些好用的扩展,方面后续脚本的编写?
大家可以在我的 GitHub 页面找到这个工程:bennyhuo/Android-LuaJavax: Powerful Kotlin style API for Android Lua(https://github.com/bennyhuo/Android-LuaJavax),在提交记录当中可以看到 release 1.0 和 use kts 这两笔提交,前者使用 Groovy 编写 Gradle 脚本,后者使用 Kotlin 编写。
(抱歉各位,之前发布的内容当中视频嵌入成“迁移 KTS”那一节的视频了,这次重新发布,更正视频内容,感谢大家的支持!)
Gradle是一个开源构建自动化工具,专为大型项目设计。它基于DSL(领域特定语言)编写,该语言是用Groovy编写的,使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序,还支持多种语言和技术,例如C++、Python、Android等。
构建由一个或多个项目组成。项目的概念很抽象,它取决于你要用Gradle 做什么 。项目可以是 一个 Jar 库或者一个 web 程序。也可以是一个 zip 压缩包,也可以是将项目部署到生产环境等等;
Gradle提供了一种领域特定语言,目前同时支持 Groovy 和 Kotlin 。
为了充分利用Android Plugin for Gradle 3.0+的优点,将Android项目拆分成多个module的做法越来越常见。然而,随着module数量的增多,我们很快就会遇到依赖管理的混乱问题。
欢迎阅读 MAD Skills 系列 之 Gradle 与 AGP 构建 API 的第二篇文章。通过上篇文章《Gradle 与 AGP 构建 API: 配置您的构建文件》您已经了解 Gradle 的基础知识以及如何配置 Android Gradle Plugin。在本文中,您将学习如何通过编写您自己的插件来扩展您的构建。如果您更喜欢通过视频了解此内容,请在 此处 查看。
大家肯定也都或多或少的写过一些Groovy代码,但由于不支持代码提示及编译时检查,使用Groovy开发的体验并不太好,Android Gradle插件4.0之后支持在Gradle构建配置中使用Kotlin 脚本 (KTS),用于替代 Groovy(过去在 Gradle 配置文件中使用的编程语言)。
org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
Gradle Plugin是我们在编译期修改代码的重要武器,也是我们精准化测试的核心组成部分。
从最初的创建 config.gradle 到现在的 basic_depend.gradle,虽说今天更比昨天强,但是依然不是很满意。
为什么都是红的…………有时候等一会儿就不红了,有时候,需要关闭IDEA再启动,等Indexing,重建目录后才OK,Build Project啊,gradlew命令啊,似乎都没效果,诶。待研究。
在移动开发领域,Android 和 iOS 版本的应用程序通常会有很多共同点,背后的业务逻辑基本也是一致的。文件下载,读写数据库,从远程服务器获取数据,解析远程数据等等。所以我们为什么不只写一次业务逻辑代码,在不同的平台上共享呢?
欢迎阅读全新的 MAD Skills 系列 之 Gradle 及 Android Gradle plugin API 的第一篇文章。我们将在本文中了解 Android 构建系统的工作方式以及 Gradle 的基础知识。
自 2020 年底,Android Gradle 插件 (AGP) 已经开始使用新的版本号规则,其版本号将与 Gradle 主要版本号保持一致,因此 AGP 4.2 之后的版本为 7.0 (目前最新的版本为 7.2)。在更新 Android Studio 时,您可能会收到一并将 Gradle 更新为最新可用版本的提示。为了获得最佳性能,建议您使用 Gradle 和 Android Gradle 插件这两者的最新版本。Android Gradle 插件的 7.0 版本更新带来了许多实用的特性,本文将着重为您介绍其中的 Gradle 性能改进、配置缓存和插件扩展等方面的内容。
虽然大家都写了很多年的安卓了,我之前一直都有对于build.gradle有点疑惑和不解(这部分其实已经没有了)。就比如为啥android叫android?还有dependencies是啥?apply form和apply plugin有什么区别。
接下来的一段时间会对Android Gradle的相关知识进行梳理,所以借此整理成一个系列。如果你是刚入行的新秀,那么这个系列将会非常适合你,因为Android基本的配置都与Gradle有关。当然如果你已经入行,但对Gradle还是停留在表面的认知上,这个系列也会对你有所帮助。
在根模块下,新建新模块,然后IDEA会帮我们在根模块的settings.gradle.kts中引入子模块
Gradle是一个自动化构建工具,它的发展历史可以追溯到2000年初的项目构建工具演变。以下是Gradle的简要发展历史:
在 " Create New Module " 对话框中 , 选择 创建 " Java or Kotlin Library " 类型的依赖库 ;
但是问题来了,官方文档是基于 groovy 写的,但是使用 kts 的开发者应该怎么写呢?
最初,SQLlin 在 Kotlin/Native 平台上基于开源项目 SQLiter(见参考链接 1),目的是避免重复造轮子。虽然 SQLliter 是来自 Touchlab的优秀开源项目,但最近一年维护更新缓慢。在本文撰写时,SQLiter 于 2023 年 11 月发布了 1.3.0 和 1.3.1 两个版本(1.3.1升级到了 Kotlin 1.9.21,用于修复 1.9.20 的 Kotlin/Native 库版本号相关的问题)。但在这之前的版本,即 1.2.1 发布于 2022年 8 月,基于 Kotlin 1.6.20,一年以上没有更新。对于 2023 年的项目来说,1.6.20 过于老旧。老旧的版本导致了如下一些问题。
上周我们在Android Gradle系列-入门篇文章中已经将gradle在项目中的结构过了一遍。对于gradle,我们许多时候都不需要修改类似与*.gradle文件,做的最多的应该是在dependencies中添加第三方依赖,或者说修改sdk版本号,亦或者每次发版本改下versionCode与versionName。即使碰到问题也是直接上google寻找答案,而并没有真正理解它为什么要这么做,或者它是如何运行的?
Dagger 在 Android 开发中相当流行,它是一个提供完全静态和在编译时生成代码的依赖注入框架,它解决了很多基于反射而实现的方案中所遇到的开发和性能问题。
在 dependencyResolutionManagement 脚本块 中 定义的 repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 代码的含义是 解析依赖时 , 只能使用本脚本块中的 Maven 仓库 , 不能使用 Module 子项目中的依赖 ;
在使用 Android Studio 作为 IDE 之后,Android 项目就开始使用 Gradle 作为构建脚本,Gradle 的优点就不用我多说了,使用 Groovy 作为开发语言,配合各种 Gradle 插件和 DSL 可以实现多样化的构建过程。
Gradle5.0+已经支持了Kotlin,但碍于Android Studio目前适配并不是很好,所以并不建议开发使用,至于为什么,在文章末尾也给出了具体原因。
升级到AS 4.0以后,出现如下的预警,对于我这种有代码洁癖的人是不能忍的,必须解决
rootProject.name 为构建分配一个名称,这将重写以其所在目录命名构建的默认行为。建议设置一个固定的名称,因为如果项目是共享的,文件夹可能会改变——例如作为Git仓库的根目录。
本博客深入探讨了《深入理解Gradle构建系统的工作原理》这一主题。Gradle是一个面向多项目的自动化构建工具,在软件开发中具有重要的地位。了解其工作原理对于开发人员来说是非常有益的。
实际上,一个项目是什么取决于你要用 Gradle 做什么?项目通常代表的是构建内容。 例如在 Android 中,一个 module 就是一个项目;
科特林岛(Котлин)是一座俄罗斯的岛屿,位于圣彼得堡以西约30公里处,形状狭长,东西长度约14公里,南北宽度约2公里,面积有16平方公里,扼守俄国进入芬兰湾的水道。科特林岛上建有喀琅施塔得市,为圣彼得堡下辖的城市。
大家退后,今天我要开始表演一下装逼的艺术。这次我们尝试性的使用谷歌前一阵子公布的ksp(Kotlin Symbol Processing),一款专门拿来给Kotlin项目提升注解生成速度的。
在 Java 构建工具的世界里,先有了 Ant,然后有了 Maven。Maven 的 CoC[1]、依赖管理以及项目构建规则重用性等特点,让 Maven 几乎成为 Java 构建工具的事实标准。然而,冗余的依赖管理配置、复杂并且难以扩展的构建生命周期,都成为使用 Maven 的困扰。
我们高兴地宣布,Android Studio 4.2 现已发布,并可以从稳定版发布渠道中下载。此版本的重心在于推出经过升级的 IntelliJ 平台以及一些新功能,这些新功能旨在提高 Android 应用开发者的工作效率。
从 Gradle 角度看,Android 插件是由 Google 的 Android 团队开发的一个第三方插件。
在 自定义 Gradle 插件 的 Extension 扩展 中 , 可以定义方法 , 定义的方法可以带参数 , 也可以不带参数 ;
新建一个 gradle 文件,命名为 xxx.gradle ,复制上述 model 里的配置,放到你的项目中,可以自定义修改一些通用内容,在其他model 中依赖即可,如下所示:
领取专属 10元无门槛券
手把手带您无忧上云