升级Gradle版本后,安卓点击事件使用了SwitchCase的情况下,报错无法使用的解决方案
安卓点击事件使用了SwitchCase后再升级
一般老项目里,大量使用了switchcase判断view的id进行点击逻辑的执行,在升级 Gradle / Android Studio 后,如果你使用了 Java 8+ 或者 Kotlin,或者 AGP 升级导致 编译器对 switch 支持变严格,就可能出现报错:
-
“Cannot switch on a value of type View”
-
或者 “Incompatible types”
在 Android Gradle Plugin (AGP) 3.3 及以后版本,为了 支持动态特性模块(Dynamic Feature Module)和资源引用优化,默认生成的 R 类不再是 final:
public final class R { … } // 以前 final
public class R { … } // 新版默认非 final
此情况下,switchcase语句则会提示不可用,需要重新适配
临时处理方案:
在gradle.properties加入配置
android.nonFinalResIds=false
来声明生成的R继续保持final
缺点是某些新特性(比如动态模块、Instant App 优化)可能不能用。
好处是不用修改代码,就能继续用 switch-case 判断点击事件。