编者按:今年的 Google I/O 大会上,Google 宣布 Kotlin 成为 Android 开发的官方语言,一时之间,究竟使用 Java 还是 Kotlin 开发,也成为众多开发者热议的话题。近日,Android 大神 Jake Wharton 发推文称已入职 Google,正式加入 Google 的 Android 框架团队,从事 Kotlin 方面的工作。这无疑为 Google Android Framework Team 增添一大助力,同时也吸引着更多的开发者加入 Kotlin 开发团队。
下面本文将深入解析构建 Kotlin 项目实践,阐明如何使用 Gradle、Maven 和 Ant 来构建 Kotlin 代码的项目,也涵盖了如何构建 Kotlin 的 Android 应用,希望可以帮助大家更好地学习了解 Kotlin。
本章节选自图书《Kotlin实战》的附录 A 部分内容。
构建 Kotlin 项目的推荐系统是 Gradle。Gradle 是 Android 项目的标准构建系统,它还支持可以使用 Kotlin 的所有其他类型的项目。Gradle 具有灵活的项目模型,因为支持增量构建、长期构建过程(Gradle 守护进程)和其他高级技术,因此可以提供出色的构建性能。
Gradle 团队正在努力支持用 Kotlin 编写 Gradle 构建脚本,这将允许使用相同的语言编写应用程序及其构建脚本。在本文的编写过程中,这项工作仍在进行。可以在 https://github.com/gradle/gradle-script-kotlin 中找到有关的更多信息。在本书中,我们使用 Groovy 语法来编写 Gradle 构建脚本。
构建 Kotlin 项目的标准 Gradle 构建脚本如下所示 :
脚本在以下位置查找 Kotlin 源文件:
在大多数情况下,推荐将 Kotlin 和 Java 源文件放在同一目录中。尤其是当你把 Kotlin 引入现有项目时,使用单个源文件目录可以减少 Java 文件转换为 Kotlin 的阻力。
如果你使用了 Kotlin 反射,则需要另外添加一个依赖关系:Kotlin 反射库。为此,请在 Gradle 构建脚本的 dependencies 中添加以下内容 :
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
和普通的 Java 应用相比,Android 应用使用了不同的构建过程,所以需要使用 不同的 Gradle 插件来构建。不是添加 apply plugin: ‘kotlin’,需要把下面 的代码添加到构建脚本中 :
apply plugin: 'kotlin-android'
剩下的设置和其他非Android 应用的设置一样。
如果你喜欢把 Kotlin 源代码放在特定目录下(如src/main/kotlin),则需要注册它们,以便 Android Studio 识别它们为源目录。可以用以下代码段来实现:
android {
...
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
}
许多 Java 框架,特别是在 Android 开发中使用框架,都依赖注解处理在编译时 生成代码。要在 Kotlin 中使用这些框架,需要在构建脚本中启用 Kotlin 注解处理。 可以通过添加下面的代码来实现 :
apply plugin: 'kotlin-kapt'
如果你试图引入 Kotlin 到现有的一个使用注解处理的 Java 项目中,那么需要删除 apt 工具的现有配置。Kotlin 注解处理工具包含了 Java 和 Kotlin 类的处理,如果同时有两个单独的注解处理工具会很多余。可以使用 kapt 依赖配置来配置注解处理所需的依赖关系:
dependencies {
compile 'com.google.dagger:dagger:2.4'
kapt 'com.google.dagger:dagger-compiler:2.4'
}
如果你对 androidTest 或 test 使用注解处理器,则对应的 kapt 配置应该分别为 kaptAndroidTest 和 kaptTest。
如果你喜欢使用 Maven 来构建项目,Kotlin 也是支持的。最简便的方式是使用 org.jetbrains.kotlin:kotlin-archetype-jvm 原型来创建 Kotlin 的 Maven 项 目。对于现有的 Maven 项 目,可以简单地通过在项目的 Kotlin IntelliJ IDEA 插件中选择 Tools > Kotlin > Configure Kotlin 添加对 Kotlin 的支持。
要手动给 Kotlin 项目添加 Maven 的支持,需要执行以下步骤 :
由于篇幅的关系,在这里我们就不展示完整的 pom.xml 示例了,可以在在线文档中找到它们,网址为 :https://kotlinlang.org/docs/reference/using-maven.html。
在混合的 Java / Kotlin 项目中,需要配置 Kotlin 插件,以便它在 Java 插件之前运行。这个很有必要。因为 Kotlin 插件可以解析 Java 源代码,而 Java 插件只能读取 .class 文件。因此,需要在 Java 插件运行之前将 Kotlin 文件编译为 .class。可以在
http://mng.bz/73od 上找到如何配置的示例。
Kotlin 提供了两种任务来使用 Ant 构建项目 :
任务用于编译纯 Kotlin 的模块,而
作为
的扩展用于构建混合的 Kotlin/Java 模块。这里是使用
的一个最小示例 :
Ant 任务
会自动添加标准库的依赖,所以你不必在配置时添加额外的参数。它也支持打包编译的 .class 文件到一个 jar 文件。这里是一个使用
任务来构建一个混合的 Java / Kotlin 模块的示例:
和
不同的是,
并不支持自动打包编译的类,所以这个示例中单独使用了
任务来打包。
《Kotlin 实战》
《Kotlin 实战》将从语言的基本特性开始,逐渐覆盖其更多的高级特性,尤其注重讲解如何将 Koltin 集成到已有 Java 工程实践及其背后的原理。本书分为两个部分。第一部分讲解如何开始使用 Kotlin 现有的库和API,包括基本语法、扩展函数和扩展属性、数据类和伴生对象、lambda 表达式,以及数据类型系统(着重讲解了可空性和集合的概念)。第二部分教你如何使用 Kotlin 构建自己的 API,以及一些深层次特性——约定和委托属性、高阶函数、泛型、注解和反射,以及领域特定语言的构建。《Kotlin 实战》适合广大移动开发者及入门学习者,尤其是紧跟主流趋势的前沿探索者。
作者:本书作者为 JetBrains 的 Kotlin 核心开发者!Dmitry Jemerov 是Kotlin 最早的贡献者之⼀,创建了最初版本的 Kotlin JVM 字节码⽣成器,并且还在世界各地的活动上做了很多关于 Kotlin 的演示。⽬前他带领了进⾏ Kotlin IntelliJ IDEA 插件开发的团队。
Svetlana Isakova 从事编译器类型推导和重载解析⼦系统的⼯作。现在她是⼀名技术布道者,在各种会议上进⾏ Kotlin 相关讨论并从事 Kotlin 在线课程的相关⼯作。
译者:覃宇,ThoughtWorks 高级咨询师,10余年移动应用开发经验,Android 技术专家,曾为AOSP贡献过测试用例;目前专注于移动应用的架构设计、自动化测试以及持续交付。
罗丽,高级软件工程师,移动技术开发顾问,拥有丰富的软件开发经验, 熟悉React Native,Android,iOS等多种开发技术。目前任职于ThoughtWorks海外事业部,曾在多个大型移动应用项目中担任技术顾问。
李思阳,ThoughtWorks咨询师,移动开发工程师。熟悉Android、Mobile Web相关技术,有着丰富的移动应用开发经验,在移动应用体验和兼容性相关领域有独特的见解;长期关注Android领域相关技术动向。
蒋扬海,ThoughtWorks移动开发咨询师,深耕Android开发多年,应用开发经验丰富,对Android开发领域的技术有广泛的涉猎,对Android技术动向有着敏锐的洞察力。
点击参与图书赠书活动:http://mp.weixin.qq.com/s/NQkaOBO3040obRlSPVMF4Q