第1章 搭建Kotlin开发环境

本章主要介绍Kotlin开发环境的搭建过程,首先阐述Kotlin语言与Android开发之间的关系,接着描述Kotlin开发工具,也就是Android Studio的安装和启动步骤,然后说明SDK及其相关插件的安装与升级方法,接着论述如何对Kotlin工程的编译配置进行调整,最后演示Kotlin新技术带来哪些革命性的变化。

1.1 Kotlin与Android开发的关系

本节主要介绍Kotlin语言与Android开发之间的关系,包括Kotlin的基本概念及其特殊优势,以及Kotlin被谷歌钦定为Android Studio官方开发语言之后的发展大事。

1.1.1 Kotlin语言简介

Kotlin是一种基于JVM的新型编程语言,它完全兼容Java语言,Kotlin代码可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。与流行的Java语言比较,Kotlin具备下列优势:

(1)Kotlin更简洁,完成同样的业务功能,Kotlin代码通常只有对应Java代码的三分之一。

(2)Kotlin更安全,它能够在编码阶段就自动检测常见的BUG,比如引用了空指针等。

(3)Kotlin更强大,它提供了扩展函数、默认参数、接口委托、属性代理等Java所不具备的高级特性,从而可以完成更复杂的业务逻辑。


1.1.2 Android Studio的官方开发语言

Kotlin很早就被运用到Android开发之中,之前一直作为Android Studio的插件提供下载,Android Studio只要安装了Kotlin插件,就能用来开发Kotlin编码的App工程。

2017年5月,谷歌宣布将Kotlin纳入Android Studio开发的官方语言,这意味着Android Studio对Kotlin的编译支持会大大增强,由此掀起了广大安卓开发者学习Kotlin编程的热潮。

2017年10月,Android Studio推出3.0正式版,从3.0版本开始,Android Studio自动集成Kotlin插件,在安装Android Studio 3.0时就连带配置了Kotlin的开发环境。

2017年11月,Kotlin语言推出1.2发布版,该版本的Kotlin具备更好的跨平台特性,编译性能也比1.1版提高了25%左右,同时也更好地支持Android开发。


1.2 Kotlin开发工具

本节主要介绍Kotlin开发环境的搭建以及Kotlin工程的基本操作,包括安装Android Studio的具体步骤、启动Android Studio的详细配置、如何创建一个Kotlin工程、如何新建各种Kotlin文件等。

1.2.1 安装Android Studio

Android Studio的官方下载页面是https://developer.android.google.cn/studio/index.html,在这里可以找到Android Studio的下载地址与使用教程。首先把最新版本的Android Studio下载到电脑本地,然后双击下载完成的Android Studio安装程序,弹出安装欢迎对话框,如图1-1所示。单击该对话框右下方的“Next”按钮,跳到下一页的许可同意对话框,单击“Agree”按钮,进入下一页的组件选择对话框,如图1-2所示。

在工程创建对话框中填写应用名称“Application name”以及公司域名“Company domain”,并选择或填写Android工程的本地保存路径“Project location”。注意,创建页面下方有两个选项“Include C++ support”和“Include Kotlin support”,其中勾选“Include C++ support”表示要进行NDK/JNI开发,但这不是本书的讲解范围,因此不必勾选该复选框;勾选“Include Kotlin support”则表示要进行Kotlin开发,因此务必勾选该复选框,才能继续后面的Kotlin开发学习。确认对话框中的各项信息都填写完毕,单击下方的“Next”按钮,进入目标设备对话框,如图1-17所示。

在编写代码的时候,Android Studio会自动编译。若开发者想手动重新编译,则有以下三种编译方式:

(1)选择菜单“Build”→“Make Project”,这个是编译整个项目下的所有模块。

(2)选择菜单“Build”→“Make Module ***”,这个是编译指定名称的模块。

(3)选择菜单“Build”→“Clean Project”,然后再选择菜单“Build”→“Rebuild Project”,这个是先清理项目,再对整个项目重新编译。

前面新创建的工程当然不会出现编译错误,直接运行就好了。先把手机通过数据线接入开发电脑的USB上,再依次选择菜单“Run”→“Run 'app'”,弹出目标设备选择对话框,列表中便会显示接入的手机设备,如图1-21所示。

单击“OK”按钮,执行测试App的安装操作,不出意外的话,一会儿即可在手机上看到测试应用的启动界面,具体效果如图1-22所示。

1.2.4 新建Kotlin文件

上一小节创建Kotlin工程后主要生成两个文件,一个是Kotlin代码文件MainActivity.kt,另一个是XML布局文件activity_name.xml。其中,MainActivity.kt就是扩展名为kt的Kotlin格式的代码文件,相对应地,Java代码文件的扩展名为java。这个MainActivity.kt是在创建工程时自动生成的,那么如何在已有工程中创建新的Kotlin文件呢?Kotlin代码文件可以分为两类:普通的Kotlin文件、用于页面Activity的文件,这两类Kotlin文件拥有各自的创建方式,具体说明如下。

1. 普通的Kotlin文件创建

右击待创建文件的包名,在弹出的快捷菜单中依次选择“New”→“Kotlin File/Class”,菜单界面如图1-23所示。

其实,Kotlin的文件创建还是很简单的,掌握这些基本的文件操作可以为后面的工具使用打好基础。

1.3 SDK安装与插件升级

本节主要介绍Android Studio 3.0环境对SDK和插件的安装升级说明,包括如何安装最新的SDK、如何升级Gradle插件、如何把Kotlin插件升级到最新版本等。

1.3.1 安装最新版SDK

