【Android】build.gradle 移除kotlin过时插件 “kotlin-android-extensions”编译失败,报 No signature of method

夹谷茂
2023-12-01

背景说明

kotlin-android-extensions 是用于提供视图绑定功能,用于减少 findViewById代码的编写,只许在Activity中引入类似import kotlinx.android.synthetic.main.activity_main.* //导入这个的包,即可直接以viewid去得到view控件。本来是一个很好的插件,但是该插件被开发团队所废弃,取而代之的是使用ViewBinding进行替代,所以对于使用了该项目的老项目,需要进行迁移。

问题出现

由于是刚接手的一个老项目,按照官方文档说明,在build.gradle中移除kotlin-android-extensions并启用ViewBinding后 ,替换布局中的view引入即可,但是在项目编译时报如下错误:

Build file '/Users/apple/android/Projects/XXX/Component/lib-base/build.gradle' line: 12

A problem occurred evaluating project ':Component:lib-base'.
> No signature of method: build_1h5vxjnn30a759t1blwt5q5ag.android() is applicable for argument types: (build_1h5vxjnn30a759t1blwt5q5ag$_run_closure1) values: [build_1h5vxjnn30a759t1blwt5q5ag$_run_closure1@271912e5]

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating project ':Component:lib-base'.

问题排查方式

通过对build.gradle文件进行逐行检查,通过逐行注释的方式注释掉相关代码进行编译来检查是否能编译成功。一般遇到gradle的编译问题,都可以采取这种方式进行检查。

问题定位

经排查,发现build.gradle文件中有如下一段代码:

androidExtensions {
   experimental = true
}

把以上代码移除后,编译成功。

经查,以上代码的作用是 使用kotlin-android-extensions 插件时,用以启用插件的实验性功能。 如果有同样遇到该问题的朋友,可以尝试这种方式解决。

 类似资料: