图片 12

Android Kotlin使用指南

5 月份的 Google I/O 上,谷歌宣布 Kotlin-first,Kotlin 开始成为 Android
开发者的首选语言,接着谷歌针对 Kotlin 的相关建设不断。

转载请注明出处:

注:转载或修改转载请在文章开头标明本文地址,笔者重在分享禁止用于其他用途微
信公众号:

本文简介了谷歌推出的 Kotlin 迁移指南相关内容。

图片 1

图片 2

开始从 Java 迁移到 Kotlin

前言

众所周知,2017Google
I/O大会刚开完没几天,可能对于Android开发者来说最关注的内容就是Google将Kotlin作为Android的第一开发语言。在Android
Studio2.3版本之前要使用Kotlin开发的话,需要安装Kotlin
plugin,在大会进行的同时,官方也发布了Android
Studio3.0预览版,称3.0包含开箱即用的Kotlin支持。

有了当初eclipse切换到Android
Studio的前例,现在Kotlin的出现,所以个人觉得要想继续开发Android的话,必须学学Kotlin了。毕竟要跟着Google的步伐走才行,不过短期内Kotlin肯定暂时不会取代Java。

近几年中Kotlin在Android使用上面逐步上升,开发者们很久之前就发现使用kotlin开发更快捷,越来越多的开发者采用Kotlin来开发Android程序。在今年的
Google I/O 大会上,我们很高兴的将Kotli做为Android的官方开发语言。

谷歌建议“由点及面”进行迁移,包括人与代码两个层面:

一、Kotlin是什么?

  • 简介:Kotlin 是一个由 JetBrains(作为目前广受欢迎的Java IDE
    IntelliJ 的提供商,在 Apache 许可下已经开源其Kotlin
    编程语言)开发的基于JVM的编程语言,它可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。

  • Kotlin的设计目标

  • 创建一种兼容Java的语言;

  • 让它比Java更安全,能够静态检测常见的陷阱。如:引用空指针;

  • 让它比Java更简洁,通过支持variable type inference,higher-order
    functions extension functions,mixins and first-class
    delegation等实现;

  • 让它比最成熟的竞争对手Scala语言更加简单。

使用Kotlin来开发Android有以下优势:

  • 表达清晰、简洁、扩展性强
  • 类型安全
  • 空指针安全
  • 和JAVA、C++ 无缝对接

因此,我们对使用kotlin的开发者做了更好的支持,如果你对Kotlin比感兴趣,首先需要将AndroidStuido升级到3.0版本,kotlin工具直接绑定到了这个版本当中。如果你在使用中遇到了问题
请参考kotlin在Android
Studio中的问题

在debug方面,你可以像以前Debug Java来调试你的应用。

你不必纠结于使用kotlin语言还是Java语言去开发Android,kotlin提供了Java语言的互通性,这表示kotlin文件中你可以不用annotation或kotlin指定语意义,就可以在直接在kotlin里面调用java的方法,这意味着你的项目中可以并存Java和kotlin的代码。关于内容,请参考kotlin互操作文档

人的层面,团队内部推举出一位 Kotlin “推广大使”,他需要做到:

二、Kotlin的特性及为什么使用Kotlin?

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 一样快或者更快。

  • 容易入门:对于 Java 开发人员,Kotlin 入门很容易。包含在 Kotlin
    插件中的自动 Java 到 Kotlin 的转换器 有助于迈出第一步。Kotlin 心印
    通过一系列互动练习提供了语言主要功能的指南。

开始试用Kotlin

Android
Studio3.0上你可以很方便的创建一个Kotlin文件项目,转换Java语言为Kotlin语言,并且你可以用你一切Andoid
Studio的工具在Kotlin代码上,例如autocomplete, lint checker, refactoring,
debugging等

  • 创建一个包含Kotlin的项目

    1. 在Android Studio中, 点击 File > New > New Project.
    2. 在初始页面,点击Include Kotlin support
    3. 点击下一步继续,直到你的项目创建完成

    图片 3

    当你选择了一个Activity模版,其将会提供Kotlin代码,只是一些手机或者平板提供了一些常用的Kotlin代码,其余的只会从Java代码转换成Kotlin代码,虽然你可以从官网获得Kotlin代码,但这些代码可能并没有用到Kotlin最好的语言特征。

  • 将Kotlin添加到已经存在的项目
    如果想将Kotlin增加到已经存在的项目中,点击 File >
    New
    选择一个模版。如果你没有看到这个菜单,需要首先打开Project窗口并选择你的app组件。
    图片 4