由于目前官方的Android Studio 3.0安装包没有自带SDK,安装过程也只会去下载Android 8.0的SDK(API 26),因此如果读者是第一次安装Android Studio,就得自己另外安装最新版本的SDK。首先打开Android Studio,在界面右上角的工具栏中找到“SDK Manager”的图标,如图1-30所示。

等待Android Studio下载并安装最新版本的SDK之后,重启Android Studio,即可正常使用该版本的SDK编译工程。

1.3.2 升级Gradle插件

Android Studio 3.0支持的Gradle插件版本至少为4.1,然而通常App工程自带的插件版本不能满足要求,使得Android Studio 3.0打开已有工程时往往要重新下载最新的Gradle插件,造成漫长的等待时间。与其让Android Studio老牛破车般地下载Gradle,不如自己动手将最新版的Gradle插件下载到本地,然后重新配置Gradle插件目录。具体步骤如下:

步骤01 打开电脑上的下载软件,输入Gradle 4.1的下载地址“http://downloads.gradle.org/ distributions/gradle-4.1-all.zip”,把这个4.1的压缩包下载到电脑本地,并解压该压缩包到指定目录,比如“D:\Android\gradle-4.1”。

步骤02 打开Android Studio,依次选择菜单“File”→“Settings”,打开设置对话框,在对话框左侧的菜单列表再依次选择“Build, Execution, Deployment”→“Gradle”,此时对话框右侧展示Gradle插件的配置界面,如图1-32所示。

步骤03 在Gradle配置界面上选中“Use local gradle distribution”,并在下方的“Gradle home:”输入框中填写前面gradle-4.1-all.zip的解压路径,例如“D:\Android\gradle-4.1”。

步骤04 单击Gradle配置界面右下方的“OK”按钮,完成Gradle插件的路径配置。

步骤05 根据提示关闭Android Studio,再次启动Android Studio,即可在Android Studio使用最新版本的Kotlin插件。

1.4 Kotlin简单配置

本节主要介绍Android Studio 3.0环境对Kotlin的编译配置说明,包括如何通过菜单调整Kotlin编译配置、如何手工修改编译配置文件、如何将Java代码转换成Kotlin代码等。

1.4.1 调整Kotlin编译配置

1.3.3小节介绍了如何将Kotlin插件升级到最新版本,不过App工程采取的Kotlin编译版本不一定跟最新版本一致。因为Kotlin允许指定使用某个低版本来编译工程,就像Java即使已经推出1.9版本,也能使用1.8、1.7甚至1.6来编译Java工程。

调整App工程的Kotlin编译版本很简单,依次选择菜单“File”→“Settings”,在打开的窗口左侧菜单列表选中“Kotlin Compiler”,窗口右边便会打开Kotlin编译配置界面,如图1-37所示。

可以看到,“Language version”和“API version”目前选的都是1.1,表示当前App工程采用的Kotlin编译版本为1.1。

1.4.2 修改编译配置文件

只看菜单界面上的Kotlin编译配置还是不够直截了当,到底这个编译版本是在哪个文件里面配置的呢?先打开工程的编译配置文件build.gradle看看,该文件内容如图1-38所示。

图1-38所示的build.gradle文件内容是下面这样的:

buildscript {
//指定Kotlin插件的版本,这里是Android Studio 3.0.1默认的1.1.51
ext.kotlin_version = '1.1.51'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
//指定Kotlin插件的路径
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin: $kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

正如图1-38框中标记的那样,Kotlin工程的编译配置文件比Java编写的App工程多了两处修改,说明如下:

(1)定义了一个外部变量ext.kotlin_version,其值为Kotlin编译版本号“1.1.51”。

(2)指定了Kotlin插件的编译路径,即“org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_ version”。

可是仅仅修改工程级别的build.gradle是不够的。再看看模块级别的build.gradle,该文件内容如图1-39和图1-40所示,其中图1-39所示为文件开头部分的截图,图1-40所示为文件末尾dependencies块的截图。

注意图1-39和图1-40框中的部分,这里依然有两个地方与众不同,说明如下:

(1)文件开头增加了两个插件,即'kotlin-android'和'kotlin-android-extensions',表示该模块会运用Kotlin插件功能。补充Kotlin插件声明后的文件头部如下所示:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

(2)文件末尾的dependencies块增加了Kotlin插件库的编译声明,具体声明语句如下所示:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

综上所述,Kotlin工程与Java编写的App工程相比,一共要调整两个build.gradle的4处编译配置,方能正常支持Kotlin代码的编译运行。

1.4.3 Java代码转Kotlin代码

前面介绍了Kotlin工程的编译配置说明,如果现在有一个Java编码的App工程,要如何将其转换为Kotlin工程呢?

假设读者目前还没有Kotlin基础,那么按照App开发的常规流程,先创建一个新模块,依次选择菜单“File”→“New”→“New Module”,然后一路单击“Next”按钮完成模块创建。再按照“1.4.2修改编译配置文件”的说明,给这个新模块添加Kotlin编译支持。接着打开MainActivity.java,这个文件的内容再熟悉不过了,就是最简单的几行Java代码,如下所示:

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

现在我们要移花接木,把Java代码转换为Kotlin代码。先选中MainActivity.java,再到主界面上依次选择菜单“Code”→“Convert Java File to Kotlin File”,菜单位置如图1-41所示。

代码转换完毕,原来的MainActivity.java变成了MainActivity.kt,文件内容也变成了如下所示的Kotlin代码:

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}

看起来,这个Kotlin的语法与Java似曾相识,但又有所不同。若想解释Kotlin的详细语法规则,可参见本书第2章到第5章的语法部分。这里先把DEMO跑起来再说,依次选择菜单“Run”→“Run 'hello'”启动应用,正常的话,可在接入的模拟器或者真机上看到“Hello World!”,如图1-42所示。