重要资源

官方资源:官网 、 官网源码 、官网文档 、 在线 IDE 、GitHub
中文资源:中文官网 、中文文档 

Kotlin的背景

Kotlin 是JetBrains在2010年推出的一种基于JVM的静态类型编程语言。
JetBrains(位于东欧捷克)是著名的JAVA开发IDE IntelliJ IDEA(Android Studio基于此开发) 软件的开发公司。
Kotlin 来自JetBrains的圣彼得堡团队,名称取自圣彼得堡附近的一个小岛(Kotlin Island)。

用于现代多平台应用的静态编程语言,与 Java™ 和 Android™ 100% 可互操作
Kotlin 现在是 Android 官方开发语言了!
构建用于以下平台的应用:JVM,Android,浏览器、原生(就快好了)。

为什么选择 Kotlin

简洁

大大减少样板代码的数量。
使用一行代码创建一个包含 getters、 setters、 equals()、 hashCode()、 toString() 以及 copy() 的 POJO:
data class Customer(val name: String, val email: String, val company: String)
1
1
 
1
data class Customer(val name: String, val email: String, val company: String)
或者使用 lambda 表达式来过滤列表:
val positiveNumbers = list.filter { it > 0 }
1
1
 
1
val positiveNumbers = list.filter { it > 0 }
想要单例?创建一个 object 就可以了:
object ThisIsASingleton {
val companyName: String = "JetBrains"
}
3
3
 
1
object ThisIsASingleton {
2
    val companyName: String = "JetBrains"
3
}

安全

避免空指针异常、自动类型转换。
彻底告别那些烦人的 NullPointerException
var output: String
output = null // 编译错误
2
2
 
1
var output: String
2
output = null   // 编译错误
Kotlin 可以保护你避免对可空类型的误操作
val name: String? = null    // 可空类型
println(name.length()) // 编译错误
 
1
val name: String? = null    // 可空类型
2
println(name.length())      // 编译错误
注意,String? 表示可以为 null 的 String 类型(可空类型)。
并且如果你检查类型是正确的,编译器会为你做自动类型转换
fun calculateTotal(obj: Any) {
if (obj is Invoice)
obj.calculateTotal()
}
4
4
 
1
fun calculateTotal(obj: Any) {
2
    if (obj is Invoice)
3
        obj.calculateTotal()
4
}

互操作性

充分利用 JVM、Android 和浏览器的现有库。
使用 JVM 上的任何现有库,因为有 100% 的兼容性,包括 SAM 支持。
import io.reactivex.Flowable
import io.reactivex.schedulers.Schedulers
Flowable
.fromCallable {
Thread.sleep(1000) // 模仿高开销的计算
"Done"
}
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.single())
.subscribe(::println, Throwable::printStackTrace)
10
10
 
1
import io.reactivex.Flowable
2
import io.reactivex.schedulers.Schedulers
3
Flowable
4
    .fromCallable {
5
        Thread.sleep(1000) //  模仿高开销的计算
6
        "Done"
7
    }
8
    .subscribeOn(Schedulers.io())
9
    .observeOn(Schedulers.single())
10
    .subscribe(::println, Throwable::printStackTrace)
无论是 JVM 还是 JavaScript 目标平台,都可用 Kotlin 写代码然后部署到你想要的地方
import kotlin.browser.window
fun onLoad() {
window.document.body!!.innerHTML += "<br/>Hello, Kotlin!"
}
4
4
 
1
import kotlin.browser.window
2
fun onLoad() {
3
    window.document.body!!.innerHTML += "<br/>Hello, Kotlin!"
4
}

工具友好

可用任何 Java IDE 或者使用命令行构建。
一门语言需要工具化,而在 JetBrains,这正是我们做得最好的地方!

Kotlin Android开发

Intellij IDEA 是 JetBrains 提供的集成开发环境,可以用来开发 Kotlin 应用程序。
如果你是一名 Android 开发者,你也可以使用 Android Studio 来开发 Kotlin 程序。如你所知,Android Studio 其实就是 Intellij IDEA 的插件扩展,Intellij IDEA 是由 JetBrains 所开发,而 Kotlin 同样是由 JetBrains 创造的,其中的兼容性自然不用多说。

