【问题标题】:The 'kotlin-android-extensions' Gradle plugin is deprecated'kotlin-android-extensions' Gradle 插件已弃用
【发布时间】:2021-03-18 14:45:10
【问题描述】:

对于 Gradle 6.2 版和 Android Studio 4.0.1 版,我收到了 Kotlin-android-extention 的弃用消息。任何人都知道如何解决它。

【问题讨论】:

  • 嗨 Ali Kotlin-android-extension 已被弃用,您应该考虑使用视图绑定,查看博客以获取详细解释和反模式viewbinding
  • 嗨@ChetanGupta,感谢您的评论。是的,你是对的。我确实喜欢这个答案,它对我来说很好。

标签: android kotlin gradle


【解决方案1】:

基于 google document 已弃用

Kotlin Android Extensions 已弃用,这意味着使用 Kotlin 不再支持合成视图绑定。

对于那些想知道synthetic 是什么的人。我应该说一种使用 kotlin 访问 UI 视图 ID 的简单方法,可以通过在 Gradle 中添加 'kotlin-android-extensions' 来实现。

  • 如果您的应用使用 Parcelable,您可以使用 'kotlin-parcelize' 而不是 'kotlin-android-extensions'
  • 如果您的应用使用 Kotlin 合成器进行视图绑定,请使用本指南迁移到 Jetpack ViewBindingData Binding

【讨论】:

  • 你知道在你绝对需要在你的代码中替换合成的最后期限吗?
  • @natansalda 我没有找到任何具体的日期。它主要基于您的 android studio 版本。
【解决方案2】:

现已弃用

  • 从插件中删除'Kotlin-android-extention'。 (用于kotlin的合成方式访问UI元素)

  • 下面添加使用view binding方式访问UI元素

    android {
       ...
       buildFeatures {
           viewBinding true
       }
    }
    
  • 如果您的应用包含Parcelable,请在插件中添加'kotlin-parcelize',以使用简单的方法创建parcelable,只需在类中添加@Parcelize注解

您可以查看有关此更新的Google guideline

【讨论】:

    【解决方案3】:

    由于现在不推荐使用“kotlin-android-extensions”,因此最好使用视图绑定。

    为此,首先在 build.gradle 文件中启用视图绑定,方法是在 android 块下编写这行代码。

    buildFeatures {
        viewBinding true
    } 
    

    然后在活动文件中使用视图绑定功能

    首先声明一个用于绑定的全局变量

    private lateinit var binding:ActivityHomeBinding
    

    这里的ActivityHomeBinding是一个自动生成的类

    然后在 OnCreate() 方法中编写这些代码

    binding = ActivityHomeBinding.inflate(layoutInflater)
    setContentView(binding.root)
    

    【讨论】:

      【解决方案4】:

      上面的答案是正确的,但是当你从你的项目中删除'kotlin-android-extensions'时,使用kotlin的合成方式访问视图属性是不可能的,所以你需要迁移到使用视图绑定,按照谷歌的这个迁移到视图绑定指南:link

      【讨论】:

        【解决方案5】:

        Google 提供了一种新的视图绑定方式,而不是“kotlin-android-extensions”。 在 app 模块的 build.gradle 中添加如下插件。

            android {
            ...
            buildFeatures {
                viewBinding true
            }
        }
        

        【讨论】:

          【解决方案6】:

          在我看来,使用这个插件还是比介绍的方法好,我们只需要注意ID。 因为随着 2017 年发布的 Android Kotlin Extensions Gradle 插件出现了 Kotlin Synthetics。对于每个布局文件,Kotlin Synthetics 都会创建一个包含您的视图的自动生成类——就这么简单。 你只需要在你的 Gradle 文件中导入这个插件,你就可以直接引用视图引用变量了。 它仅在内部调用一次 findViewById,然后将其缓存。 这使用起来非常方便和有趣,所以为什么不推荐使用 我们来分析一下。 优点 没有样板代码——只需在你的 Gradle 文件中配置一次,你就可以开始了。 Kotlin Synthetics 将自动生成一个可供您使用的类。 类型安全——所有视图都是从你的布局文件中挑选出来的,类型是它已知的。 缺点 部分 null 安全——它通常是 null 安全的,因为您的所有视图都必须存在于布局文件中才能生成。但是,如果您有多个基于配置的布局文件,其中某些视图存在于某些布局文件中而在某些布局文件中缺失,该怎么办?在这里,您必须手动检查是否为空。 污染命名空间——您可以在不同的布局中拥有相同的视图 ID,并且您可能会意外地导入其他布局的视图,这将在稍后在运行时抛出 NullPointerException。 仅限 Kotlin — Kotlin Synthetics 只能与 Kotlin 一起使用。 Java 不支持它们。还有一些项目是用 Java 编写的,可能还没有完全迁移到 Kotlin,因此 Kotlin Synthetics 可能不是在项目中获取 ViewId 的一致方式。 由于这些问题,Kotlin Synthetics 现在已被弃用。

          现在由你决定是否还想像我一样使用这个插件,如果你想修复不推荐使用的警告,你必须避免使用不推荐使用的方法。?

          【讨论】:

            【解决方案7】:

            如前所述,Kotlin Synthetics 已被弃用,应由 View Binding 取代。就我而言,我想引入 View Binding 并逐渐从 Kotlin Synthetics 迁移。可以在一个项目中同时拥有这两者,您只需要记住不要更新 Kotlin 版本 - 我遇到了 4.1.21 的构建错误,因此需要降级到 1.4.10

            还要记住从已迁移到使用 View Binding 的类(通常是活动/片段)中删除 Kotlin Synthetics 导入。

            【讨论】:

              【解决方案8】:

              我收到此错误的原因完全不同。 我忘了添加自定义应用程序类,我在清单文件中添加了 hiltannotation:

              <application
                      android:name=".MyApplication"
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2023-04-03
                • 2023-02-18
                • 1970-01-01
                • 2021-12-22
                • 2019-10-24
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多