升级react-native-incall-manager4.0.0 Android端lambda编译报错
问题描述
升级react-native-incall-manager至4.0.0版本后,Android端出现JDK相关编译报错,提示不支持lambda表达式,项目内已明确配置JDK 1.8,多日排查未定位根因。本次升级组件的目的是修复Android 11系统下InCallManager.setSpeakerForceOn()、setSpeakerOn()方法不生效的问题。
环境与报错信息
- 本地JDK环境日志:
openjdk version "11.0.14.1" 2022-02-08 LTS OpenJDK Runtime Environment Zulu11.54+25-CA (build 11.0.14.1+1-LTS) OpenJDK 64-Bit Server VM Zulu11.54+25-CA (build 11.0.14.1+1-LTS, mixed mode
- React Native端编译报错:
ProximityManager.java:51: error: lambda expressions are not supported in -source 7
UiThreadUtil.runOnUiThread(() -> {
(use -source 8 or higher to enable lambda expressions)
/node_modules/react-native-incall-manager/android/src/main/java/com/zxcpoiu/incallmanager/InCallManagerModule.java:196: error: lambda expressions are not supported in -source 7
UiThreadUtil.runOnUiThread(() -> {
^ (use -source 8 or higher to enable lambda expressions)
- Android Studio同步阶段报错:
UiThreadUtil.runOnUiThread(() -> {
^
(use -source 8 or higher to enable lambda expressions)
已提供配置截图证明项目JDK 1.8设置完成。
根因
react-native-incall-manager@4.0.0的Android模块build.gradle未显式声明Java编译版本,编译时默认使用-source 7版本,不会自动继承主项目的JDK 1.8配置,因此lambda语法无法通过编译。
解决方法
- 全局配置法(无需修改node_modules,推荐)
打开项目根目录下android/build.gradle文件,在allprojects配置块中添加全局Java编译参数:
配置完成后进入android目录执行allprojects { // 保留原有所有配置 tasks.withType(JavaCompile) { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } }./gradlew clean清理缓存,返回项目根目录重新执行打包/运行命令即可。 - 补丁持久化法
如果不想修改全局子项目编译配置,可直接修改依赖包配置后用patch-package持久化修改:- 打开
node_modules/react-native-incall-manager/android/build.gradle,在android配置块内添加编译选项:android { // 保留原有所有配置 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } - 项目根目录执行
npx patch-package react-native-incall-manager生成永久补丁,后续重新安装依赖时补丁会自动生效。
- 打开
注:修复编译问题后,4.0.0版本可正常解决Android 11系统下扬声器控制方法失效的问题,无需额外适配。
内容的提问来源于stack exchange,提问作者Dragos UniqQum

