Kotlin 简介
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的 Swift,由 JetBrains 设计开发并开源。
Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。
在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。
Kotlin 的优点
简洁: 大大减少样板代码的数量。
安全: 避免空指针异常等整个类的错误。
互操作性: 充分利用 JVM、Android 和浏览器的现有库。
工具友好: 可用任何 Java IDE 或者使用命令行构建
使用命令运行 kotlin 文件
我们知道运行 java 文件,需要对 java 文件进行编译并且运行。
同样,kotlin 也需要进行编译并且运行,所以需要下载相关 kotlin 库(类似与 java 库),同时配置相关环境能够编译 kotlin 文件;
Kotlin 命令行编译工具下载地址:https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2 ,使用 1.1.2-2 版本,最新版本可在 git 查找;
下载完成后,解压到指定目录,然后将 bin 目录添加到系统环境变量。bin 目录包含编译和运行 Kotlin 所需的脚本。
这里需要注意 bin 中要包括 kotlinc-jvm 等文件,之前本人用最新版本的时候发现没有 kotlin-jvm 相关文件,调试了半天总是报错,换回版本后可正常运行;
以下基于 Windows 操作;
创建一个名为 hello.kt 文件,代码如下:
hello.kt
fun main(args: Array) {
println("hello kotlin!")
}
使用 Kotlin 编译器编译应用:
kotlinc hello.kt
编译之后可以看到会生成几个文件,其中有一份 HelloKt.class 文件;
此时继续使用命令行:
kotlin HelloKt
运行完成第一行代码;
Android Studio 中 Kotlin 环境的搭建
Android Studio 从 3.0(preview)版本开始将内置安装 Kotlin 插件。
打开 Settings ,在右侧找到 Plugins 选项,搜索框输入 "Kotlin" 查找,点击 Search in repositories(仓库中搜索),然后安装即可,安装完成之后需要重启 Android Studio。
创建项目,并且配置 Kotlin;
项目创建一个 Empty Activity ;
配置 Language 选项为 Kotlin 语言;
查看项目;
可以看到,项目的结构和 java 项目类似,而相关 Activity 则运用了 Kotlin 语言进行编写,同时文件命名也以 .kt 结尾;
接下来,继续查看项目和主工程下的 gradle 文件;
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
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
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
项目中用到了 Kotlin 插件,其版本号为 1.3.50
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.kotlindemo"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
同时主工程也使用到了 Kotlin 插件,接下来在项目基础上创建一个 Kotlin 的类;
创建 TestActivity,补充相关代码;
package com.example.kotlindemo
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
/**
* ****************************************************************
* 文件名称 : com.example.kotlindemo
* 作 者 : huhaiqiang
* 邮箱 : [email protected]
* 创建时间 : 2021-03-13 16:42
* 文件描述 :`
* 版权声明 : Copyright (C)
* 修改历史 : 2021-03-13 1.00 初始版本
*****************************************************************
*/
class TestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test);
}
}
既然写好了第二个页面,就顺便在第一个页面实现一下相关跳转吧;
首先,对 activity_main 页面增加控件 id;
MainActivity 中运用 kotlin 语言实现跳转;
hello_test.setOnClickListener(View.OnClickListener {
var intent = Intent(this,TestActivity::class.java)
startActivity(intent)
})
这里不用再通过 findViewById 方式获取到 View 再次进行设置监听,直接引用 id 即可。
运行 app ,点击 MaiActivity 中的 TextView 即可实现跳转;
java 转换成 kotlin
这里先创建 Java 类
public class TestSwitchActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_switch);
}
}
然后在 Code 选项中 选择 转换 java 为 kotlin。转换完成后的效果;
class TestSwitchActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_switch)
}
}
同时也可以看到,转换前和转换后文件属性发生了变化;