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

升级compileSdkVersion至31后lint检测出现SparseArray调用需API level S报错

报错原因
  • 你调用的android.util.SparseArray#set是Android 12(API 31,代号S)才新增的系统API,而你项目的minSdkVersion配置为23,需要兼容API 23及以上的设备,低于31的Android系统不存在该方法,直接调用会触发运行时崩溃,lint的NewApi检查规则就是用于提前识别这类不兼容的API调用。
  • 升级compileSdkVersion到31才触发报错的原因是:compileSdkVersion决定了编译时使用的Android SDK版本,低于31的SDK版本中SparseArray没有set()方法的声明,lint无法识别该API的版本要求;升级到31后lint才能读取到该方法的API等级标注,进而抛出错误。
修复方案
  • 方案1(最推荐):直接替换为全版本兼容的put()方法。SparseArray.set()和SparseArray.put()的功能实现完全一致,把所有调用set()的位置替换为put()即可,无需额外适配。
  • 方案2:添加版本分支判断,仅在API 31及以上设备调用set()方法:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    yourSparseArray.set(key, value);
} else {
    yourSparseArray.put(key, value);
}
  • 方案3(不推荐):临时屏蔽lint检查,可在调用set()的方法上添加@SuppressLint("NewApi")注解,或在模块lint配置文件中禁用NewApi规则,该方案会引入低版本设备崩溃风险,请谨慎使用。

内容的提问来源于stack exchange,提问作者aherman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:06:03