如何禁用 Kotlin Android 扩展插件生成合成视图属性
Posted
技术标签:
【中文标题】如何禁用 Kotlin Android 扩展插件生成合成视图属性【英文标题】:How to disable the generating of synthetic view properties by the Kotlin Android extensions plugin 【发布时间】:2019-06-08 14:19:53 【问题描述】:Kotlin android Extensions 插件为每个视图生成静态属性,并使用我的应用布局文件中的 ID,如 the documentation 中所述。
我想禁用此功能,因为我们使用 DataBinding 而不是 Kotlin 合成视图属性,有时我会不小心导入它们;它还为我们不使用的东西增加了额外的构建开销。
无法禁用 Android 扩展插件,因为我们使用的是同一个插件完成的 Parcelize 功能。
【问题讨论】:
对于意外导入问题,一种缓解方法是在“设置”>“编辑器”>“常规”>“自动导入”中编辑您的 Android Studio 设置,并添加到排除的包列表中。 【参考方案1】:androidExtensions
DSL 中有一个features
属性,允许您提供要启用的功能列表。目前,只有两个可用,parcelize
和 views
。要禁用合成视图属性,请将其添加到您的 build.gradle
:
android
// ...
androidExtensions
features = ["parcelize"]
来源:https://github.com/JetBrains/kotlin/blob/6bef27e1e889b17ae84dd2ff99881727f13ac3e5/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt#L57
【讨论】:
谢谢,这几乎完全有效,我唯一的问题是它仍然会生成合成类。但如果你尝试编译应用程序,它就会失败。 这对我来说没有任何改变,在 Android Studio 3.4 上。对合成对象的引用仍然可以编译和运行。 这适用于我在 Android Studio 3.5.3 上。请注意,androidExtensions
是***闭包,这意味着它超出了 android
闭包。
这对我在 Android Studio 4.0 Beta 5 上不起作用,即使作为***闭包也是如此。它仍在生成合成属性
@kyhule 如果我们也不使用 parcelize 怎么办? features = []
就够了吗?【参考方案2】:
现在,android-extensions 插件是 discontinued,因此最好的解决方案是通过从您的 build.gradle
中删除 apply plugin: 'kotlin-android-extensions'
来删除此插件。
我们应该使用ViewBinding 或DataBinding,而不是合成。
如第一个链接中所述,如果您还使用 parcelizer,只需将 android-extensions
插件更改为 kotlin-parcelize
并将导入语句 import kotlinx.android.parcel.Parcelize
更改为 import kotlinx.parcelize.Parcelize
即可。
有关从 android-extensions 迁移到 JetPack here 的更多信息。
【讨论】:
以上是关于如何禁用 Kotlin Android 扩展插件生成合成视图属性的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Kotlin 错误链接到 Android Studio 中的源?
kotlin-android-extensions插件被废弃--解决办法