Flutter扫码App打开相机时导致模拟器崩溃问题求助
排查Flutter扫码App模拟器崩溃问题
嘿,这种无预警的崩溃确实挺闹心的,结合你描述的情况(日志只显示相机已打开,怀疑Mac不给AVD权限),咱们一步步来排查:
1. 先搞定Mac系统层面的相机权限
Mac的系统权限经常会悄悄“卡”住应用访问相机的请求,你可以这么做:
- 打开Mac的系统设置(Ventura及以上点左上角苹果图标→系统设置;旧版是系统偏好设置)
- 找到隐私与安全性→相机
- 检查列表里有没有
Android Studio或者qemu-system-x86_64(这是AVD的核心进程),要是没有,点击加号,找到Android Studio安装目录里的对应程序加进去,然后重启Android Studio和模拟器再试。
2. 核对模拟器的相机配置
有时候模拟器的相机参数没设对也会崩:
- 打开AVD Manager,找到你的模拟器,点那个铅笔图标进入编辑页面
- 切换到Show Advanced Settings(显示高级设置)
- 往下翻到Camera区域:
- 确认后置摄像头选的是Webcam0,而且这个Webcam确实是Mac正在用的摄像头(如果有多个摄像头,不妨换一个试试)
- 检查相机分辨率是不是模拟器支持的,别选太高或者不兼容的分辨率
- 保存后重启模拟器测试。
3. 再检查Android权限配置
虽然你说改了AndroidManifest.xml,但再仔细核对下有没有加全权限:
<!-- 基础相机权限 --> <uses-permission android:name="android.permission.CAMERA" /> <!-- 声明相机硬件特性,部分插件要求这个 --> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
另外,有些扫码插件(比如qr_code_scanner)还要求compileSdkVersion不低于某个版本,你可以对照插件的文档再确认下配置有没有漏。
4. 抓更详细的崩溃日志
模拟器崩溃没日志?试试这俩方法:
- 打开Android Studio的Logcat,崩溃前把过滤器设成你的App包名,或者直接搜
FATAL EXCEPTION,说不定能找到隐藏的错误信息 - 终端里运行
adb logcat *:E,只看错误级别的日志,然后触发扫码操作,盯着终端看有没有输出崩溃相关内容
5. 换个环境验证
要是以上都没解决,换个环境排除问题:
- 新建一个AVD(选不同的Android版本或者设备型号)试试
- 用真实的Android设备测试,看看是不是模拟器本身的兼容性问题
- 也可以换个扫码插件试试,比如把当前插件换成
qr_code_scanner,对比下是否还会崩溃
内容的提问来源于stack exchange,提问作者Killer Beast




