如何解决Android Studio中kotlin-android-extensions Gradle插件不再支持问题
解决“The 'kotlin-android-extensions' Gradle plugin is no longer supported”问题
kotlin-android-extensions插件已被官方废弃,需移除该插件并改用官方推荐的替代方案,具体操作如下:
第一步:移除废弃插件
- 打开项目根目录的Project级
build.gradle,找到plugins块内的id 'kotlin-android-extensions',直接删除该行; - 若插件是在模块级(如app模块)
build.gradle中声明的,同样删除对应引用代码。
替代方案(推荐前两种)
方案一:View Binding(官方首选)
View Binding是类型安全的控件绑定方案,性能稳定且使用简单:
- 启用View Binding
在模块级build.gradle的android块中添加配置:android { // 其他配置... buildFeatures { viewBinding true } } - 在代码中使用
布局文件activity_main.xml会自动生成对应的ActivityMainBinding类,直接通过它访问控件:- Activity示例:
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // 直接通过binding.控件ID访问,比如tv_title是布局里的TextView binding.tvTitle.text = "替换成功!" } } - Fragment示例:
class MyFragment : Fragment() { private var _binding: FragmentMyBinding? = null private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentMyBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.btnSubmit.setOnClickListener { // 处理点击事件 } } override fun onDestroyView() { super.onDestroyView() _binding = null // 释放引用避免内存泄漏 } }
- Activity示例:
方案二:Data Binding
如果需要数据双向绑定功能,可以选择Data Binding,它包含View Binding的所有能力:
- 启用Data Binding
在模块级build.gradle的android块中添加:android { // 其他配置... buildFeatures { dataBinding true } } - 在代码中使用
先给布局文件套上<layout>根标签:
之后的代码用法和View Binding类似,还可以绑定数据对象:<layout xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> </layout>class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) // 绑定自定义数据类示例 val user = User("张三", 30) binding.user = user } }
方案三:手动findViewById(临时过渡用)
如果只是临时应急,可以用这种方式,但不推荐长期使用(类型不安全、易出错):
class MainActivity : AppCompatActivity() { private lateinit var tvTitle: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) tvTitle = findViewById(R.id.tv_title) tvTitle.text = "临时过渡方案" } }
内容的提问来源于stack exchange,提问作者YOUSIF majeed
相关产品推荐
相关产品推荐

