当前位置: 首页 > news >正文

iOS Flutter Engine源码调试和修改

iOS Flutter Engine源码调试和修改

      • 1. 前提:
      • 2. 步骤:
      • 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_unoptFLUTTER_ENGINE=/path/to/engine/srcLOCAL_ENGINE=ios_debug_sim_unopt
    
    1. 自动修改
      在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/

相关文章:

iOS Flutter Engine源码调试和修改

iOS Flutter Engine源码调试和修改 1. 前提:2. 步骤:3. 参考资料 1. 前提: 已将成功安装deop_tools工具已经通过gclient命令同步好flutter engine源码 2. 步骤: 进入engine/src目录 创建flutter engine构建文件 真机文件debug模式: ./flu…...

Java日志系统之Log4j

目录 Log4J Log4j的简单使用 日志级别 Log4j的组件 Loggers Appenders Layout Layout格式 设置配置文件加载 配置文件解析 Log4J 是Apache下开源的日志框架 Log4j的简单使用 Testpublic void testLog4J(){Logger logger Logger.getLogger(Log4jTest.class);logger…...

Windows11系统安装WSL教程

WSL,全称Windows Subsystem for Linux,是微软官方提供的可以在Windows上直接运行的Linux环境,包括大多数命令行工具、程序和应用,由系统底层虚拟机平台支持。 开启相关服务 1、控制面板-启用或关闭Windows功能 2、勾选以下两个…...

总结一下vue中v-bind的常见用法

文章目录 🐕前言:🏨简述一下v-bind命令🧸其它写法1.还是当成字符串🦓其它写法2.当成对象来使用 🐕前言: 本篇博客主要总结一下v-bind命令在vue中的常见用法(看完即懂) …...

全面超越AutoGPT,面壁智能联合清华NLP实验室开源大模型「超级英雄」XAgent

近日,国内领先的人工智能大模型公司面壁智能又放大招,联合清华大学 NLP 实验室共同研发并推出大模型「超级英雄」——XAgent。 通过任务测试,XAgent 在真实复杂任务的处理能力已全面超越 AutoGPT。 现已在 GitHub 正式开源,地址 …...

springBoot--web--http缓存机制测试

springBoot--web--http缓存机制测试 前言1、多端内容适配基于请求头内容协商(默认开启)基于请求参数内容协商(需要开启) 2、默认返回json数据3、设置返回xml数据导入jackson-dataformat-xml包在类文件中添加注解 JacksonXmlRootEl…...

免费活动】11月4日敏捷武林上海站 | Scrum.org CEO 亲临现场

活动介绍 过去的几年里,外界的风云变幻为我们的生活增添了一些不一样的色彩。在VUCA世界的浪潮里,每一个人都成为自己生活里的冒险家。面对每一次的变化,勇于探索未知,迎接挑战,努力追逐更好的自己。 七月&#xff0…...

VSCode搭建ESP32 ESP-IDF开发环境-Windows

陈拓 2023/10/09-2023/10/14 1. 安装Windows系统下的ESP32 ESP-IDF开发环境 见《Windows系统安装ESP32 ESP-IDF开发环境》 Windows系统安装ESP32 ESP-IDF开发环境-CSDN博客Windows系统安装ESP32 ESP-IDF开发环境。https://blog.csdn.net/chentuo2000/article/details/1339225…...

Java可重入锁(GPT编写)

Java可重入锁是Java并发编程中常用的一种锁机制,它可以允许同一个线程多次获取同一个锁,从而避免死锁和其他并发问题。在本篇博客中,我们将对Java可重入锁的源码进行分析,以便更好地理解它的实现原理和使用方法。 Java可重入锁的…...

京东数据平台:2023年9月京东净水器行业品牌销售排行榜!

鲸参谋监测的京东平台9月份净水器市场销售数据已出炉! 根据鲸参谋平台的数据显示,今年9月份,京东平台净水器的销量为64万,环比下滑约9%,同比下滑约16%;销售额为5.2亿,环比下滑约12%,…...

skiaSharp linux 生成验码字体显示不出来

一、拷贝windows下的字体如:C:\Windows\Fonts 设置字体的地方: var fontPath Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Fonts", "TAHOMA.TTF");最终效果:...

WuThreat身份安全云-TVD每日漏洞情报-2023-10-12

漏洞名称:curl SOCKS5 堆溢出漏洞(CVE-2023-38545) 漏洞级别:高危 漏洞编号:CVE-2023-38545,CNVD-2023-75809 相关涉及:cURL libcurl >7.69.0&#xff0c;<8.3.0 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-25382 漏洞名称:Apache H…...

sobel边缘检测算法

Sobel边缘检测算法是一种常用的图像处理技术&#xff0c;用于检测图像中的边缘和轮廓。该算法基于离散卷积操作&#xff0c;通过对图像进行滤波来寻找图像中灰度值的变化。Sobel算子是一种常用的卷积核&#xff0c;用于检测图像中的垂直边缘和水平边缘。以下是Sobel边缘检测算法…...

Kotlin中抽象类与接口

Kotlin 中的抽象类和接口是面向对象编程中的重要概念&#xff0c;它们提供了一种用于定义和组织代码的方式。在下面的代码示例中&#xff0c;我们将介绍 Kotlin 中的抽象类和接口&#xff0c;并给出相应的示例。 抽象类 抽象类是一种不能被实例化的类&#xff0c;它仅用作其他…...

解决osg绘制场景时因Z冲突导致重影或闪烁等不正常情况

目录 1. 问题的提出 2. Z冲突&#xff08;z-fighting&#xff09;简介 2.1. Z冲突&#xff08;z-fighting&#xff09;产生的原因 2.2. 如何消除Z冲突&#xff08;z-fighting&#xff09; 3. 代码实现 1. 问题的提出 今天绘制了一个棋盘格&#xff0c;鼠标在棋盘格上单击…...

adb 获取 Android 设备中已安装的 apk 文件

前言 今天发现手机上一个应用在应用商店已经搜索不到了&#xff0c;想把其推荐给朋友使用&#xff0c;发现不知道从哪里找原始的 apk 安装文件&#xff0c;记录一下。 如何提取 apk 两种方法 MT管理器导出 可以使用 MT管理器(Android 平台逆向神器)&#xff0c;它有个 安装…...

学习记录683@类别不平衡问题解决的基本策略之再缩放的数学解释

什么是类别不平衡问题 分类学习方法都有一个共同的基本假设&#xff0c;即不同类别的训练样例数目相当。如果不同类别的训练样例数目稍有差别&#xff0c;通常影响不大&#xff0c;但若差别很大&#xff0c;则会对学习过程造成困扰。例如有998个反例&#xff0c;但正例只有2个…...

2023App测试必掌握的核心测试:UI、功能测试

一、UI测试 UI即User Interface (用户界面)的简称。UI 设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性有品味,还要让软件的操作变得舒适、简单、自由、充分体现软件的定位和特点。手机APP从启动界面开始, 到运行过程,直至退出,…...

华为荣耀手机,开启开发者选项,hbuilder调试依然找不到

我的手机是华为荣耀50&#xff0c;其他华为手机不知道是不是这个问题哦 解决办法&#xff1a;usb配置&#xff0c;选择音频来源 然后就可以了...

【C++】特殊类实现

一、请设计一个类&#xff0c;不能被拷贝 拷贝只会放生在两个场景中&#xff1a;拷贝构造函数以及赋值运算符重载&#xff0c;因此想要让一个类禁止拷贝&#xff0c; 只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98 将拷贝构造函数与赋值运算符重载只声明不定义…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...