Flutter的call_log包在Android11上报错,有哪些可用替代方案?
call_log包Android 11崩溃问题解决方案
快速修复方案(无需改动业务代码,10分钟生效)
直接替换依赖为适配了Android V2 embedding的衍生版本:
- 打开项目的
pubspec.yaml,找到原有call_log: 3.0.3的依赖行 - 替换为
call_log_v2的最新稳定版本 - 执行
flutter pub get后重新编译运行即可,原有调用call_log包的业务代码完全不用修改
可选方案
自行适配现有call_log包
如果不想更换依赖,可以手动修改本地缓存的call_log 3.0.3包代码完成V2适配:
- 进入本地pub缓存的call_log包的android目录
- 修改
AndroidManifest.xml中的flutterEmbedding元数据值从1改为2 - 修改
CallLogPlugin.java文件,实现FlutterPlugin接口,新增V2嵌入层的注册逻辑:
public class CallLogPlugin implements FlutterPlugin, MethodCallHandler { private MethodChannel channel; private Context context; @Override public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { context = binding.getApplicationContext(); channel = new MethodChannel(binding.getBinaryMessenger(), "call_log"); channel.setMethodCallHandler(this); } @Override public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { channel.setMethodCallHandler(null); } // 保留原有onMethodCall等业务逻辑代码即可 }
- 执行
flutter clean后重新运行项目
降级Flutter版本(不推荐)
可将Flutter版本降级到1.22.6版本,该版本默认兼容Android V1 embedding,不会触发本次报错,但会丢失新版Flutter的功能优化,仅适合临时过渡使用。
不建议等待原call_log包更新:该包已长时间停止维护,没有V2适配的更新计划。
内容的提问来源于stack exchange,提问作者shantanu sharma
相关产品推荐
相关产品推荐

