Android Studio提示kotlin-android-extensions插件已弃用,该如何迁移?
迁移至View Binding替代kotlin-android-extensions指南
1. 更新Gradle插件配置
首先移除废弃的kotlin-android和kotlin-android-extensions插件,开启View Binding功能;若之前用到了Parcelize序列化功能,需添加kotlin-parcelize插件替代:
plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' // 移除kotlin-android、kotlin-android-extensions插件 id 'kotlin-parcelize' // 原Parcelize功能依赖此插件 } android { // 保留原有编译SDK、minSDK等配置 buildFeatures { viewBinding true // 开启View Binding } }
2. 修改Activity代码,用View Binding访问控件
原来直接通过ID调用控件的方式,需要替换为View Binding实例调用:
旧代码(kotlin-android-extensions方式):
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 直接用XML中的ID访问控件 tv_greeting.text = "Hello" } }
新代码(View Binding方式):
class MainActivity : AppCompatActivity() { // 声明对应布局的Binding实例 private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化Binding并设置ContentView binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // 通过binding实例访问控件ID binding.tvGreeting.text = "Hello" } }
注:
ActivityMainBinding是系统根据布局文件名自动生成的类(如activity_main.xml对应ActivityMainBinding),XML中所有带ID的控件都会成为该类的属性。
3. 额外场景处理
- 若布局使用
<include>标签,需给include设置android:id,生成的Binding类会包含对应子布局的Binding实例,可直接通过binding.includeId.subViewId访问子控件。 - 原
kotlin-android-extensions的@Parcelize注解,迁移后只需保留注解本身即可,kotlin-parcelize插件会提供完全一致的功能。
内容的提问来源于stack exchange,提问作者soham kumthekar
相关产品推荐
相关产品推荐

