Kotlin 簡介
Kotlin 是一種在 Java 虛擬機上運行的靜態(tài)類型編程語言敞峭,被稱之為 Android 世界的 Swift踊谋,由 JetBrains 設(shè)計開發(fā)并開源。
Kotlin 可以編譯成 Java 字節(jié)碼旋讹,也可以編譯成 JavaScript殖蚕,方便在沒有 JVM 的設(shè)備上運行。
在Google I/O 2017中沉迹,Google 宣布 Kotlin 成為 Android 官方開發(fā)語言睦疫。
Kotlin 的優(yōu)點
簡潔: 大大減少樣板代碼的數(shù)量。
安全: 避免空指針異常等整個類的錯誤鞭呕。
互操作性: 充分利用 JVM蛤育、Android 和瀏覽器的現(xiàn)有庫。
工具友好: 可用任何 Java IDE 或者使用命令行構(gòu)建
使用命令運行 kotlin 文件
我們知道運行 java 文件葫松,需要對 java 文件進行編譯并且運行缨伊。
同樣,kotlin 也需要進行編譯并且運行进宝,所以需要下載相關(guān) kotlin 庫(類似與 java 庫)刻坊,同時配置相關(guān)環(huán)境能夠編譯 kotlin 文件;
Kotlin 命令行編譯工具下載地址:https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2 党晋,使用 1.1.2-2 版本谭胚,最新版本可在 git 查找;
下載完成后未玻,解壓到指定目錄灾而,然后將 bin 目錄添加到系統(tǒng)環(huán)境變量。bin 目錄包含編譯和運行 Kotlin 所需的腳本扳剿。
這里需要注意 bin 中要包括 kotlinc-jvm 等文件旁趟,之前本人用最新版本的時候發(fā)現(xiàn)沒有 kotlin-jvm 相關(guān)文件,調(diào)試了半天總是報錯庇绽,換回版本后可正常運行锡搜;
以下基于 Windows 操作;
創(chuàng)建一個名為 hello.kt 文件瞧掺,代碼如下:
hello.kt
fun main(args: Array<String>) {
println("hello kotlin!")
}
使用 Kotlin 編譯器編譯應(yīng)用:
kotlinc hello.kt
編譯之后可以看到會生成幾個文件耕餐,其中有一份 HelloKt.class 文件;
此時繼續(xù)使用命令行:
kotlin HelloKt
運行完成第一行代碼辟狈;
Android Studio 中 Kotlin 環(huán)境的搭建
Android Studio 從 3.0(preview)版本開始將內(nèi)置安裝 Kotlin 插件肠缔。
打開 Settings 夏跷,在右側(cè)找到 Plugins 選項,搜索框輸入 "Kotlin" 查找明未,點擊 Search in repositories(倉庫中搜索)槽华,然后安裝即可,安裝完成之后需要重啟 Android Studio趟妥。
創(chuàng)建項目猫态,并且配置 Kotlin;
項目創(chuàng)建一個 Empty Activity 煮纵;
配置 Language 選項為 Kotlin 語言懂鸵;
查看項目;
可以看到行疏,項目的結(jié)構(gòu)和 java 項目類似匆光,而相關(guān) Activity 則運用了 Kotlin 語言進行編寫,同時文件命名也以 .kt 結(jié)尾酿联;
接下來终息,繼續(xù)查看項目和主工程下的 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 插件周崭,接下來在項目基礎(chǔ)上創(chuàng)建一個 Kotlin 的類;
創(chuàng)建 TestActivity喳张,補充相關(guān)代碼续镇;
package com.example.kotlindemo
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
/**
* ****************************************************************
* 文件名稱 : com.example.kotlindemo
* 作 者 : huhaiqiang
* 郵箱 : huhaiqiang005@163.com
* 創(chuàng)建時間 : 2021-03-13 16:42
* 文件描述 :`
* 版權(quán)聲明 : Copyright (C)
* 修改歷史 : 2021-03-13 1.00 初始版本
*****************************************************************
*/
class TestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test);
}
}
既然寫好了第二個頁面,就順便在第一個頁面實現(xiàn)一下相關(guān)跳轉(zhuǎn)吧销部;
首先摸航,對 activity_main 頁面增加控件 id;
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/hello_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity 中運用 kotlin 語言實現(xiàn)跳轉(zhuǎn);
hello_test.setOnClickListener(View.OnClickListener {
var intent = Intent(this,TestActivity::class.java)
startActivity(intent)
})
這里不用再通過 findViewById 方式獲取到 View 再次進行設(shè)置監(jiān)聽舅桩,直接引用 id 即可酱虎。
運行 app ,點擊 MaiActivity 中的 TextView 即可實現(xiàn)跳轉(zhuǎn)擂涛;
java 轉(zhuǎn)換成 kotlin
這里先創(chuàng)建 Java 類
public class TestSwitchActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_switch);
}
}
然后在 Code 選項中 選擇 轉(zhuǎn)換 java 為 kotlin读串。轉(zhuǎn)換完成后的效果;
class TestSwitchActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_switch)
}
}
同時也可以看到撒妈,轉(zhuǎn)換前和轉(zhuǎn)換后文件屬性發(fā)生了變化恢暖;