本文预计阅读时间为 15-20 分钟
一、Kotlin-Android-Extensions 简介
Kotlin 从首次推出到现在,可谓发展的十分迅速,独特的空安全特性吸引了很多 Android 开发者去使用,Google 也正式将 Kotlin 这门语言作为 Android 开发的首选语言。Kotlin 官方也为各位开发者提供了一系列的插件,开发文档以及 IDE 支持,本文介绍的 Kotlin-Android-Extensions 就是一款 Kotlin 的安卓开发扩展插件。
二、Kotlin-Android-Extensions 使用
引入
直接在 build.gradle 中引入该插件:
apply plugin: 'kotlin-android-extensions'
使用
模拟的业务场景如下:
- 在 activity_main.xml 中创建一个 id 为 button_test 的 button
- 在 MainActivity.kt 中为这个 button 设置点击事件
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
/**
* Created by Xu on 2020/02/05.
*
* @author Xu
*/
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button_test.setOnClickListener {
// todo
}
}
}
这里可以观察到,并没有熟悉的 findViewById() 方法,而是直接使用了 button_test 这个对象,该对象其实是由插件根据布局 xml 中所设置的控件 id 而自动生成的。
三、Kotlin-Android-Extensions 源码分析
为什么不需要使用到 findViewById() 方法呢?之前我在分析 ButterKnife 源码的时候也问过类似的问题(传送门),最后其实是通过 APT(编译时注解)的方式自动生成了 findViewById 方法,猜测这里也是通过类似的自动生成代码方式帮我们补充了。
我们首先试着去反编译 Kotlin ByteCode,具体是通过打开