在今年的 Google I/O 大会上宣布 Kotlin 为 Android 开发的第一语言,既然官方都已经选择了它,我们正在学习 Android 的和 Android 开发者们自然就要了解如何使用它。

1、为什么使用Kotlin

Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。

Kotlin 非常适合开发 Android 应用程序,将现代语言的所有优势带入 Android 平台而不会引入任何新的限制:

  • 兼容性:Kotlin 与 JDK 6 完全兼容,保障了 Kotlin 应用程序可以在较旧的 Android 设备上运行而无任何问题。Kotlin 工具在 Android Studio 中会完全支持,并且兼容 Android 构建系统。
  • 性能:由于非常相似的字节码结构,Kotlin 应用程序的运行速度与 Java 类似。 随着 Kotlin 对内联函数的支持,使用 lambda 表达式的代码通常比用 Java 写的代码运行得更快。
  • 互操作性:Kotlin 可与 Java 进行 100% 的互操作,允许在 Kotlin 应用程序中使用所有现有的 Android 库。这包括注解处理,所以数据绑定和 Dagger 也是一样。
  • 占用:Kotlin 具有非常紧凑的运行时库,可以通过使用 ProGuard 进一步减少。 在实际应用程序中,Kotlin 运行时只增加几百个方法以及 .apk 文件不到 100K 大小。
  • 编译时长:Kotlin 支持高效的增量编译,所以对于清理构建会有额外的开销,增量构建通常与 Java 一样快或者更快。

因为我们这里介绍的是 Kotlin 在 Android 中的使用,所以对 Kotlin 的介绍就不深入了,有兴趣的可以上它的官网查阅更多资料,它的中文社区可以看看。就开始谈 Kotlin 的环境配置。

2、Kotlin的环境配置

现在我们要在 Android Studio 中使用 Kotlin 第一步需要为它添加 Kotlin 的插件,相信大家都对安装插件很熟悉了,打开 setting,选择 plugins,搜索 Kotlin:

我安装了以前的版本,如果你没有安装过 Kotlin 的插件,那显示的就是 install,等一段时间下载好,重启下 Android Studio,我们可以看到:

使用Kotlin开发Android基础介绍_第1张图片

  • Kotlin File/Class:一个普通的Kotlin类,类似普通的Java类
  • Kotlin Actiivty:一个Activity类

在创建的工程里第一次使用 Kotlin,类创建好后会显示“Kotlin not configured”,点击“Configure”,进入Kotlin配置页面。

根据需要选择需要配置的范围,全部模块或单个模块,然后确定。配置完成后会自动在这个工程下的 build.gradle 与 moudle 下的build.gradle下配置相应的参数。

Project 下的 build.gradle:

使用Kotlin开发Android基础介绍_第2张图片

module下的 build.gradle:

使用Kotlin开发Android基础介绍_第3张图片

现在我们就可以在 Android Studio 中使用 Kotlin,我们新建一个 Kotlin Activity,运行一下;

class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)    }}

因为是百分百兼容 Java,所以我们在 xml 中的设置并没有变化,同样的布局文件在 Java 和 Kotlin 中都可以使用。

使用Kotlin开发Android基础介绍_第4张图片

3、Kotlin的基本语法

Kotlin 完全兼容了 Java,我们在 Java 中可以使用的类在 Kotlin 中同样可以使用,不过代码的格式就不太一样了。

Kotlin 中先写出类名或变量名,在“:”后面是要继承或使用的类,实现多个接口用“,”连接即可。

class MainActivity : AppCompatActivity() {    private lateinit var mTextView : TextView    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        mTextView = findViewById(R.id.hello) as TextView        mTextView.text = "Hello Kotlin"    }}

因为 TextView 的初始化只能在 onCreate() 中,所以我们就要用到 lateinit 关键字。

对于非空类型的属性是必须初始化的。如果我们希望延迟进行初始化,就可以使用 lateinit 关键字了。lateinit 只能在不可null的对象上使用,必须为 var,不能为 primitives(Int、Float等基本类型):

private val count : Int = 3

var 表示变量,也就是既可以 get 也可以 set;val 表示常量,就只有 getter 方法啦。

如果不使用 lateinit 还有比较麻烦的方法,用“TextView?”说明我们先不对这个变量做处理先设为 null,但之后使用时就需要对它做空异常判断。

class MainActivity : AppCompatActivity() {    private var mTextView : TextView? = null    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        mTextView = findViewById(R.id.hello) as TextView        mTextView!!.text = "Hello Kotlin"    }}

Kotlin 可以直接对一些有 getter 和 setter 方法的属性做操作,也可以调用各种类的方法:

mTextView.setText("Hello Kotlin")mTextView.setTextColor(Color.BLUE)mTextView.setTextSize(20f)

