Expo安卓端使用@react-native-community/cameraroll报getPhotos未定义错误
问题解决方案
核心原因
你当前用Expo Go调试使用原生能力的第三方库@react-native-community/cameraroll,Expo 托管工作流(公共Expo Go客户端)不支持该原生模块,另外也存在导入写法、权限适配的潜在问题。
可直接落地的解决步骤
方案1(推荐,适配Expo生态):替换为Expo官方媒体库
Expo 官方封装了兼容托管工作流的媒体访问能力,无需处理原生配置,直接替换即可:
- 卸载原社区库
npm uninstall @react-native-community/cameraroll
- 安装Expo官方媒体库
expo install expo-media-library
- 替换原有代码逻辑,示例参考:
import * as MediaLibrary from 'expo-media-library'; // 权限申请逻辑替换为 const requestPermission = async () => { const { granted } = await MediaLibrary.requestPermissionsAsync(); return granted; } // 拉取照片逻辑替换为 const photos = await MediaLibrary.getAssetsAsync({ first: 20, mediaType: MediaLibrary.MediaType.photo, });
方案2(坚持使用社区cameraroll)
如果必须使用该社区库,需切换出Expo托管工作流:
- 执行
expo prebuild生成安卓、iOS原生工程目录 - 编译自定义Expo开发客户端,后续用自定义客户端代替公共Expo Go调试
- 修正导入写法,部分版本的社区cameraroll没有默认导出,把导入语句改为:
import * as CameraRoll from '@react-native-community/cameraroll';
- 适配安卓11+权限,在安卓工程的
AndroidManifest.xml中补充权限声明:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <!-- 安卓13及以上额外补充 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
内容的提问来源于stack exchange,提问作者Wipster
相关产品推荐
相关产品推荐

