HarmonyOS鸿蒙Next中工程切换了flutter,第三方库也替换了ohos的库,目前app可以成功build,但是启动一直loading状态

HarmonyOS鸿蒙Next中工程切换了flutter,第三方库也替换了ohos的库,目前app可以成功build,但是启动一直loading状态 【问题描述】:工程切换了鸿蒙的flutter,第三方库也替换了ohos的库,目前app可以成功build,但是启动一直loading状态。Flutter的devtools debuger看,一直不停的跑flutter.frame。鸿蒙的开发工具log一直报:Thread:547484584328  [INFO:flutter/fml/platform/ohos/hiappevent/ohos_hiappevent.cpp(92)]  vector stop push_back

【问题现象】:工程切换了鸿蒙的flutter,第三方库也替换了ohos的库,目前app可以成功build,但是启动一直loading状态。

【版本信息】:Flutter3.22.0-ohos-1.0.4; IDE 6.0.1.112 (API Version 21 Release)

【复现代码】:无**(日志信息附件上传)**

【尝试解决方案】:排查对应版本SDK信息, 三方库适配情况均为发现明显问题


更多关于HarmonyOS鸿蒙Next中工程切换了flutter,第三方库也替换了ohos的库,目前app可以成功build,但是启动一直loading状态的实战教程也可以访问 https://www.itying.com/category-92-b0.html

4 回复

开发者您好,为了帮助您定位并解决问题,麻烦提供下问题现象视频,对应时间点的完整hilog日志,以及trace信息

更多关于HarmonyOS鸿蒙Next中工程切换了flutter,第三方库也替换了ohos的库,目前app可以成功build,但是启动一直loading状态的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


尊敬的开发者,您好!感谢您的反馈,问题正在加速处理中,还请关注后续版本,感谢您的理解与支持。

在HarmonyOS Next中,使用Flutter替换工程并替换第三方库为OHOS库后,应用启动时持续处于loading状态,通常是由于Flutter引擎与HarmonyOS的OHOS库兼容性问题或资源加载异常导致。可能涉及Flutter的渲染管线与鸿蒙图形子系统未正确对接,或OHOS库的初始化未完成。需检查Flutter的Channel通信、平台视图集成及OHOS库的依赖配置。

根据你提供的信息,这是一个在HarmonyOS Next上使用Flutter适配库时遇到的典型启动阻塞问题。核心原因在于Flutter引擎的渲染循环(flutter.frame)已启动,但应用的主界面未能成功挂载并显示。

问题根因分析:

  1. Flutter引擎与HarmonyOS UI线程的挂接失败:日志中反复打印的 flutter.frame 表明Flutter的渲染管线在工作,但生成的帧数据未能成功提交到HarmonyOS的UI组件(FlutterAbilityContainerFlutterViewController)进行显示。这通常意味着承载Flutter视图的Native容器初始化或与引擎的绑定环节出现了问题。
  2. 三方库兼容性或初始化顺序冲突:你提到替换了OHOS的库,这是关键点。某些替换后的OHOS原生库(尤其是涉及UI、生命周期、线程管理或事件系统的库)可能与Flutter鸿蒙适配层(flutter_ohos)存在不兼容,或者在应用启动的早期阶段(AbilityonStartFlutter引擎初始化时)发生了阻塞、异常或错误的生命周期回调,导致UI挂载流程中断。
  3. 资源或路由卡死:应用的初始路由("/")对应的Flutter Widget在构建时可能因依赖了某个未正确初始化的OHOS平台通道(Platform Channel)或插件,陷入了等待状态,从而表现为启动Loading。

排查与解决步骤:

第一步:验证基础工程与配置

  • 使用DevEco Studio创建一个全新的HarmonyOS Flutter工程(模板),确保其能正常运行。这可以排除开发环境与基础SDK的问题。
  • 仔细对比你的工程与模板工程在以下关键配置上的差异:
    • entry/src/main/module.json5Ability的配置,特别是srcEntrance(入口页)和window设置。
    • Flutter模块的 pubspec.yamlflutter_ohos 相关依赖的版本是否与Flutter SDK版本(3.22.0-ohos-1.0.4)严格匹配。
    • oh-package.json5 中引入的OHOS原生依赖库的版本,优先使用官方适配版本或已知与 flutter_ohos 兼容的版本。

第二步:隔离并排查三方OHOS库

  • 逐步回退:将替换的OHOS第三方库逐一回退至原Flutter插件或官方兼容版本,每回退一个就编译运行一次,以定位导致问题的具体库。
  • 检查初始化:如果必须使用替换库,请检查这些库的初始化代码。确保它们没有在Flutter引擎初始化完成、Flutter视图挂载之前,执行阻塞主线程或依赖尚未就绪的HarmonyOS上下文的操作。初始化代码应放在合适的生命周期回调中(例如 AbilityonWindowStageCreate 之后)。

第三步:深入日志与调试

  • 启用详细日志:在DevEco Studio的Log窗口中,添加过滤器,重点关注 Flutterflutter_ohosAppLifecycleWindow 以及你替换的那些三方库的Tag。寻找 ERRORWARN 级别的早期日志。
  • 检查Platform Channels:如果你的Flutter代码使用了 MethodChannelEventChannel 与OHOS侧通信,在应用启动时(如 initState 中)就进行调用,请确保OHOS侧的处理器(handler)已准备就绪,并能快速响应,避免Flutter侧挂起等待。
  • 简化启动页:临时将Flutter应用的初始Widget替换为一个极简的 Container(仅包含一个 Text),以排除首页Widget自身复杂逻辑导致的问题。

第四步:检查Flutter引擎初始化参数

  • 查看 entry/src/main/cpp 下的Flutter引擎初始化代码(如果存在)。确保 FlutterEngine::Run 的参数配置正确,特别是与平台视图、Dart入口点相关的设置。

总结 当前问题最可能的原因是某个替换后的OHOS原生库与Flutter鸿蒙适配层的协同工作出现异常,阻碍了Flutter渲染帧与HarmonyOS原生窗口的成功对接。建议按照上述步骤,从库兼容性和初始化顺序入手进行系统性排查。

回到顶部