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

Expo-Camera视频录制开发环境正常,生产APK无法录制

Expo Camera打包APK后无法录制视频的排查与解决方法
  • 检查权限配置
    开发环境可能自动处理权限,但打包后的APK必须手动在app.json中声明必要权限,否则相机和录音功能会被系统拦截:

    "android": {
      "permissions": [
        "CAMERA",
        "RECORD_AUDIO",
        "WRITE_EXTERNAL_STORAGE"
      ]
    }
    

    针对Android 13+,需将WRITE_EXTERNAL_STORAGE替换为READ_MEDIA_VIDEO,同时单独确认RECORD_AUDIO权限的声明。

  • 验证依赖与打包工具
    确保expo-camera版本与当前Expo SDK版本兼容,避免版本不匹配导致的打包异常;废弃expo build:android,改用eas build进行打包,它能更准确地处理权限和依赖配置。

  • 强制运行时权限申请
    开发环境可能跳过权限弹窗,但正式APK必须在代码中主动请求权限,且录制前需确认权限已授予:

    import { Camera } from 'expo-camera';
    import { PermissionsAndroid, Platform } from 'react-native';
    
    const requestAllPermissions = async () => {
      const cameraPerm = await Camera.requestCameraPermissionsAsync();
      const audioPerm = await Camera.requestMicrophonePermissionsAsync();
      
      if (Platform.OS === 'android') {
        const storagePerm = await PermissionsAndroid.request(
          PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE
        );
      }
      
      return cameraPerm.granted && audioPerm.granted;
    };
    
  • 规范视频存储路径
    避免使用自定义路径,改用Expo提供的文件系统API指定存储位置,确保打包后有读写权限:

    import * as FileSystem from 'expo-file-system';
    import { Camera } from 'expo-camera';
    
    const startRecording = async (cameraRef) => {
      if (!cameraRef.current) return;
      const savePath = `${FileSystem.documentDirectory}video_recording.mp4`;
      await cameraRef.current.recordAsync({ uri: savePath, quality: '720p' });
    };
    
  • 排查日志定位问题
    查看eas build的打包日志,确认是否有依赖缺失或权限配置错误;在测试设备上通过adb logcat查看运行时错误,比如权限拒绝、相机初始化失败等具体信息。

内容的提问来源于stack exchange,提问作者Satyam rai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:01:22