Java 和 C++ 之后,Google 在 I/O 2017 上宣布 Android 加入了对 Kotlin 编程语言的支持。Kotlin 由 Java 集成开发环境 IntelliJ IDEA 的开发商 JetBrains 开发,2012 年开源,采用 Apache 2.0 许可证,它是一个运行在 Java 虚拟机上的静态类型编程语言。Kotlin 虽然与 Java 的语法不兼容,但设计成可以与 Java 代码互操作,可复用现有的 Java 类库。Google 的 Android 团队称赞 Kotlin 拥有出色的设计,是一种成熟的语言,能让 Android 应用的开发更快更有趣。Android Studio 3.0 已经整合了对 Kotlin 的支持,不再需要额外安装插件。JetBrains 表示,他们会继续支持其它平台。如果你还记得的话,去年曾有报道称 Google Android 考虑采用苹果的 Swift 语言,而 Swift 就被称为是苹果的 Kotlin。
1、Kotlin介绍
[Kotlin](https://kotlinlang.org/)
Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者。Java是世界上使用最多的编程语言之一,当其他编程语言为更加便于开发者使用而不断进化时,Java并没有像预期那样及时跟进。
Java缺失的很多特性在最新的修订版中逐渐覆盖到了,但Android开发者暂时还没能够使用它们。这就使得类似Kotlin这样的语言有了用武之地了:在旧的开发环境中使用现代语言的特性。
Kotlin是什么?
Kotlin是由JetBrains创建的基于JVM的编程语言,IntelliJ正是JetBrains的杰作,而Android Studio是基于IntelliJ修改而来的。Kotlin是一门包含很多函数式编程思想的面向对象编程语言。
Kotlin生来就是为了弥补Java缺失的现代语言的特性,并极大的简化了代码,使得开发者可以编写尽量少的样板代码。
2、配置工程
新建一个Project “MyKotlin”
在项目的build.gradle上添加kotlin版本号
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = "1.1.2"
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
在module中的build.gradle添加kotlin的依赖,添加对android的支持和添加java的编译路径,在main下创建kotlin目录 并在gradle文件写上后的完整的build.gradle如下:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
buildscript {
repositories {
jcenter()
}
}
android {
compileSdkVersion 24
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.xuboyu.mykotlin"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//记录在main下创建kotlin目录
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
//compile kotlin
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
点击Sync Now重新加载一下项目
3、代码转换
可以选择MainActivity 然后选择code–>>Convert Java File to Kotlin File …然后将生成的文件kt 剪切到kotlin目录下。
注意:
如果按照上面的步骤执行后没有在code中仍然没有Convert Java File to Kotlin File … 这个选项的话,就按照下面的步骤走
- 使用Android Studio下载Kotlin相关插件
执行 Settings -> plugins -> BrowseRepositories中搜索“Kotlin”
Kotlin在语法上整体比起原先的java要比较简洁,简单,语法简单不罗嗦,使用var表示变量,使用val表示常量,连方法(function)都缩写成fun,而类的继承和实现则更加简单,使用:即可,而且每个句子都不用加分号(;)。在控件的初始化在之前的常规写法中,在定义了一个控件之后,必须使用FindViewById来获取到该layout中的控件,然后才可以进行setonclicklistener进行监听等等的操作,对比一下两者在调用一个TextView的setText的过程就可以看出来Kotlin在使用时可以减少一定的代码量。
一个如下的textview:
<TextView
android:id="@+id/text"
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" />
按照之前的写法如下:
package com.example.xuboyu.mykotlin;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.text);
textView.setText("XuBoYu");
}
}
使用Kotlin的写法如下:
package com.example.xuboyu.mykotlin
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
text.setText("XuBoYu")
text.setTextSize(20.0f)
}
}
运行结果如下:
另外一个值得注意的地方是Kotlin对于原本java中的空指针即NullPointerException或者NPE自带了空指针安全保护,原本我们在java中需要写防御性的代码来判断对象是不是null的情况,Kotlin中空指针异常得到了很好的解决。在类型上的处理,即在类型后面加上?,即表示这个变量或者参数以及返回值可以为null,否则不允许这个变量参数为null或者返回null!也就是说,对于一个可能是null的变量或者参数,在调用对象方法或者属性之前,需要加上?,否则编译无法通过!(Kotlin不允许声明变量但不初始化)
//赋非空值
var str1 :String = "xuboyu"
//设为null
var str2 :String? = null
//强制设为null
var str3 :String = null!!
对于其他更多的有关Kotlin本人也刚刚接触学习,这算是记录一下这次学习,IT世界的新老更替永远比我们学习的速度要快,学无止境!
更多具体的信息可以在Kotlin的网址上详细查阅: http://kotlinlang.org/docs/tutorials/android-plugin.html
- Kotlin相关网址
Kotlin官网
http://kotlinlang.org
l Kotlin-github地址
https://github.com/JetBrains/kotlin