You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级expo-image-picker后React Native Android构建报错:ifNull未解析等问题

升级expo-image-picker至12.0.2后Android构建失败的问题排查与解决

问题描述

将expo-image-picker从11.0.3版本升级至12.0.2版本后,执行React Native Android构建时出现Kotlin编译失败,具体错误日志如下:

> Task :expo-image-picker:compileReleaseKotlin FAILED
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (25, 36): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (131, 39): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (133, 7): 'return' is not allowed here
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (138, 71): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (140, 7): 'return' is not allowed here
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (193, 7): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (195, 7): 'return' is not allowed here
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (200, 39): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (202, 7): 'return' is not allowed here
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (325, 8): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (327, 9): 'return' is not allowed here
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (376, 8): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (378, 9): 'return' is not allowed here
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (381, 46): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt: (383, 7): 'return' is not allowed here
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerOptions.kt: (4, 36): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerOptions.kt: (40, 9): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerOptions.kt: (42, 9): 'return' is not allowed here
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerUtils.kt: (11, 36): Unresolved reference: ifNull
e: /Users/user/Desktop/Projects/MyApp/Frontend/Expo/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerUtils.kt: (32, 39): Unresolved reference: ifNull
w: Detected multiple Kotlin daemon sessions at build/kotlin/sessions

FAILURE: Build failed with an exception.

已尝试的解决方法

  • 修改AndroidManifest.xml
  • 执行gradle clean
  • 删除.gradle缓存文件
  • 在gradle.properties中添加如下配置:
    org.gradle.daemon=true
    org.gradle.configureondemand=true
    org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
    
  • 在build.gradle中添加:
    dexOptions {
       javaMaxHeapSize "3g"
    }
    
  • 执行命令:./gradlew -stop

问题原因

核心错误是Unresolved reference: ifNull,这个ifNull是Expo Modules Core库中的Kotlin扩展函数。升级后的expo-image-picker@12.0.2依赖的Expo Modules Core版本与你项目中现有版本不兼容,导致编译时无法找到该扩展方法。后续的'return' is not allowed here错误是ifNull引用失败引发的连锁问题,并非独立错误。

解决方案

1. 升级Expo Modules Core版本

expo-image-picker@12.0.2需要依赖较新版本的expo-modules-core,执行以下命令更新:

npm install expo-modules-core@latest
# 若使用yarn则执行:
yarn add expo-modules-core@latest

2. 清理依赖缓存并重新安装

# 删除node_modules和锁文件
rm -rf node_modules package-lock.json yarn.lock
# 重新安装依赖
npm install
# 或使用yarn
yarn install

3. 重新同步Android项目依赖

进入Android目录执行:

cd android
./gradlew clean
./gradlew assembleRelease

4. 确认Expo SDK版本兼容性

如果项目基于Expo SDK,需确保SDK版本与expo-image-picker@12.0.2匹配。查看expo-image-picker版本说明,确认对应的最低SDK版本要求,若不匹配则同步升级Expo SDK。


内容的提问来源于stack exchange,提问作者Steven Matthews

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:31:11