android - SparseArray 错误:调用需要 API 级别 S
问题描述
将 compileSdkVersion 增加到 31 (Android 12) 后,执行 lint 检查时,会出现以下问题:
错误:调用需要 API 级别 S(当前最小值为 23):android.util.SparseArray#set [NewApi]
增加这个后有人有类似的问题,为什么会发生?
解决方案
set
在 Android 12 中添加,只是该put
功能的副本,您可以自由使用。
他们使用不同名称复制函数的原因是数组访问语法可以在 Kotlin 中工作。当 Kotlin 编译器在 Java 类中看到具有名称set
和两个参数的函数时,它允许使用如下数组语法调用它:
mySparseArray.put(3, someObject)
// is the same as
mySparseArray[3] = someObject
但是由于他们只在 Android 12 中添加了它,如果您的目标是低于 Android 12(sdk 版本 31)的任何东西,使用新功能是不切实际的,因此需要几年时间才能变得有用。
在我看来,将这个函数添加到基类是一个错误,因为现在几年内不可能使用数组访问语法,直到最终使 SDK 31 成为明智之举minSdkVersion
。在他们添加之前,可以使用扩展函数来获得此功能,但现在不能使用扩展函数,因为它的名称会影响基类中的名称。此外,lint 不会显示数组访问语法的错误,因此如果您使用它,它将在运行时崩溃。他们应该把它作为扩展函数放在androidx-core-ktx
.
编辑:如果我正确理解“反向移植”,看起来这可能在即将发布的版本中得到修复。
推荐阅读
- java - 打包成 jar 文件时 Java 代理未运行
- python - 我如何在 python 中使用简单的 SVM 方法进行预测?
- python - cpp:1389 错误断言在人脸检测中检测多尺度失败
- sql - 使用所有子集从类别和生产表中复制数据
- excel - 如何根据单元格选择复制行的固定部分,Excel vba?
- javascript - 检查 str1 是否可以使用 JavaScript 重新排列为 str2
- linux - Vtune:在运行其他任务的机器上运行 vtune 测量时英特尔采样驱动程序的准确性
- python - 如何使用python中的面向对象类将符号多项式表达式转换为可排序多项式?
- c# - 如何重构此代码以组合多个部分?
- android - Android 清洁架构实现刷新令牌