安装 Kotlin 插件

Android Studio 从 3.0 版本开始内置安装 Kotlin 插件。如果你正在使用的是早期版本, 需要通过 File | Settings | Plugins | Install JetBrains plugin… 搜索并安装 Kotlin 插件。 在 Android Studio 欢迎界面中,可以通过 Configure | Plugins | Install JetBrains plugin… 。 安装完成后需要重新启动 Android Studio。
Settings --> Plugin --> 点击Browse repositories -->
搜索"Kotlin"(2017-5-3更新,696K下载,V1.1.2版本,57.2M)--> Install
2
 
1
Settings --> Plugin --> 点击Browse repositories --> 
2
搜索"Kotlin"(2017-5-3更新,696K下载,V1.1.2版本,57.2M)--> Install
由于插件过大,在AS可能很难下载成功,可以去https://plugins.jetbrains.com/ 搜索后下载,也可以在AS中搜索到后,根据插件提示去指定位置下载。
Kotlin V1.1.2下载(适用于AS 2.3-3) 

创建新工程

使用 Kotlin 来进行 Android 的开发是极其之容易的。在本章教程中,我们直接根据 Android Studio 的引导进行操作。若你当前使用的 IDE 是 Intellij IDEA,所有操作几乎一致。

首先,创建新的工程。选择 Start a new Android Studio project 或者 File | New project。根据弹出的对话框提示进行操作。为新工程命名,选择已安装的 Android SDK 版本。实际上大多数选项均有默认值 ,只需要按几次“回车”键即可。

Android Studio 3.0 在创建新工程时的对话框中提供启用 Kotlin 支持的选项,勾选后可以跳过 “配置 Kotlin 工程(Configuring Kotlin in the project)”的步骤。

在 Android Studio 3.0 中,可以选择使用 Kotlin 创建 activity,因此也不需要“将Java 代码转换为 Kotlin(Converting Java code to Kotlin)”这一步骤。早期版本中则会先使用 Java 创建 activity,然后再使用自动转换工具 进行转换。

将 Java 代码转换为 Kotlin

一般而言,着手使用 Kotlin 的最便捷方式,无疑是将 Java 代码自动转换为 Kotlin。值得一提的是,与其为了使用新的方式表达旧的模式而去查阅文档, 不如直接使用 Java 编写代码,再复制粘贴到 Kotlin 文件中,IntelliJ IDEA(或Android Studio)会提示需要转换代码。

打开 MainActivity.java 文件,使用 Convert Java File to Kotlin File 命令。使用该命令的方式有如下几种, 强烈推荐 Find Action,输入相应的命令名称即可。同样也可以通过菜单栏依次调出 Code | Convert Java File to Kotlin File 或使用快捷键(Ctrl+Shift+Alt+K)完成操作。
注意:
此命令是把【.Java文件】转换为【.kt文件】,并把【Java格式的代码】转换为【Kotlin格式的代码】,而对于【.kt文件中的Java格式的代码】,通过此命令不会转换为Kotlin格式的代码
2
2
 
1
注意:
2
此命令是把【.Java文件】转换为【.kt文件】,并把【Java格式的代码】转换为【Kotlin格式的代码】,而对于【.kt文件中的Java格式的代码】,通过此命令不会转换为Kotlin格式的代码

kotlin-android 插件

在开始编辑此文件时,Android Studio 会提示当前工程还未配置 Kotlin,根据提示完成操作即可;或者可以在菜单栏中选择 Tools | Kotlin | Configure Kotlin …
选择配置时选择 all modules containing kotlin files 以及已安装的最新版本即可。

Kotlin 配置完成后,应用程序的 build.gradle 文件会更新。 你能看到新增了 apply plugin: 'kotlin-android' 及其依赖。
app目录下的build.gradle
apply plugin: 'kotlin-android'
...
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
3
3
 
