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
相关产品推荐
相关产品推荐

