在 Android 12 和 13 上使用 React Native 后台上传库时,应用崩溃而没有错误日志

App crashes without error logs when using React Native background upload lib on Android 12 and 13

提问人:M U BEEN 提问时间:6/28/2023 最后编辑:M U BEEN 更新时间:7/3/2023 访问量:111

问:

我在尝试使用 React Native 后台上传库从我的 Android 手机上传图像时遇到了一个严重问题。尽管进行了广泛的故障排除,但我无法确定问题的原因。以下是详细信息:

问题:每当我尝试上传图像时,我的应用程序都会突然崩溃,而不会生成任何错误日志或堆栈跟踪。我什至尝试使用

"adb logcat *:S ReactNative:V ReactNativeJS:V"

命令查看日志,但未显示错误或其他信息。

相同的代码在 Android 10 和 11 上运行良好,但在使用 Android 12 和 13 时,该应用程序始终崩溃。

   try {
      await Upload.startUpload({
        ...options,
        ...{maxRetries: 1, timeout: 100000},
      })
        .then(async uploadId => {
          console.log(
            `Upload started with options: ${JSON.stringify(options)}`,
          );
          this.setState({uploadId, progress: 0});
          Upload.addListener('progress', uploadId, data => {
            this.handleProgress(+data.progress);
            console.log(`Progress: ${data.progress}%`);
            if (data.progress == 100) {
              console.log('this.uploader', this.uploader);
            }
          });
          Upload.addListener('error', uploadId, data => {
            console.log(`Error: ${data.error}%`);
            this.props.feedSavingFailuire(data.error);
            Upload.cancelUpload(uploadId);
          });
          Upload.addListener('completed', uploadId, data => {
            if (
              this.state.initialResponseId != JSON.parse(data.responseBody).id
            ) {
              this.setState({
                initialResponseId: JSON.parse(data.responseBody).id,
              });
              this.props.uploadingCompleted(JSON.parse(data.responseBody));
            } else {
              this.props.uploadingCompleted(JSON.parse(data.responseBody));
            }
          });
        })
        .catch(function(err) {
          console.log('Upload error!', err);
        });
    } catch (err) {
      console.log('err', err);
      alert(err);
    }

更新:

经过一些调试,我已经确定了崩溃的原因。在崩溃之前,我收到此异常消息

要以 S+(版本 31 及更高版本)为目标,必须在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE。强烈建议使用FLAG_IMMUTABLE。仅当 PendingIntent 需要可变特定功能(如内联答复或气泡)时,才使用 FLAG_MUTABLE。

我尝试了在互联网上找到的各种解决方案,但没有一个解决了这个问题。

android react-native 调试 android-gradle-plugin

评论


答: 暂无答案