使用Firebase MLKit条码扫描器报tflite模型文件缺失错误
MLKit条码扫描打印模型文件不存在报错的解决方案
这三条错误日志不会影响扫码功能的正常使用,属于MLKit的正常逻辑输出,不是功能故障。
报错原因
- 日志里提到的三个
.tflite文件是MLKit条码扫描的AI模型文件,你当前接入的是默认的GMS动态下发版本的条码SDK:SDK启动时会优先尝试读取APK内置的本地模型文件,读取失败(也就是你看到的这三条No such file or directory日志)后,会自动通过Google Play服务下载对应模型到应用私有目录,下载完成后扫码功能就可以正常运行。 - 只要你的测试/正式用户设备安装了可用的Google Play服务、没有限制GMS的网络访问权限,模型下载完成后就不会再出现功能异常,和你现在“扫码正常但一直打印这三条错误”的现象完全对应。
唯一会触发实际故障的场景:设备无GMS环境、GMS被禁用、网络无法连接Google服务导致模型下载失败,此时扫码功能会直接不可用,触发你写的
addOnFailureListener回调。
消除日志的可选方案
如果你不想看到这三条错误日志,可以选下面任意一种方案处理:
- 替换为静态打包模型的SDK依赖
把模块级build.gradle里的条码扫描依赖替换为静态打包版本,模型会直接打包进APK的assets目录,启动时直接读取本地文件,不会再触发文件查找失败的日志。这个方案的缺点是会让APK包体积增加3-5MB左右,注意不要同时引入动态下发和静态打包两个版本的依赖,避免冲突。
依赖配置参考:// 替换原有的barcode-scanning动态版依赖 implementation 'com.google.mlkit:barcode-scanning:17.2.0' - 直接忽略日志
这三条日志是SDK底层Native层输出的,不会抛异常到业务层,也不会触发你的失败回调,完全不影响现有业务逻辑运行,不做任何处理也没问题。
额外的代码优化建议
你贴的业务代码里用CoroutineScope(Dispatchers.IO).launch创建的是无绑定的裸协程,当扫码页面销毁时协程不会自动取消,存在内存泄漏、页面销毁后更新UI导致崩溃的风险。建议替换为和页面生命周期绑定的lifecycleScope,网络请求部分用withContext(Dispatchers.IO)切换线程即可,能自动在页面销毁时取消未完成的请求。
内容的提问来源于stack exchange,提问作者Miguel Reid Ruiz
相关产品推荐
相关产品推荐

