关于AndroidStudio Kotlin升级至1.4.20后,Kotlin Android Extensions

关于官方回应

发布者:David Winer,产品经理

    Android Kotlin Extensions Gradle 插件(不要和 Android KTX混淆)于 2017 年发布,为 Kotlin 的 Android 开发带来了两个新的便利功能。

Synthetics:让你用kotlinx.android.synthetic绑定来替换findViewById的调用。
Parcelize:让你可以去除模板,通过@Parcelize注解轻松创建Parcelables。
    此后,我们发布了Android的Viewbinding,这是一个官方支持的库,与Android构建工具链深度集成,并提供了与Kotlin synthetics类似的功能。虽然我们继续推荐Parcelize,但使用Kotlin synthetics出现了一些缺点:

 1. 会污染全局命名空间

 2. 不会暴露可空性信息

 3. 只能在Kotlin代码中工作

     JetBrains 最初开发了 Android Kotlin Extensions 插件,我们一起讨论了继续维护综合体的利弊:我们努力确保在可能的情况下长期支持 API,但希望引导开发人员采用最佳实践,使代码库健康发展,最终使用户满意。

    在未来一年的时间里,我们的团队将联合废止综合体,转而继续支持我们推荐的选项--View Binding。这意味着什么呢?

    如果你在使用Parcelize,你可以继续使用相同的注解和API。然而,注释包将改为kotlinx.parcelize,并且在你的模块级Gradle文件中,你应该开始使用独立的kotlin-parcelize插件,而不是android-kotlin-extensions。你可以在Android开发者文档网站上找到Parcelize的文档。如果你使用的是Android Kotlin synthetics,你应该迁移到View Binding。查看我们的迁移指南,了解更多细节。
    废弃期从今天发布的Kotlin 1.4.20开始。android-kotlin-extensions将在2021年9月期间或之后发布的Kotlin版本中删除。长期来看,我们将继续维护kotlin-parcelize插件,你可以继续在Android Studio问题跟踪器中提交关于Parcelize的问题。


   官方回应原文:The future of Kotlin Android Extensions

 

关于升级Kotlin 升级1.4.20版本后使用KAE(Kotlin Android Extensions)的问题

    前段时间自己升级了Kotlin最新版本,自己在项目中使用的KAE,AS sync给出了提示警告:The 'kotlin-android-extensions' Gradle plugin is deprecated. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the 'kotlin-parcelize' plugin.

这段提示其实也应了官方给出的回答,以后直接废弃Kotlin Android Extensions 这个插件,将Viewbinding收揽到官方的API中,在很多场景下会慢慢代替findViewById。与使用 findViewById相比,Viewbinding具有一些很显著的优点:

  • Null 安全:由于视图绑定会创建对视图的直接引用,因此不存在因视图 ID 无效而引发 Null 指针异常的风险。此外,如果视图仅出现在布局的某些配置中,则绑定类中包含其引用的字段会使用 @Nullable 标记。
  • 类型安全:每个绑定类中的字段均具有与它们在 XML 文件中引用的视图相匹配的类型。这意味着不存在发生类转换异常的风险。

 

关于Viewbinding的使用

  Viewbinding功能可按模块启用。要在某个模块中启用视图绑定,请将viewbinding 元素添加到其build.gradle文件中,如下例所示:

android{...

buildFeatures {
        viewBinding true
    }
...
}

如果希望在生成绑定类时忽略某个布局文件,请将 tools:viewBindingIgnore="true" 属性添加到相应布局文件的根视图中:




    
  ...

添加 tools:viewBindingIgnore="true"此属性后,通过编译后,在AS 项目路径:app\build\generated\data_binding_base_classs_source_out\debug\out   中没有生成的viewbinding相关的文件

为某个模块启用Viewbinding功能后,系统会为该模块中包含的每个 XML 布局文件生成一个绑定类。每个绑定类均包含对根视图以及具有 ID 的所有视图的引用。系统会通过以下方式生成绑定类的名称:将 XML 文件的名称转换为驼峰式大小写,并在末尾添加“Binding”一词。

例如:你的项目MainActivity中的XML文件是activity_main.xml,启用Viewbinding并编译(make project)后在app\build\generated\data_binding_base_classs_source_out\debug\out \你的项目路径名称 中生成ActivityMainBinding.java文件。

在Activity中的使用

如需设置绑定类的实例以供 Activity 使用,请在 Activity 的 onCreate() 方法中执行以下步骤:

  1. 调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Activity 使用。
  2. 通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。
  3. 将根视图传递到 setContentView(),使其成为屏幕上的活动视图。
class MainActivity : AppCompatActivity(), View.OnClickListener {
    private lateinit var mViewbinding:ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        mViewbinding= ActivityMainBinding.inflate(layoutInflater)
        setContentView(mViewbinding.root)
    }

初始化ActivityMainBinding后,就可以调用XML中使用Id标识的控件做他们该做的事了:

...
mViewbinding.btnJump.setBackgroundColor(R.color.design_default_color_background)
mViewbinding.btnJump.setOnClickListener(this)
...

 

你可能感兴趣的:(kotlin,Android,android,kotlin,java)