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

23

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

我想禁用这个功能,因为我们使用DataBinding而不是Kotlin合成视图属性,有时我会意外地导入它们;此外,它增加了我们不使用的额外构建负担。

由于我们使用相同的插件进行Parcelize功能,所以无法禁用Android扩展插件。


对于导入错误的问题,一种缓解方法是在“设置”>“编辑器”>“常规”>“自动导入”中编辑您的Android Studio设置,并将其添加到排除的包列表中。 - Can_of_awe
2个回答

24

androidExtensions DSL 中有一个 features 属性,允许您提供要启用的功能列表。目前只有两个可用的功能:parcelizeviews。 如果要禁用合成视图属性,请将以下内容添加到您的 build.gradle 文件中:

android {
   // ...
}

androidExtensions {
    features = ["parcelize"]
}

来源: https://github.com/JetBrains/kotlin/blob/6bef27e1e1e889b17ae84dd2ff99881727f13ac3e5/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt#L57


1
谢谢,这个几乎完全可行,我的唯一问题是它仍然生成了合成类。但如果你尝试编译应用程序,它会失败。 - Daniel Zolnai
10
这对我来说没有任何影响,在Android Studio 3.4上,对合成对象的引用仍然可以编译和运行。 - Joe Lapp
4
这对我在Android Studio 3.5.3上有效。请注意,androidExtensions是一个顶级闭包,这意味着它在android闭包之外。 - CommonsWare
2
即使作为顶级闭包,在Android Studio 4.0 Beta 5上对我来说这并不起作用。它仍然会生成合成属性。 - PhillyTheThrilly
我在Android Studio 4.0.1上尝试了同样的操作,它确实可以工作。看起来在编辑器中我们可以看到Kotlin合成,但是当我运行代码时,它会出现错误“未解决的引用:synthetic”。至少团队中没有人会因为错误使用它。 - Hitesh Bisht
显示剩余3条评论

11
现在,android-extensions插件已经停用,因此最好的解决方案是从build.gradle中删除apply plugin: 'kotlin-android-extensions'来删除该插件。

不再使用合成,我们应该使用ViewBindingDataBinding

如第一个链接所述,如果您还在使用parcelizer,则只需要将android-extensions插件更改为kotlin-parcelize,并在需要的地方将导入语句import kotlinx.android.parcel.Parcelize更改为import kotlinx.parcelize.Parcelize

有关从android-extensions迁移到JetPack的详细信息请点击这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接