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

Expo ejected项目Expo Asset库debug正常release模式下无法获取图片路径

解决方案

问题根因

Android release构建流程中,Expo默认会将静态资源打包进APK的assets目录,不会主动解压到本地可访问的文件缓存路径,因此Asset.loadAsync返回的localUri不会生成完整file路径,仅返回资源标识符。

方案1:手动复制资源到缓存目录获取路径(推荐,兼容Expo全 workflow)

需配合expo-file-system库实现,无论debug还是release模式都可以稳定返回绝对路径:

  1. 安装依赖:
npx expo install expo-file-system
  1. 封装调用方法:
import { Asset } from 'expo-asset';
import * as FileSystem from 'expo-file-system';

const getAssetAbsolutePath = async (assetModule) => {
  const [targetAsset] = await Asset.loadAsync(assetModule);
  
  // Debug模式直接返回原生生成的路径
  if (targetAsset.localUri?.startsWith('file://')) {
    return targetAsset.localUri;
  }

  // Release模式手动拷贝资源到缓存目录生成可访问路径
  const cachedFilePath = `${FileSystem.cacheDirectory}${targetAsset.name}.${targetAsset.type}`;
  await FileSystem.copyAsync({
    from: targetAsset.uri,
    to: cachedFilePath
  });

  return cachedFilePath;
}

// 业务调用
const backgroundUri = await getAssetAbsolutePath(require('../../assets/bg_img.jpg'));
  1. 配置资源打包规则:在app.json的expo节点下添加如下配置,确保静态资源被正确打包进APK:
{
  "expo": {
    "assetBundlePatterns": [
      "**/*.jpg",
      "**/*.png"
      // 可按需添加其他需要打包的资源后缀
    ]
  }
}

方案2:修改构建配置强制生成localUri(仅兼容Bare Workflow)

如果你使用的是Expo Bare Workflow(原生工程可修改),可以直接修改Android构建配置,无需额外代码:
在android/app/build.gradle的defaultConfig块中添加如下配置:

android {
  defaultConfig {
    // 已有配置保留,新增下面一行
    manifestPlaceholders["expo.modules.asset.EnableLocalUriFallback"] = true
  }
}

重新构建release包后,Asset.loadAsync返回的localUri就会和debug模式一致,返回完整的file://路径。

替代方案:使用原生文件操作库实现

如果不想依赖Expo相关生态,可以用react-native-fs库直接操作Android assets目录资源:

  1. 将需要调用的bg_img.jpg放到Android原生工程的android/app/src/main/assets/目录下(没有assets目录就新建)
  2. 安装依赖:
npm install react-native-fs --save
  1. 调用代码:
import RNFS from 'react-native-fs';

const getAssetAbsolutePath = async () => {
  const cachedPath = `${RNFS.CachesDirectoryPath}/bg_img.jpg`;
  // 将assets目录下的资源复制到可访问的缓存目录
  await RNFS.copyFileAssets('bg_img.jpg', cachedPath);
  return `file://${cachedPath}`;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:36:03