Android Studio使用List.of()报Call requires API level 30错误
问题背景
在Android Studio项目中调用List.of()方法时,会收到如下Lint报错:
Call requires API level 30(current min is 21):`java.util.List#of`
出现该报错的原因是List.of()是Android API 30才加入系统框架的Java集合API,低于该版本的系统默认没有对应实现。
全新解决方案
无需提升minSdk到30,通过开启核心库脱糖功能即可在minSdk 21及以上项目中正常使用List.of()等Java 8+新增API,操作步骤如下:
- 确认项目使用的Android Gradle插件版本 ≥ 4.0.0
- 打开App模块的
build.gradle文件,在android配置块中添加如下配置:
android { // 省略其余已有配置 compileOptions { // 开启核心库脱糖 coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } // 项目使用Kotlin的话需要添加以下配置,纯Java项目可以忽略 kotlinOptions { jvmTarget = "1.8" } }
- 在同一个
build.gradle文件的dependencies配置块中添加脱糖依赖:
dependencies { // 省略其余已有依赖 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }
- 同步Gradle配置并重新构建项目,上述Lint报错会自动消失,
List.of()可正常运行在API 21及以上的所有设备上。
可选兼容方案
如果你暂时不想开启核心库脱糖,也可以用以下等价的低版本兼容写法实现和List.of()相同的不可变列表效果:
// 可变列表写法 List<String> list = Arrays.asList("a", "b", "c"); // 不可变列表写法(和List.of()效果完全一致) List<String> immutableList = Collections.unmodifiableList(Arrays.asList("a", "b", "c"));
内容的提问来源于stack exchange,提问作者flyingfishcattle
相关产品推荐
相关产品推荐

