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

Flutter真机运行正常但安装APK后无法下载/读取文件问题

问题排查与解决建议

1. 先获取release包运行日志(无需root)

只要手机开启了USB调试,就能通过adb命令抓取应用运行日志,执行:

adb logcat -s flutter

这条命令会过滤出Flutter相关的所有日志,包括你代码里的print输出和未捕获的异常,拿到日志就能精准定位是下载还是读取环节出了问题。

2. 检查AndroidManifest权限配置

Debug模式下Flutter会自动添加INTERNET权限,但Release包必须显式声明。打开android/app/src/main/AndroidManifest.xml,确认存在以下权限:

<uses-permission android:name="android.permission.INTERNET"/>

如果你下载路径用的是外部存储(而非应用私有目录),还需要添加存储权限并做动态申请;但你当前用的getApplicationDocumentsDirectory是应用私有目录,理论上不需要额外存储权限,不过仍需确认下载路径与读取路径一致。

3. 给Dio下载添加异常捕获

你当前的下载代码没有错误处理逻辑,无法判断下载是否成功。修改下载代码:

try {
  await Dio().download(fileurl, savePath);
  print('下载完成,文件路径:$savePath');
} catch (e) {
  print('下载失败详情:$e');
}

通过adb日志就能看到下载环节的具体状态。

4. 检查Release包的代码混淆规则

默认Release包会开启代码混淆,可能导致Dio、xml2json或你的业务代码被混淆后失效。打开android/app/proguard-rules.pro,添加以下规则:

# 保留Flutter核心类
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

# 保留Dio相关类
-keep class com.dio.** { *; }
-dontwarn com.dio.**

# 保留xml2json相关类
-keep class xml2json.** { *; }
-dontwarn xml2json.**

# 保留你的业务代码(替换为你的实际包名)
-keep class com.yourpackage.** { *; }

添加后重新打包测试。

5. 验证文件路径与存在性

在路径获取和文件读取代码中添加打印:

Future<String> get _localPath async {
  final directory = await getApplicationDocumentsDirectory();
  print('应用私有目录路径:${directory.path}');
  return directory.path;
}

_readGPX() async {
  print("_readGPX");
  final myTransformer = Xml2Json();
  try {
    final file = await _localFile;
    print('待读取文件路径:${file.path}');
    print('文件是否存在:${await file.exists()}');
    // 后续读取逻辑...
  } catch (e) {
    print('文件读取异常:$e');
    return 0;
  }
}

通过adb日志确认下载的文件是否真的被写入目标路径,以及读取时文件是否存在。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:37:43