Android 6.0以下设备缺失Java 8的BufferedReader.lines()方法问题咨询
问题原因与解决方案
核心原因
java.io.BufferedReader.lines()是Java 8新增的方法,但Android 6.0(API Level 23)及以下的系统原生未实现该方法。你配置的Java 8编译选项仅允许代码使用Java 8语法编译,无法自动填补系统库中缺失的Java 8核心方法。而Zemberek-nlp库直接调用了这个方法,低版本设备运行时找不到系统提供的实现,就会抛出NoSuchMethodError。
另外,默认情况下Android Gradle插件不会对第三方依赖库做核心库脱糖(Core Library Desugaring)处理,这也导致第三方库中的Java 8核心方法调用无法在低版本设备上兼容。
解决方案
开启Core Library Desugaring,让插件为低版本Android设备补充缺失的Java 8核心库方法,步骤如下:
- 在项目根目录的
build.gradle(或settings.gradle,取决于Gradle版本)中添加desugar依赖
buildscript { dependencies { // 引入desugar工具依赖,版本请匹配你的AGP版本 classpath 'com.android.tools:desugar_jdk_libs:2.0.4' } }
- 在app模块的
build.gradle中开启Desugaring并配置
android { compileOptions { // 保持已有的Java 8配置 sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 // 开启核心库脱糖 coreLibraryDesugaringEnabled true } } dependencies { // 添加desugar的依赖库 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }
注意:desugar_jdk_libs的版本需要和你的Android Gradle插件版本匹配,比如AGP 7.2.x对应desugar版本2.0.x,可根据实际情况调整。
- 验证配置
重新编译并在Android 6.0以下设备测试,BufferedReader.lines()的调用会被desugar替换为兼容低版本的实现,报错即可解决。
内容的提问来源于stack exchange,提问作者alierdogan7
相关产品推荐
相关产品推荐

