在将我的应用程序的Expo SDK版本升级到48以满足API Level 33的Android Target SDK要求后,尝试使用Expo Image Picker和Expo Document Picker包时出现错误。这些错误仅发生在应用程序的Android版本中,特别是在发布版本中(iOS应用程序按预期工作,Android开发和暂存也可以正常工作,没有任何错误)。
调用以下任何操作时出错:
ImagePicker.launchImageLibraryAsync()
ImagePicker.launchCameraAsync()
DocumentPicker.getDocumentAsync()
这些错误只是简单地说明了对相应函数的调用已被拒绝,并且是由参数无法转换为特定类型引起的,然后是java.lang.IllegalArgumentException:如果没有主构造函数,无法将js值转换为枚举。
我目前的开发环境(升级到Expo SDK 49后)如下:
expo-env-info 1.0.5 environment info:
System:
OS: macOS 13.5.2
Shell: 5.9 - /bin/zsh
Binaries:
Node: 18.17.1 - ~/.nvm/versions/node/v18.17.1/bin/node
Yarn: 1.22.4 - /usr/local/bin/yarn
npm: 9.6.7 - ~/.nvm/versions/node/v18.17.1/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.11.2 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 23.0, iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0
IDEs:
Android Studio: 2022.3 AI-223.8836.35.2231.10671973
Xcode: 15.0/15A240d - /usr/bin/xcodebuild
npmPackages:
expo: ^49.0.11 => 49.0.11
react: 18.2.0 => 18.2.0
react-dom: 18.2.0 => 18.2.0
react-native: 0.72.4 => 0.72.4
react-native-web: ~0.19.6 => 0.19.9
Expo Workflow: bare
Additional Android Related Info:
Gradle: 7.6.2
Android Gradle Plugin: 7.4.2
Gradle JDK: 17.0.6
从那以后,我尝试升级到Expo SDK 49,看看是否能解决我的问题。不幸的是,这导致了类似的问题,但有一个不同的世博会包。当应用程序试图打开并因此陷入加载状态时,会发生以下错误:
{
[
Error: Call to function 'ExponentFileSystem.downloadAsync' has been rejected.
Caused by: The 3rd argument cannot be cast to type expo.modules.filesystem.DownloadOptions (received Map)
Caused by: Cannot create a record of the type: 'expo.modules.filesystem.DownloadOptions'.
Caused by: java.lang.IllegalArgumentException: Cannot convert js value to enum without the primary constructor
]
code: 'ERR_UNEXPECTED',
line: 86,
column: 349,
sourceURL: 'index.android.bundle'
}
我还尝试将Gradle和Android Gradle插件升级到8.0.x版本,但没有任何成功。将Gradle JDK弃用到11也没有改变任何东西。
任何帮助或见解将不胜感激。
1条答案
按热度按时间t0ybt7op1#
这个问题实际上是由于ProGuard混淆和优化。
在我的proguard-rules.pro文件中,我现在添加了:
此行跳过Expo模块文件的优化并修复错误。