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

升级NativeScript 8后读取bitmap触发FileNotFoundException异常如何解决

NativeScript 8升级后资源找不到报错排查与解决

报错信息参考

Error in reading bitmap - java.io.FileNotFoundException: ../files/app/assets/icon.png: open failed: ENOENT (No such file or directory)

排查步骤

  • 首先解压构建生成的apk安装包,查看assets/app/目录下的文件结构:确认icon.png是存在于assets/app/assets/子目录,还是被直接放在了assets/app/根目录
  • 检查Webpack复制规则冲突:当前配置同时设置了assets/**目录复制和**/*.png全局匹配规则,两条规则会同时生效,**/*.png规则会将src/assets下的png文件直接输出到构建产物的app根目录,而非assets子目录,导致按原路径访问时找不到文件
  • 确认代码内的资源引用路径:NativeScript 8默认资源根路径为构建后的app目录,若引用路径的相对层级有误也会触发该报错

解决方法

方案1:修正CopyWebpackPlugin规则(推荐)

移除重复的全局图片匹配规则,仅保留定向目录复制,避免路径覆盖,修改后的配置如下:

const copyTargets = [{ from: { glob: 'assets/**', dot: false } }, { from: { glob: 'fonts/**', dot: false } }, ...copyReplacements];
new CopyWebpackPlugin([...copyTargets], copyIgnore)

如果需要复制app目录下的零散图片,新增定向匹配规则即可,不要使用全局**匹配:

const copyTargets = [
  { from: { glob: 'assets/**', dot: false } }, 
  { from: { glob: 'fonts/**', dot: false } }, 
  // 单独匹配app目录下的图片,保持原有目录结构
  { from: { glob: 'app/**/*.jpg', dot: false } }, 
  { from: { glob: 'app/**/*.png', dot: false } },
  ...copyReplacements
];
new CopyWebpackPlugin([...copyTargets], copyIgnore)

方案2:调整资源引用路径

如果不需要保留assets目录结构,可直接将代码中~/assets/icon.png的引用路径修改为~/icon.png,适配全局匹配规则输出的文件结构。

验证操作

修改配置后先执行ns clean清空项目缓存,再重新构建运行,避免旧缓存干扰验证结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:39:02