配置Kotlin插件适配AWS Chime后React Native Android构建失败如何解决
问题原因
- 报错核心为Kotlin版本不兼容:你手动指定项目全局使用Kotlin 1.3.71版本,而当前使用的Expo版本的原生Kotlin代码采用了更高版本Kotlin才支持的类型推断语法,旧版本编译器无法识别这些语法特性,因此在编译node_modules下的Expo Kotlin文件时抛出类型推断失败的错误。
- 未添加配置前项目正常运行,是因为此时项目使用React Native/Expo默认匹配的Kotlin版本,和Expo模块的代码语法完全兼容。
常见疑问说明
不存在完全跳过编译node_modules中Kotlin代码的方案,这些模块是应用依赖的必要组成部分,必须参与应用构建流程,只能通过强制版本对齐的方式统一编译规则解决冲突。
解决方法
方法一:升级全局Kotlin版本(最推荐)
你参考的Chime官方示例给出的Kotlin 1.3.71是较早的版本要求,目前最新的Amazon Chime React Native SDK已经兼容更高版本的Kotlin,替换为兼容Expo的版本即可解决冲突:
- 修改根目录
build.gradle中的Kotlin版本配置:
buildscript { ext.kotlin_version = '1.6.21' // 替换原1.3.71,该版本兼容RN 0.68+及绝大多数Expo版本 ... dependencies { ... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
- 修改
app/build.gradle中的协程依赖版本,和Kotlin版本匹配:
dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' implementation 'androidx.core:core-ktx:1.7.0' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" }
修改完成后重新执行yarn android即可正常构建。
方法二:强制对齐子模块编译版本
如果因业务需要必须保留Kotlin 1.3.71版本,可以在根目录build.gradle的末尾添加如下配置,强制所有子模块(包括node_modules下的原生模块)使用指定的Kotlin版本编译:
subprojects { afterEvaluate { project -> if (project.hasProperty('kotlin')) { project.kotlin.jvmTarget = '1.8' } project.configurations.all { resolutionStrategy { force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" force "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" force "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3" force "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3" } } } }
该方案为临时兼容方案,可能引发部分高版本原生模块的其他语法兼容问题,不建议长期使用。
内容的提问来源于stack exchange,提问作者John Stuart
相关产品推荐
相关产品推荐

