You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Expo React Native应用Google Play内部测试版本启动崩溃求助

Expo React Native应用Google Play内部测试版本启动崩溃求助

看起来你遇到了一个挺闹心的问题——明明是照着expo-audio官方文档写的代码,本地测试可能好好的,但传到Google Play内部测试版后,打开闪屏就崩溃,日志还指向了AudioRecorder的类型转换错误和空指针,这确实让人摸不着头脑。结合你的描述和日志信息,我给你几个可能的排查方向:

  • 先检查SDK与包的兼容性:有时候不同版本的Expo SDK对应的expo-audio API细节会有差异,哪怕你是照着文档写的,如果你的项目SDK版本和文档对应的版本不匹配,就可能出现这种类型不兼容的问题。建议你打开package.json,确认expo和expo-audio的版本是否匹配,必要时可以尝试升级或降级到官方推荐的稳定组合版本。

  • 排查代码混淆的锅:Google Play的内部测试构建默认可能开启了R8/ProGuard代码混淆,这玩意儿有时候会把expo-audio的关键类或者结构给混淆掉,导致运行时无法正确识别RecordingOptions类型,进而触发空指针。你可以尝试在构建配置里临时禁用混淆,或者添加针对性的混淆规则:

    -keep class expo.modules.audio.** { *; }
    -keep class com.facebook.react.bridge.ReadableNativeMap { *; }
    

    具体怎么配置可以参考Expo构建相关的本地配置说明,比如eas.json或者app.json里的构建参数。

  • 试试手动配置录制参数,不用预设:虽然你用的RecordingPresets.HIGH_QUALITY是官方推荐的,但有可能打包过程中这个预设没有被正确解析成对应的RecordingOptions对象。你可以尝试手动写死录制参数,绕开预设:

    const audioRecorder = useAudioRecorder({
      android: {
        extension: '.m4a',
        outputFormat: Audio.RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_MPEG_4,
        audioEncoder: Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AAC,
        sampleRate: 44100,
        numberOfChannels: 2,
        bitRate: 128000,
      },
      ios: {
        extension: '.m4a',
        audioQuality: Audio.RECORDING_OPTION_IOS_AUDIO_QUALITY_HIGH,
        sampleRate: 44100,
        numberOfChannels: 2,
        bitRate: 128000,
        linearPCMBitDepth: 16,
        linearPCMIsBigEndian: false,
        linearPCMIsFloat: false,
      },
    });
    

    这样直接传入完整的配置对象,避免依赖预设可能带来的打包异常。

  • 别忘了权限检查:虽然日志没直接提权限,但音频录制权限没正确申请或授予,也可能间接导致Recorder初始化失败触发空指针。检查你的app.json里是否声明了必要权限:

    "permissions": [
      "RECORD_AUDIO",
      "WRITE_EXTERNAL_STORAGE"
    ]
    

    并且在代码里初始化AudioRecorder之前,一定要确保已经通过expo-permissions之类的工具请求并获取到了这些权限。

另外给你个调试小技巧:先在本地用EAS构建一个针对真实设备的测试APK,看看能不能复现崩溃。如果本地构建的APK没问题,那基本可以锁定是Play Store构建时的混淆或优化设置问题;如果本地构建也崩溃,那可以尝试创建一个最小化的测试项目,只保留音频录制代码,排查是不是项目里其他代码和expo-audio冲突了。

内容来源于stack exchange

火山引擎 最新活动