如何通过Kotlin Android扩展插件禁用合成视图属性的生成

Dan*_*nai 7 android kotlin kotlin-android-extensions

Kotlin Android扩展插件会为每个视图生成静态属性,并带有我的应用布局文件中的ID,如文档所述

我想禁用此功能,因为我们使用DataBinding而不是Kotlin综合视图属性,有时我是无意中导入它们的;还会增加一些我们不使用的东西的额外构建开销。

无法禁用Android扩展插件,因为我们使用了由同一插件完成的Parcelize功能。

kyh*_*ule 22

DSL 中有一个features属性androidExtensions允许您提供要启用的功能列表。目前,只有两个可用,parcelizeviews。要禁用综合视图属性,请将其添加到您的build.gradle

android {
   // ...
}

androidExtensions {
    features = ["parcelize"]
}
Run Code Online (Sandbox Code Playgroud)

资料来源:https : //github.com/JetBrains/kotlin/blob/6bef27e1e889b17ae84dd2ff99881727f13ac3e5/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt

  • 在 Android Studio 3.4 上,这对我没有任何改变。对合成对象的引用仍然可以编译和运行。 (10认同)
  • 这对我在 Android Studio 3.5.3 上有效。请注意,“androidExtensions”是一个顶级闭包,这意味着它位于“android”闭包之外。 (4认同)
  • 这对我来说在 Android Studio 4.0 Beta 5 上不起作用,即使作为顶级闭包也是如此。它仍在产生合成特性 (2认同)

pau*_*nku 5

如今,android-extensions 插件已停产,因此最好的解决方案是通过apply plugin: 'kotlin-android-extensions'build.gradle.

我们应该使用ViewBindingDataBinding而不是合成。

由于在第一个链接解释的,如果您还使用parcelizer,你只需要改变android-extensions插件kotlin-parcelize,改变import语句import kotlinx.android.parcel.Parcelize用于import kotlinx.parcelize.Parcelize任何需要。

有关从 android-extensions 迁移到 JetPack 的更多信息,请点击此处