初试Kotlin-使用Kotlin运行Android的第一个项目
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:
按照之前的写法如下:
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.mykotlinimport android.support.v7.app.AppCompatActivityimport android.os.Bundleimport 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
更多相关文章
- C语言函数的递归(上)
- Android(安卓)基于Zxing扫码实现(三)、从相册选取二维码
- java与VC通信-socket
- Android/Java每日积累[2/27-3/3]
- Android下关于Dialog的学习
- Android系统深度游
- phoneGap插件
- Android(安卓)NDK笔记
- Android(安卓)OpenGL ES 开发入门