You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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是类型安全的控件绑定方案,性能稳定且使用简单:

  1. 启用View Binding
    在模块级build.gradle的android块中添加配置:
    android {
        // 其他配置...
        buildFeatures {
            viewBinding true
        }
    }
    
  2. 在代码中使用
    布局文件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 // 释放引用避免内存泄漏
          }
      }
      

方案二:Data Binding

如果需要数据双向绑定功能,可以选择Data Binding,它包含View Binding的所有能力:

  1. 启用Data Binding
    在模块级build.gradle的android块中添加:
    android {
        // 其他配置...
        buildFeatures {
            dataBinding true
        }
    }
    
  2. 在代码中使用
    先给布局文件套上<layout>根标签:
    <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>
    
    之后的代码用法和View Binding类似,还可以绑定数据对象:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:43:26