当配置向导出现,选择**Source Language**选择**Kotlin**  
![](https://developer.android.com/studioprojects/kotlin-new-activity_2x.png)

其他的方式,你可以File > New > Kotlin
File/Class
去创建一个基本的文件,New Kotlin
File/Class
窗口提供了一些文件的选择。你不必担心你用了什么语言,因为在你更改了类型之后,Kotline会自动转换文件类型。

Kotlin文件保存在src/main/java/,你会发现Kotlin文件和Java文件在一个文件夹里面,但是如果你想让你的Kotlin文件和Java文件分开,你可以用src/main/kotlin/代替,如果你需要这样做,只需要在你的配置中添加下面的语句就可以了。

Android {  
   sourceSets {  
       main.java.srcDirs += 'src/main/kotlin'  
   }
}
  • 将已有的Java代码转换为Kotlin代码

在Android Studio 3.0,打开一个Java文件然后选择Code > Convert Java
File to Kotlin File
.
或者创建一个Kotlin文件(File > New > Kotlin
File/Class)
,然后复制你的java代码到Kotlin文件中。当有提示的时候,点击Yes将java代码转换为Kotlin代码,并且可以勾选Don’t
show this dialog next time
来方便你下一次转换。

图片 5

  • 使用包含Kotlin的API

Kotlin提供和Java语言的互通性,所以调用Android
API代码看起来像调用Java,除此之外你可以将这些方法调用与Kotlin语法特征相结合。

下面是一些例子,是在Kotlin中调用Android APIs和Java中调用的区别。

  • 了解 Kotlin 并成为专家

  • 制定 Kotlin 开发流程

  • 参与代码审核,确保 Kotlin 开发流程得到顺利贯彻

  • 组建公司/团队内部的学习小组

  • 主动收集内部的问题并与开发者社区反馈探讨

三、Kotlin在Android Studio2.3之前的环境搭建

图片 6

  • 1、安装Kotlin插件a、打开Android Studio, File -> Settings ->
    Plugins:点击Browse Repositories:

图片 7打开Plugins

b、搜索Kotlin,点击install

图片 8搜索安装Kotlin

c、重启Android Studio即可生效

图片 9重启Android
Studio

  • 2、将Java代码转换为Kotlin安装插件后,可以将java代码直接转换为Kotlin代码,快捷键:Ctrl+Alt+Shift+K

图片 10代码转换

转换前:

package com.shawpoo.app.kotlin;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}

转换后:

package com.shawpoo.app.kotlinimport android.support.v7.app.AppCompatActivityimport android.os.Bundleclass MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) }}
  • 3、工程中配置Kotlin

打开Tools-> Kotlin-> Configure Kotlin in Project:

图片 11配置Kotlin

选择配置时有如下对话框,选择已安装的最新版本即可:

图片 12选择安装最新版本

Kotlin 配置完成后,应用程序的 build.gradle 文件会更新。
点击同步gradle之后可以看到新增了 apply plugin: ‘kotlin-android’
及其依赖。

  • 4、构建和发布用于 Android 的 Kotlin 应用程序

最后构建应用程序,在虚拟机或连接的设备上运行。 所有这些工作与 Java
并无区别。 你可以发布应用程序,并以类似于使用 Java 编写的 Android
应用程序的方式进行签名。

Kotlin有着极小的运行时文件体积:整个库的大小约 859KB(1.1.2-2
版本)。这意味着 Kotlin 对 apk 文件大小影响微乎其微。

就对比 Kotlin与Java所编写的程序而言,Kotlin
编译器所生成的字节码看上去几乎毫无差异。

在Kotlin中声明Activity

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

而代码层面,需要做到:

四、拓展

在Java中声明Activity
public class MyActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);
  }
}
  • 先使用 Kotlin 编写测试(此时项目依然在使用 Java)

  • 使用 Kotlin 编写新代码

  • 将现有代码更新为 Kotlin 代码

用于 Android 开发的工具

Kotlin 团队为 Android 开发提供了一套超越标准语言功能的工具:

  • Kotlin Android 扩展是一个编译器扩展, 可以让你摆脱代码中的
    findViewById()调用,并将其替换为合成的编译器生成的 属性。

  • Anko 是一个提供围绕 Android API 的 Kotlin 友好的包装器的库
    ,以及一个可以用 Kotlin 代码替换布局 .xml 文件的 DSL。

