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

Flutter Release APK资源目录异常,res/raw文件读取失败如何解决?

解决Flutter Release模式下Java库无法读取res/raw文件的问题

方案1:将文件迁移到Flutter Assets目录

把res/raw下的JSON和证书文件移到Flutter项目的assets目录(没有的话直接新建),然后在pubspec.yaml里声明这些资源:

flutter:
  assets:
    - assets/config.json
    - assets/cert.cer

之后在Android端的Java代码里,通过AssetManager读取这些文件:

InputStream is = getContext().getAssets().open("config.json");
// 后续根据需求处理输入流

这种方式的核心优势是Flutter的Assets在Debug和Release模式下的读取逻辑完全一致,不会出现目录结构差异导致的文件找不到问题。

方案2:修改Android构建配置,保留res/raw文件的完整性

如果必须保留res/raw目录的原有结构,可以从以下几个维度调整构建规则:

  • 禁用资源压缩(按需选择):在android/app/build.gradle的release构建类型中关闭资源压缩:
android {
    buildTypes {
        release {
            shrinkResources false
            // 其他原有配置...
        }
    }
}
  • 阻止目标文件被压缩:如果只是不想让JSON、证书这类文件被压缩处理,添加packagingOptions规则:
android {
    packagingOptions {
        doNotStrip '**/*.json'
        doNotStrip '**/*.cer'
    }
}
  • 保留资源ID不被混淆:如果是ProGuard/R8混淆导致资源引用失效,在proguard-rules.pro里添加规则:
-keep class 你的应用包名.R$raw { *; }

替换成你实际的应用包名,确保Java库能正确引用到R.raw里的资源ID。

方案3:使用Android原生Assets目录

把文件放到Android模块的src/main/assets目录,然后在Java代码里通过AssetManager读取,逻辑和方案1类似,但不需要修改Flutter的pubspec.yaml,适合纯Android端的快速调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:57:13