1
apply plugin: 'kotlin-android'
2
...
3
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
根目录下的build.gradle
buildscript {
ext.kotlin_version = '1.1.2-3'
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
6
6
 
1
buildscript {
2
    ext.kotlin_version = '1.1.2-3'
3
    dependencies {
4
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
5
    }
6
}

构建和发布Kotlin应用程序

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

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

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

**Kotlin Android 扩展插件

本教程介绍如何使用 Kotlin Android 扩展插件提升安卓的开发体验。

背景

相信每一位安卓开发人员对 findViewById() 这个方法再熟悉不过了,毫无疑问,潜在的 bug 和脏乱的代码令后续开发无从下手的。 尽管存在一系列的开源库能够为这个问题带来解决方案,然而对于运行时依赖的库,需要为每一个 View 注解变量字段。现在 Kotlin 安卓扩展插件能够提供与这些开源库功能相同的体验,且不需要添加任何额外代码,也不影响任何运行时体验。

我们可以写出如下代码:
import kotlinx.android.synthetic.main.activity_main.*
class MyActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView.setText("Hello, world!")// 而不是 findView(R.id.textView) as TextView
}
}
8
8
 
1
import kotlinx.android.synthetic.main.activity_main.*
2
class MyActivity : Activity() {
3
    override fun onCreate(savedInstanceState: Bundle?) {
4
        super.onCreate(savedInstanceState)
5
        setContentView(R.layout.activity_main)
6
        textView.setText("Hello, world!")// 而不是 findView(R.id.textView) as TextView
7
    }
8
}
textView 是对 Activity 的一项扩展属性,与在 activity_main.xml 中的声明具有同样类型。

kotlin-android-extensions 插件

Kotlin 安卓扩展插件是 Kotlin IDEA 插件的组成之一,因此不需要再单独额外安装,开发者仅需要在项目的 build.gradle 文件中启用即可:
apply plugin: 'kotlin-android-extensions'
1
1
 
1
apply plugin: 'kotlin-android-extensions'
仅需要一行代码导入指定布局文件中所有控件属性:
import kotlinx.android.synthetic.main.<布局文件名称>.*
1
1
 
1
import kotlinx.android.synthetic.main.<布局文件名称>.*
若需要调用 View 的合成属性(在适配器类中非常有用),同时还应该导入
import kotlinx.android.synthetic.main.<布局文件名称>.view.*
1
1
 
1
import kotlinx.android.synthetic.main.<布局文件名称>.view.*
导入完成后即可调用在xml文件中以视图控件命名属性的对应扩展

多渠道

安卓扩展插件现已支持安卓多渠道。假设当前在 build.gradle 文件中指定一个名为 free 的渠道:
android {
productFlavors {
free {
versionName "1.0-free"
}
}
}
7
7
 
1
android {
2
    productFlavors {
3
        free {
4
            versionName "1.0-free"
5
        }
6
    }
7
}
所以现在只需要添加一行导入语句即可从 free/res/layout/activity_free.xml 布局中导入所有的合成属性:
import kotlinx.android.synthetic.free.activity_free.*
1
1
 
1
import kotlinx.android.synthetic.free.activity_free.*

背后原理

Kotlin 安卓扩展作为 Kotlin 编译器的插件,主要有两大作用:
在每一个 Kotlin Activity 中添加一个隐藏缓存函数以及一个变量。该方法非常简洁,因此不会直接对APK体积有明显增加。
使用函数调用替换每一个合成属性。

其工作原理是,当调用合成属性,在模块资源中 Kotlin Activity/Fragment 类作为接收器时,缓存函数将被调用。 例如:
class MyActivity: Activity()
fun MyActivity.a() {
this.textView.setText(“”)
}
4
 
1
class MyActivity: Activity()
2
fun MyActivity.a() { 
3
        this.textView.setText(“”) 
4
}
在 MyActivity 中生成一个隐藏缓存函数,因此我们可以使用缓存机制。
然而在下面的例子中:
fun Activity.b() {
this.textView.setText(“”)
}
3
 
1
fun Activity.b() { 
2
        this.textView.setText(“”)     
3
}
我们并不知道这个函数会被我们自己的来源或者普通的 Java Activity 调用,因此, 即便在前一个示例中的 MyActivity 是接收器,也不会使用缓存。

