Expo开发Android应用:生产环境远程图片加载失败求助
问题:Expo开发Android应用打包AAB后远程图片无法加载
开发环境下,从Google Books等API获取的远程图片能正常加载,但生成发布用的.aab文件后,远程图片完全无法显示。图书标题、ID等API返回的其他内容显示正常,说明API调用功能正常,仅远程图片加载异常;本地图片加载无任何问题,该问题从开发初期就存在。
已尝试的方案
- 使用Expo-Images等第三方图片库,无效
- 实现图片缓存逻辑,代码如下:
async function cacheImages(images) { const imageAssets = images.map(image => { if (typeof image === 'string') { return Image.prefetch(image); } else { return Asset.fromModule(image).downloadAsync(); } }); await Promise.all(imageAssets); }
- 对照Expo文档检查图片加载代码,当前代码为:
<Image source={{ uri: bookImage }} style={styles.image} />
环境信息
- Expo CLI版本:>= 7.5.0
- Expo SDK版本:~50.0.15
解决思路/排查方向
- 检查网络权限:确认app.json的
android.permissions数组中是否包含INTERNET权限,Expo 48+之后默认不会自动添加该权限,需手动声明 - HTTP请求限制:Android 9及以上默认禁止HTTP明文请求,若Google Books返回的图片URL是HTTP协议,需在app.json的
android.androidManifest中添加android:usesCleartextTraffic="true"配置 - 图片URL有效性:将打包后无法加载的图片URL复制到浏览器中打开,确认URL是否有效(部分API返回的URL带有临时签名,可能因发布版请求环境导致失效)
- 替换图片组件:尝试使用
expo-image替代官方Image组件,确保安装对应适配Expo 50的版本,该组件对远程图片的加载兼容性更好 - 排查缓存逻辑:暂时移除图片预取缓存代码,直接使用
Image组件加载,看是否能正常显示;若必须用缓存,检查发布版中缓存目录的读写权限 - ProGuard混淆检查:若开启了ProGuard,需确认proguard-rules.pro中是否添加了Expo图片加载相关的防混淆规则,避免核心类被混淆导致加载失败
- 查看打包日志:执行
eas build时仔细查看日志输出,寻找与图片加载、权限、资源相关的警告或错误信息
内容的提问来源于stack exchange,提问作者AdriByMe
相关产品推荐
相关产品推荐