在Kotlin中的OnClick

val fab = findViewById(R.id.fab) as FloatingActionButton
fab.setOnClickListener {
  ...
}

在将现有代码更新为 Kotlin 代码时,可以直接使用 Android Studio
提供的 Java 转 Kotlin 工具,只需要在菜单中选择 “Code → Convert Java File
to Kotlin File” 即可:

扩展阅读

Kotlin中文文档

Kotlin在线工具

Kotlin官方在Github的资料

在Java中的OnClick

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
    ...
  }
});

图片 13

在Kotlin中的Item Click

private val mOnNavigationItemSelectedListener
    = BottomNavigationView.OnNavigationItemSelectedListener { item ->
  when (item.itemId) {
    R.id.navigation_home -> {
      mTextMessage.setText(R.string.title_home)
      return@OnNavigationItemSelectedListener true
    }
    R.id.navigation_dashboard -> {
      mTextMessage.setText(R.string.title_dashboard)
      return@OnNavigationItemSelectedListener true
    }
 }
 false
}

△ Java 转 Kotlin 工具

在Java中的Item Click

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
    = new BottomNavigationView.OnNavigationItemSelectedListener() {
  @Override
  public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
      case R.id.navigation_home:
        mTextMessage.setText(R.string.title_home);
        return true;
      case R.id.navigation_dashboard:
        mTextMessage.setText(R.string.title_dashboard);
        return true;
    }
    return false;
  }
};

另外,Kotlin
的迁移工作没必要一蹴而就,开发者可以按照自己的进度来逐步进行迁移。一个项目中可以同时包含
.java 和 .kt 文件,但同一个文件中不可以既有 Java 也有
Kotlin,开发者也可以在 Kotlin 代码中使用任何 Java 库。

使用JNI与Kotlin

要声实现native(C或C ++)代码的代码,您需要使用external修饰符来标记它:

external fun foo(x: Int): Double

图片 14

使用Kotlin的影响

  • kotlin对Apk size和方法数量的影响:

kotlin在运行时可能会在你的debug APK
中增加7000个方法和1M的大小,如果你使用Koline替换如Guava、RxJava等其他的库,影响可能会小一些。但是你可以在后期通过项目优化或者是混淆来减小包的大小。

  • kotlin的性能影响:

kotlin没有直接的性能影响,但是它和Java一样性能方面的影响和你的使用息息相关。
比如说:在多个collection实例中,重复的复制操作会影响GC性能,调用一个接受非空类型的方法,会增加一个空检查的方法调用(但是你可以通过设置-Xno-param-assertions来禁用编译时运行空指针检查)

由于kotlin运行在JDK6以上,因此所有的版本都可以安全的使用kotlin

△ Android Studio 的 Lint 检查中也可以打开 Kotlin 互操作检查

文档

  • Kotlinlang.orgKotlin的官方网站,包含了所有的基本语法和标准库参考
  • Kotlin Koans
    Online在线IDE中的一系列练习,可帮助您学习Kotlin语法

在 Kotlin 中调用 Java 时,有几点需要注意:

视频

  • Youtube
    通过搜索 “Kotlin on Android” 可以看到高质量的技术讨论

  • O’Reilly
    course
    一个8小时的Kotlin课程,视频的讲师是JetBrains公司的开发者Hadi
    Hariri,介绍Kotlin编程设计。需要购买订阅,7天免费试用。

  • Treehouse
    course

  • Udemy
    course“Kotlin初学者”,从头教起,需要购买订阅,初学者有折扣优惠

  • 将代码标记为 @Nullable 和 @NotNull

  • 使用属性前缀(getName(), setName(), isActive())

  • 避免使用 Kotlin 中的保留关键字(when、is 等)

  • Kotlin in
    Action:
    由 JetBrains 公司kotlin的开发者Dmitry Jemerov 和 Svetlana
    Isakova编写
  • Kotlin for Android
    Developers最早的kotlin书籍之一,由Antonio
    Leiva编写

更详细的 Kotlin 互操作指南可以查看 Android 开发者网站:

社交渠道

  • @kotlinkotlin
    的官方twitter
  • Kotlin
    Communitykotlinlang.org的线下项目和组
  • Kotlin
    Slackkotlin使用者讨论社区
  • Talking
    Kotlinkotlin的半月刊博客

内容引用自:谷歌开发者