Kotlin【简介】Android开发 配置 扩展的更多相关文章

  1. 使用Kotlin进行Android开发

     Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者.Java是世界上使用最多的编程语言之一,当其他编程语言为更加便于开发者使用而不断进化时,Java并 ...

  2. Intent简介-Android开发

    一.Intent介绍: Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述 ...

  3. Ubuntu android 开发配置

    1. 安装 Java SDK 1.1下载  java-sun-1.7.1.tar.gz 到Downlowd 目录下 1.2 创建java目录 sudo makrdir  /usr/java 1.3解压 ...

  4. Android开发配置,消除SDK更新时的“https://dl-ssl.google.com refused”异常

    消除SDK更新时的“https://dl-ssl.google.com refused”错误 消除SDK更新时,有可能会出现这样的错误:Download interrupted: hostname i ...

  5. Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码

    以前写过两个Android开发配置文档,使用NDK进行JNI开发,这样能够利用以前已经写好的C++代码. 前两篇博客地址: http://blog.csdn.net/watkinsong/articl ...

  6. android 开发从入门到精通

    Android-Tips This is an awesome list of tips for android. If you are a beginner, this list will be t ...

  7. Android 开发有哪些新技术出现?

    这里记录一下在知乎回答的<Android 开发有哪些新技术出现?>.知乎链接在这里. 原问题如下: Android 开发有哪些新技术出现?可以从UI设计或者一些核心的算法之类的说起 这是我 ...

  8. cocos2dx 开发配置的一些环境变量(mac/linux)

    通常开发需要配置一些环境变量,下面把我电脑的部分配置分析一下. 1.android开发配置,ndk,sdk,ant 2.cocos2dx开发配置,cocos2d-x export COCOS2DX_R ...

  9. 【Bugly 技术干货】Android开发必备知识:为什么说Kotlin值得一试

    1.Hello, Kotlin Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 1. ...

随机推荐

  1. (10) go 错误

    没有 try catch..f.. 自定义错误

  2. Bzoj5188/洛谷P4185 [Usaco2018 Jan]MooTube(并查集)

    题面 Bzoj 洛谷 题解 最暴力的方法是直接判两个点之间的路径最小值是否\(\geq k\),用\(Dijkstra\)可以做到该算法最快效率,但是空间复杂度始终是\(O(n^2)\)的,会\(ML ...

  3. ZXing.Net.Mobile无法识别较大的条码

    ZXing.Net.Mobile无法识别较大的条码 在Xamarin项目中,使用ZXing.Net.Mobile实现条码扫描时,可能会出现无法顺利识别较大的条码,而可以正常识别较小的条码.这是由于ZX ...

  4. FastReport.Net使用:[31]使用带参查询及存储

    带参查询 1.在数据列表中创建一个名为姓名的参数. 然后使用一个对话框,将文本框的ReportParameter(报表参数)选为参数中的姓名. 给童鞋们的一个题目:这里可以改为下拉框,学生列表从数据库 ...

  5. 【BZOJ 3235】 3235: [Ahoi2013]好方的蛇 (单调栈+容斥原理)

    3235: [Ahoi2013]好方的蛇 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 187  Solved: 95 Description 有一天, ...

  6. Tagging Problems & Hidden Markov Models---NLP学习笔记(原创)

    本栏目来源于对Coursera 在线课程 NLP(by Michael Collins)的理解.课程链接为:https://class.coursera.org/nlangp-001 1. Taggi ...

  7. 50.分治算法练习:  二分算法:  2703 奶牛代理商 XII

    时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 小徐从美国回来后,成为了USACO中国区的奶牛销售代理商,专门出售 ...

  8. 37.递推:Pell数列

    总时间限制: 3000ms 内存限制: 65536kB 描述 Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2, ... , an = 2 * an − 1 + ...

  9. c# -- 实现浏览功能(备忘)

    最近在做系统的时候,要实现浏览功能,但是由于本人记性一般,每次写完就忘,所以还是写篇随笔,备忘一下,方便以后查看@_@# 实现功能大概如下: 按钮1:点击浏览按钮后,选择文件(类型为.txt),默认位 ...

  10. ACM -- 算法小结(四)KMP(POJ3461)

        KMP -- POJ3461解题报告 问题描述:给出字符串P和字符串T,问字符串P在字符串T中出现的次数 Sample Input 3 BAPC BAPC AZA AZAZAZA VERDI ...