iOS Flutter Engine源码调试和修改

iOS Flutter Engine源码调试和修改

      • [1. 前提:](#1. 前提:)
      • [2. 步骤:](#2. 步骤:)
      • [3. 参考资料](#3. 参考资料)

1. 前提:

  1. 已将成功安装deop_tools工具
  2. 已经通过gclient命令同步好flutter engine源码

2. 步骤:

进入engine/src目录

  1. 创建flutter engine构建文件

    真机文件debug模式:
    ./flutter/tools/gn --no-goma --ios --unoptimized

    真机文件release模式:
    ./flutter/tools/gn --no-goma --ios --runtime-mode=release

    模拟器文件debug模式:
    ./flutter/tools/gn --no-goma --ios --simulator --unoptimized

    复制代码
    参数说明:
    --unoptimized  debug模式
    --runtime-mode=release release模式
    --ios iOS平台
    --simulator 模拟器
  2. 生成flutter engine工程文件

    按需执行以下所需的版本类型即可。
    host_debug_unopt是必须要编译的,否则在执行本地引擎时就会报错host_xxx找不到

    复制代码
    // 编译host部分,必须要执行
    ninja -C out/host_debug_unopt
    // 编译模拟器debug版本
    ninja -C out/ios_debug_sim_unopt
    // 编译真机debug版本
    ninja -C out/ios_debug_unopt
    // 编译真机release版本
    ninja -C out/ios_release

    如果ninja命令执行,出现错误:depot_tools/ninja.py: Could not find Ninja in the third_party of the current project, nor in your PATH.

    说明ninja工具安装有问题,这时候需要回到depot_tools安装目录,将commit-id回滚到5a0f43aebe00a947546b8dfc966064b8d1a50a6f

    命令执行完成后,就会在engine/src/out下产生3个目录,想要调试对应的engine就拉对应的目录下的flutter_engine工程到自己创建的工程内

  3. 创建flutter测试工程

    xcode界面中,将要调试模式目录下的flutter_engine工程拖入到测试工程中

    特别注意:在拖动时,要保证flutter_engine工程没有在xcode中打开,否则会出现拖进去后,flutter_engine工程无法展开的问题

  4. 修改Generated.xcconfig中如下配置

    1. 手动修改 如果没有找到对应的配置项,就手动添加

      复制代码
        FLUTTER_FRAMEWORK_DIR=/path/to/engine/src/out/ios_debug_sim_unopt
        FLUTTER_ENGINE=/path/to/engine/src
        LOCAL_ENGINE=ios_debug_sim_unopt
    2. 自动修改
      在vscode中的launch.json配置文件中新增如下配置,然后跑一下debug就能同步到Generated.xcconfig文件中

      复制代码
        {
            "name": "本地engine调试",
            "type": "dart",
            "request": "launch",
            "program": "example/lib/main.dart",
            "args": [
                "--local-engine-src-path",
                "/path/to/engine/src",
                "--local-engine",
                "ios_debug_sim_unopt"
            ]
        },
  5. 打开FlutterViewController.m文件,就可以下断点了

  6. 修改SDK内的代码,需要重新执行ninja -C 命令去更新产物,然后再重新运行测试工程

3. 参考资料

https://tech.qimao.com/zi-ding-yi-flutter-yin-qing-liu-cheng/

相关推荐
程序员老刘2 天前
跨平台开发地图 | 2026年6月
flutter·ai编程·客户端
悟空瞎说3 天前
Flutter 架构详解:新手必懂底层原理
flutter
SoaringHeart3 天前
Flutter最佳实践:IM聊天文字链接自动识别跳转
前端·flutter
恋猫de小郭3 天前
KMP / CMP 鸿蒙版本 Beta 发布,他有什么特别之处?
android·前端·flutter
风华圆舞4 天前
Flutter + 鸿蒙 Intents Kit:页面直达能力的完整接入方案
flutter·ui·华为·harmonyos
韩曙亮4 天前
【Flutter】Flutter 组件 ④ ( 组件渲染 的 三棵树理论 | Widget 树 → Element 树 → RenderObject 树 )
flutter·element·widget·renderobject
初级代码游戏4 天前
easy Photo Clean公测版:快速清理iPhone照片 邀请公测
ios·iphone
库奇噜啦呼4 天前
【iOS】RunLoop学习
学习·ios
黑科技iOS上架4 天前
iOS应用周末提交什么情况算卡审
经验分享·ios
恋猫de小郭4 天前
Android 17 正式版发布,全新 AI 和各种破坏性更新
android·前端·flutter