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/

相关推荐
好的佩奇12 小时前
Dart 之增强枚举
android·flutter·dart
茶底世界之下14 小时前
灯暖窗冷,色温要不要继续降?用 Awaking 看混合光的取舍
ios
好的佩奇15 小时前
蓝牙之无线电与通信距离
android·flutter·蓝牙
2501_9160074719 小时前
Windows OpenSSL 生成 iOS 证书,制作 p12 与描述文件,KXBuild 签名实操
windows·vscode·ios·objective-c·个人开发·swift·敏捷流程
最强小杰21 小时前
gpt-image-2.5-sunburst + OpenAI SDK + Cline 怎么接?完整图生图与局部重绘教程
gpt·ios·ai·iphone
kk_net889921 小时前
FSNotes:macOS 和 iOS 上的开源笔记管理器
笔记·其他·macos·ios
00后程序员张21 小时前
Windows 开发 iOS App 入门,用 SwiftUI 写第一个 iOS App 装到 iPhone
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
2501_915106321 天前
抓包抓到乱码或压缩字节怎么解析,TraceEagle五种查看模式和一键解码
网络协议·计算机网络·网络安全·ios·adb·https·udp
andyweike2 天前
Swift
开发语言·ios·swift
茶底世界之下2 天前
白杯偏蓝,色温调到哪里该停?Awaking 两版正式导出
ios