一培愁、搭建步驟
Android Studio 3.3 及之前需要自己引入 Kotlin 相關的庫與插件,AS 3.5 后默認創(chuàng)建的項目都是 kotlin 開發(fā),所以 build.gradle 中都自動加入了相關的庫與插件依賴。大體來說為以下幾個步驟:
- 根 build.gradle 文件中配置 kotlin 插件庫依賴疼鸟,如下:
buildscript {
ext.kotlin_version = '1.3.41'
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
- 在主應用模塊 build.gradle 文件中依賴 kotlin 核心開發(fā)庫以及應用 kotlin plugin,如下:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.core:core-ktx:1.0.2'
}
二庙曙、Kotlin 依賴庫與插件
1. kotlin-android plugin
- 如果是 Java 項目空镜,則使用 plugin: 'kotlin' 插件;
- 如果是 Android 項目捌朴,則使用 plugin: 'kotlin-android' 插件吴攒。
作用:提供編譯 kotlin 源文件(.kt 編譯為 .class)的腳本,由 JetBrains 開發(fā)男旗。
2. kotlin-android-extensions plugin
- 命名空間
kotlinx.android.@
舶斧,由 JetBrains 開發(fā)欣鳖,提供 View Binding察皇、Parcelable 封裝,提升開發(fā)體驗,參考資料 kotlinlang.org/docs/tutori…什荣。
3. kotlin-stdlib-jdk7 lib
- kotlin 語言核心庫矾缓,也即是 kotlin 開發(fā) API 包,命名空間:
kotlin.@
稻爬。
4. androidx.core:core-ktx
- 命名空間
androidx.@
嗜闻,Google 官方開發(fā)的 Kotlin Android 拓展庫,目的在于提供 Android API 的拓展桅锄,涉及 Android 開發(fā)的方方面面琉雳。屬于 JetPack 的一部分。
工具介紹源文檔:https://kotlinlang.org/docs/reference/using-gradle.html#targeting-android
Kotlin 源碼地址:https://github.com/JetBrains/kotlin
三友瘤、Kotlin 編譯與運行
kotlin 的編譯流程和 Java 沒有什么區(qū)別翠肘,均是經(jīng)過 詞法分析 -> 語法分析 -> 語義分析及中間代碼生成 -> 目標代碼生成 。
在 AS 中編寫 .kt 辫秧,構(gòu)建后束倍,可以在 build/tmp/kotlin-classes
直接查看反編譯后的 .class 文件。對于源文件 .kt 和 反編譯后的 .class 盟戏,如下:
// 1. People.kt
package com.coral.kotlin
class People(var name: String?)
// 2. People.class
// IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available
package com.coral.kotlin
public final class People public constructor(name: kotlin.String?) {
public final var name: kotlin.String? /* compiled code */
}
看著反編譯后的代碼和源代碼好像很大差別(直接看 java 源文件編譯后的 class 反編譯代碼還能看懂)绪妹,應該說是反編譯后的代碼,變量類型等都直接是 全路徑包名柿究。(非專業(yè)表達)
四邮旷、Kotlin 發(fā)展歷史
Kotlin 是一種在 Java 虛擬機上 運行的 靜態(tài)類型 編程語言,也可以被編譯為 JavaScript 源代碼蝇摸。
雖然與Java語法并不兼容廊移,但在JVM環(huán)境中 Kotlin 被設計成可以和 Java 代碼相互運作,并可以重復使用如 [Java集合框架] 等現(xiàn)有的 Java 引用的函數(shù)庫探入。
歷史
2011年7月狡孔,JetBrains推出Kotlin項目,這是一個面向JVM的新語言蜂嗽,它已被開發(fā)一年之久苗膝。[5]JetBrains負責人Dmitry Jemerov說,大多數(shù)語言沒有他們正在尋找的特性植旧,但是Scala除外辱揭。但是,他指出Scala的編譯時間過慢這一明顯缺陷病附。[5]Kotlin的既定目標之一是像Java一樣快速編譯问窃。
2012年2月,JetBrains以Apache 2許可證開源此項目完沪。[6]Jetbrains希望這個新語言能夠推動IntelliJ IDEA的銷售域庇。[7]
Kotlin v1.0于2016年2月15日發(fā)布嵌戈。[8]這被認為是第一個官方穩(wěn)定版本,并且JetBrains已準備從該版本開始的長期向后兼容性听皿。
在Google I/O 2017中熟呛,Google宣布在Android上為Kotlin提供最佳支持。
節(jié)選自 Wiki 維基百科 尉姨。