React Native构建Android时react-native-gesture-handler编译Kotlin失败求助
问题详情
合并某PR后(PR无Android原生代码变更),构建Android APK时出现Kotlin编译错误,iOS构建正常。此前长期使用react-native-gesture-handler未遇此问题。
版本信息
- react-native-gesture-handler: ^2.3.2
- Kotlin版本(build.gradle): 1.6.10
- react-native: 0.68.5
错误日志
Task :react-native-gesture-handler:compileReleaseKotlin FAILED
e: /Users/saumya/Desktop/latest/lc-app/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt: (247, 92): Unresolved reference: TIRAMISUFAILURE: Build failed with an exception.
- What went wrong:
Execution failed for task ':react-native-gesture-handler:compileReleaseKotlin'.Compilation error. See log for more details
- Try:
Run with --stacktrace option to get the stack trace.
Run with --info or --debug option to get more log output.
Run with --scan to get full insights.
- Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
已尝试的无效方案
- 执行命令:
npm i jetifier npx jetify - gradle.properties中已配置:
android.useAndroidX=true android.enableJetifier=true
解决方案
方案1:升级项目compileSdkVersion至33
TIRAMISU是Android 13(API级别33)的系统常量,react-native-gesture-handler 2.3.2中引入了该常量,但RN 0.68.x默认的compileSdkVersion为31,导致编译时无法找到该引用。修改项目根目录下android/build.gradle的配置:
buildscript { ext { compileSdkVersion = 33 // 将原数值改为33 // 其他配置保持不变 } }
建议同步将targetSdkVersion也升级至33,保持版本一致性。
方案2:降级react-native-gesture-handler到兼容版本
若暂时无法升级compileSdkVersion,可将react-native-gesture-handler降级到不依赖API 33的版本,比如2.2.0:
npm install react-native-gesture-handler@2.2.0 --save
执行完后清理缓存:
rm -rf node_modules && npm install cd android && ./gradlew clean
方案3:检查依赖版本是否被意外升级
尽管PR未修改Android代码,但可能存在依赖自动升级的情况。查看package-lock.json或yarn.lock,确认react-native-gesture-handler的实际安装版本是否为预期的2.3.2,若版本不符则锁定版本。
内容的提问来源于stack exchange,提问作者Saumya Ranjan Nayak