使用Kotlin开发Android基础介绍_第5张图片

Kotlin 和 Java 基本语法的不同大都在初始命名上面,熟悉后还是很简便的。

4、anko的简单使用

Anko 是一个使开发Android应用更简单更快捷的库,它可以实现很多对界面的操作,使用它是用 Kotlin 来写,要使用我们先要添加依赖:

compile "org.jetbrains.anko:anko-sdk23:0.9"

我们这里简单了解一下它的作用:

verticalLayout {    val name = editText()    button("Say Hello") {        onClick { toast("Hello, ${name.text}!") }    }}

这样使用 Kotlin,name 就变成了一个 EditText 对象,界面也会变成这样:

使用Kotlin开发Android基础介绍_第6张图片

我们使用 Anko 还可以简化 findViewById 的操作:

mTextView = find(R.id.hello)

5、不用findViewById

这里再介绍一个 Kotlin 的插件——kotlin-android-extensions,让我们用更少的代码来开发程序 。该插件自动创建了很多的属性来让我们直接访问XML中的view。因此不需要你在布局中去找到这些view。

该插件会代替任何属性调用函数,比如获取到view并具有缓存功能,以免每次属性被调用都会去重新获取这个view。这个缓存装置只会在Activity或者Fragment中才有效。

首先我们在 build.gradle 中声明使用这个插件:

apply plugin: 'kotlin-android-extensions'

这样我们就可以直接用布局文件中设置的控件 ID 来控制 View 啦:

class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        hello.setText("Hello Kotlin")        hello.setTextColor(Color.BLUE)        hello.setTextSize(20f)    }}

hello 就是布局中的 TextView的 ID。

6、空指针处理

Java 中,NullPointerException 可以说是最常见的异常了,一旦出现,程序就会崩溃,所以我们总要对那些有可能是 Null 的变量进行非空判断,我从网上 copy 了一个例子:

public void test(String string) {    if (string != null) {        char[] chars = string.toCharArray();        if (chars.length > 10) {            System.out.println(((Character)chars[10]).hashCode());        }    }}

虽然判断并不复杂,但变量一多了,就很容易忽略掉,事后处理不一定能快速解决。而 Kotlin 中空指针异常得到了很好的解决。

  • 在类型上的处理,即在类型后面加上“?”,即表示这个变量或参数以及返回值可以为 null,否则不允许为变量参数赋值为 null 或者返回 null。
  • 对于一个可能是 null 的变量或者参数,在调用对象方法或者属性之前,需要加上“?”,否则编译无法通过。

看看相同效果的代码用 Kotlin 是怎么实现的:

class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        testNullSafeOperator(null)        testNullSafeOperator("12345678901")        testNullSafeOperator("123")    }    fun testNullSafeOperator(string: String?) {        System.out.println(string?.toCharArray()?.getOrNull(10)?.hashCode())    }}

testNullSafeOperator() 方法的效果是一样的,不过可以看到我们并没有自己去做 NULL 判断,这个结果为:

null
49
null

从结果可见,并没有像 Java 那样抛出 NullPointerException,而是遇到空指针则不继续执行了。

我们下载了 Kotlin 插件后,会增添一个 Kotlin 工具,有个功能可以把 Kotlin 代码转化为字节码,还提供给我们反编译为 Java 的功能,我们对比就可以知道“?”做了什么。

我们看了字节码和 Java 代码可以知道其实并不是没有做空指针判断,而是空指针安全操作符“?”内部为我们完成了这些。

这篇博客就到这里,关于 Kotlin 我是在 Google I/O 大会后才开始知道它的,虽然它有很多与 Java 相同的东西,不过也有很多变化。了解我上面提到的已经可以进行项目开发,但身为一个合格的开发者,是不能满足于此的,我们还要一步步学好 Kotlin,这里有个资源博客Kotlin 资源大全。关于基础语法可以看看这个Kotlin基础语法。

结束语:本文仅用来学习记录,参考查阅。

更多相关文章

  1. Android Eclipse插件TabHost问题(转载)
  2. android中实现指针滑动的动态效果
  3. Unity2019通过unity获取Android动态权限(不用在Android写插件)
  4. android adb配置环境变量
  5. Android jni系统变量、函数、接口定义汇总
  6. Android Studio 的 gradle 插件升级失败

随机推荐

  1. android studio 格式化代码时注解不换行
  2. Android: How to Capture Screen in Ging
  3. 用SAX解析xml文件
  4. Android 调用系统的分享[完美实现同时分享
  5. DataBinding赋值本地图片src
  6. 安卓4.X系统 增加蓝牙接收文件类型
  7. Android(安卓)studio中Build.gradle详细
  8. android studio使用定制化android sdk
  9. Android手机监控应用(一)
  10. Android Studio无法在线更新