前言
记不清什么时候翻 Android 官方文档的时候,发现提供的示例代码已经变成了 Kotlin...
逛全球最大同性交友网站( GitHub )也发现越来越多的开源库都是基于 Kotlin 语言...
关于 Kotlin 的相关书籍和资料也开始丰富起来了...
Kotlin,一个神奇的网站...呸...是一个面向 JVM 的静态开发语言,16年推出 1.0 Release 版本,17年被 Google 宣布为 Android 官方开发语言,以及即将到来的 18 年全球开发者大会...
以上这些种种迹象让我从之前的观望态度,开始对 Kotlin 再一次充满了好奇以及跃跃欲试 。
于是,最近在时间允许的情况下,尝试着把项目中某个模块通过 Kotlin 去重写,结果和吃了炫迈一样,发现根本停不下来,直接把整个工程的 Java 代码全部重写成了 Kotlin,最后连 Gradle 的构建脚本语言也被切换到了 Kotlin DSL 上。
嗯,Kotlin 果然有毒...
关于项目
因为这个项目的业务功能不是很复杂,本次实践就直接把项目中的 Java 代码全部用 Kotlin 重写了一遍,我们看下主要包含的功能模块:
- 登录功能
- 消息中心
- 统一容器(H5、Weex 容器)
- 社交分享功能
- 扫码功能
可以看到该 App 偏向于端容器,主要业务都是使用的 H5 和 Weex 页面所写,而Natvie 上的业务不是很复杂。
需要说明的一点是,本次重写不是直接通过工具对原有 Java 类文件进行转换到 Kotlin,虽然 Kotlin 插件提供了这样的功能,但是不推荐大家去这样操作,因为实际转换的过程当中,它并不能很好发挥 Kotlin 真正的强大之处,比如转换之后, 你可能会看到大量的 ?
和 !!
符号, 这是由于 Kotlin 空安全的特性引起,还有一个就是你在重写的时候,也相当于去重构了一遍你之前的代码或者别人的代码,可以很好的帮助你去理解和优化之前的代码逻辑,也会删除了很多无用类和代码,亲测非常有用,而且投入的时间也不多。
实践总结
关于如何在原有的 Android 项目中使用 Kotlin,官方已经提供很详细的指导文档,简单说下,分为两步:
- 升级 Android Studio 到 3.0 版本以上
- 添加 Kotlin Plugin 插件和 Kotlin 依赖库
重写前后对比
-
关于包大小,因为需要引入 Kotlin 的依赖库,所以增加大概 60 KB 的大小,按照现在 Apk 的体量,几乎可以忽略不计。
-
代码量减少 30%
其他的好处
- 代码简洁
-
//一行代码搞定 POJO 类,同时具有 `getter, settting, toString ` 等方法 data class User(val name: String, val sex: String, val email: String, val age: String)
- 扩展函数替代了很多 Utils 类
- 告别 findViewById,比 ButterKnife 更好用
import kotlinx.android.synthetic.main.view_toolbar.*
open class WebContainerActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_web_page)
toolbar.title = "I am title "
}
}
- 作用域函数让你爱不释手
- 强大的表达式语句,使用
when
替代switch
和if else
-
AppConfig.get().apply { when(EnvPreferences.getEnv(app)) { ONLINE -> { ... } PREPARE -> { ... } DAILY -> { ... } } }
投入成本
整个项目重构大概花了两周左右(包括学习 Kotlin 的时间),过程还是很顺利的,且已成功上线了一个版本。
感想
因为一直都是使用 Java 开发,使用 Kotlin 之后,感觉就像打开了新世界,原来写代码可以这么爽,这么酷!