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

Flutter使用image_picker打包Release APK时图库选视频崩溃

排查步骤

1. 检查混淆规则

Release包默认开启代码混淆,若image_picker相关类被混淆,会导致反射调用失败。在android/app/proguard-rules.pro中添加以下规则:

-keep class io.flutter.plugins.imagepicker** { *; }
-keep class io.flutter.plugins.imagepicker.** { *; }
-keep class com.yalantis.ucrop** { *; }

同时确认android/app/build.gradle中开启minifyEnabled true时,上述规则已正确配置。

2. 修正权限配置与动态申请

  • 移除不必要的权限:MANAGE_EXTERNAL_STORAGE是特殊权限,image_picker无需此权限,反而可能引发兼容性问题,直接从AndroidManifest中删除。
  • 适配Android版本权限:Android 13+依赖READ_MEDIA_VIDEO,低于13版本依赖READ_EXTERNAL_STORAGE,务必在调用选择视频前动态申请权限(仅Manifest配置不生效),可借助permission_handler包实现:
import 'package:permission_handler/permission_handler.dart';

// 调用pickVideo前先申请权限
final status = await Permission.videos.request();
if (status.isGranted) {
  final XFile? res = await ImagePicker().pickVideo(source: ImageSource.gallery);
}
  • 移除WRITE_EXTERNAL_STORAGE:Android 10+启用分区存储,image_picker已适配该机制,无需此权限,删除可避免权限冲突。

3. 调整image_picker版本

部分设备崩溃可能是当前版本的适配bug,尝试升级到最新稳定版,或回退到已知兼容的版本。修改pubspec.yaml:

image_picker: ^1.0.4 # 替换为最新稳定版

4. 捕获崩溃日志定位原因

没有日志无法精准排查,通过以下方式获取崩溃信息:

  • 用Android Studio连接设备,打开Logcat,切换到Release包进程,操作触发崩溃后查看异常栈。
  • 集成firebase_crashlytics,Release包崩溃后会自动上传日志,可查看具体报错类型(如空指针、权限异常、类找不到等)。

5. 测试设备特定图库兼容性

部分定制系统(如小米、华为的自带图库)与image_picker存在交互兼容性问题:

  • 尝试用系统文件选择器替代图库,验证是否仍崩溃。
  • 测试同Android版本的其他品牌设备,确认是否仅特定品牌/型号设备出现问题,针对性查找适配方案。

6. 检查编译版本适配

确保android/app/build.gradle中的compileSdkVersion和targetSdkVersion与image_picker要求一致(最新版通常要求34),版本过低会导致API调用兼容性问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:55:17