React Native Android应用程序在Expo升级到48/49后的问题

szqfcxe2  于 2023-10-14  发布在  Android
关注(0)|答案(1)|浏览(104)

在将我的应用程序的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也没有改变任何东西。
任何帮助或见解将不胜感激。

t0ybt7op

t0ybt7op1#

这个问题实际上是由于ProGuard混淆和优化。
在我的proguard-rules.pro文件中,我现在添加了:

-keep class expo.modules.** { *; }

此行跳过Expo模块文件的优化并修复错误。

相关问题