Flutter Engine 编译

本地环境

Flutter 开发基本环境配置,SDK【】

MAC. M2芯片

git工具

python环境[MAC自带]

xcode

Chromium depot_tools

depot_tools 是调试 Flutter 引擎的必备工具包,包含了 gclient、gn 和 ninja 等工具,这些在下面会用到!

​​​​​​​​​安装depot_tools:

1. 选择一个目录例如 /Users/xxx/

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

2. 配置环境变量

export PATH=${PATH}:你的目录地址/depot_tools

获取源代码

1.配置github的​​​​​​​​​​​​​​​​​​​​​​​​​​​​ssh key配置

2.Fork https://github.com/flutter/engine into your own GitHub account github账户下​​​​​​​

3.创建引擎存放目录、添加.gclient文件(可手动创建)

mkdir engine

cd engine

touch .gclient

gclient内容如下(替换为自己的Github Flutter Engine仓库-去fock 一份到自己仓库)

solutions = [

  {

    "managed": False,

    "name": "src/flutter",

    "url": "git@github.com:<YOUR_NAME>/engine.git",

    "custom_deps": {},

    "deps_file": "DEPS",

    "safesync_url": "",

  },

]

cd engine

同步代码:

gclient sync (时间可能比较长)

1添加指向官方仓库的upstream

git remote add upstream git@github.com:flutter/engine.git

2,查看origin和upstream 

git remote -v

origin git@github.com:<YOUR_NAME>/engine.git (fetch)

origin git@github.com:<YOUR_NAME>/engine.git (push)

upstream git@github.com:flutter/engine.git (fetch)

upstream git@github.com:flutter/engine.git (push)

4,从原仓库拉取代码并直接合并代码

git pull upstream (可能失败,根据提示-添加sshkey配置)

匹配版本

1、在实际开发中,一般不直接使用master的代码直接编译,都是需要获取指定版本的engine代码。可以通过本地安装的Flutter SDK版本来获取所对应的engine版本。

cat dev/flutter/bin/internal/engine.version //获取当前版本commit id

1837b5be5f0f1376a1ccf383950e83a80177fb4e

# 调整代码

cd engine/src/flutter

git reset --hard <commit id>

gclient sync -D --with_branch_heads --with_tags

在src目录下分别执行准备构建文件和构建产物命令,如下

准备构建文件:(android为例)

Android 只编译arm 和arm64架构,debug和release共4个产物,debug主要后面用来做调试,release用来打包

./flutter/tools/gn --android --unoptimized

./flutter/tools/gn --android --unoptimized --android-cpu=arm64

./flutter/tools/gn --android --runtime-mode=release

./flutter/tools/gn --android --android-cpu=arm64 --runtime-mode=release

gn 命令说明:

空:表示编译目录为当前主机平台(例如:mac下编译则为mac平台)
–ios :表示编译目标为 ios 平台;
–android :表示编译目标为 android 平台;
–android-cpu=arm64 :表示针对 android 64位;
–android-cpu x86 :表示针对 x86 模拟器
–android-cpu x64 :表示针对 x64 模拟器
–unoptimized :表示不做编译优化,这样可以编译速度快,而且方便进行调试;
–no-goma :表示不使用 goma(针对mac系统);
–xcode-symlinks:表示编译目标为 mac os 并且使用 goma时,需要加上这个参数;
–simulator:表示针对 ios 模拟器;
–ios-cpu=arm:表示针对 arm 架构;

构建您的可执行文件

ninja -C out/android_debug_unopt

ninja -C out/android_debug_unopt_arm64

ninja -C out/android_release

ninja -C out/android_release_arm64

验证,新项目使用本地引擎

创建一个flutter项目,我使用的android studio

1.打开项目,在pubspec.yaml文件添加如下依赖

dependency_overrides:

  sky_engine:

    path: /Users/wei/dev/flutter_source/engine/src/out/android_debug_unopt/gen/dart-pkg/sky_engine

2.添加运行参数

--local-engine-src-path=/Users/wei/dev/flutter_source/engine/src

--local-engine=android_debug_unopt

--local-engine-host=android_debug_unopt

改动引擎代码,验证引擎

如何验证编译App的时候,确实是用了我们自编译的 Flutter Engine 呢?我们可以修改 Flutter Eingine ,加一些日志输出看看。

使用 Xcode 打开 engine/src/out/android_debug_unopt_arm64/flutter_engine.xcodeproj 工程文件。

然后,打开 代码文件 engine/src/flutter/shell/common/engine.cc 源代码文件。

重新编译(增量编译,只编译改动代码,非常快)

ninja -C out/android_debug_unopt

运行输出了改动代码:

 参考文章:

开发环境:

Setting up the Engine development environment · flutter/flutter Wiki · GitHub​​​​​​​

编译:

Compiling the engine · flutter/flutter Wiki · GitHub​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/407141.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信号系统之线性图像处理

1 卷积 图像卷积的工作原理与一维卷积相同。例如&#xff0c;图像可以被视为脉冲的总和&#xff0c;即缩放和移位的delta函数。同样&#xff0c;线性系统的特征在于它们如何响应脉冲。也就是说&#xff0c;通过它们的脉冲响应。系统的输出图像等于输入图像与系统脉冲响应的卷积…

Unity资源加密解决方案

据统计&#xff0c;全球范围内超过50%的游戏均使用Unity创作而成&#xff0c;作为游戏开发市场第一大游戏引擎占有者&#xff0c;Unity已经全面覆盖到各个游戏平台。 全球游戏引擎市场占有率 由于体量庞大&#xff0c;Unity游戏已成为受游戏黑灰产攻击的重灾区&#xff0c;因游…

Vue3自定义组件v-model双向绑定

无能吐槽一下&#xff0c;虽然用了很多遍v-model&#xff0c;但是还是不得要领&#xff0c;每次看官网都感觉说的不是很清晰&#xff0c;在写的时候还是要查看文档&#xff0c;可能就是不理解原理&#xff0c;这次特意好好写一篇文章&#xff0c;让自己好好理解一下。 自定义一…

网络编程、UDP、TCP

计算机网络 就是将地理位置不同的具有独立功能的多台计算及外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软件以及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统 目的 传播交流信息、数据交换、通信 如何做…

JVM(1)

JVM简介 JVM是Java Virtual Machine的简称,意为Java虚拟机. 在java中,它归属于jre(java运行时环境), 而jre归属于jdk(java开发工具包). 虚拟机是指通过软件模拟的具有完整硬件功能的,运行在一个完全隔离的环境中的完整计算机系统. 常见的虚拟机:JVM, VMwave, VirtualBox. J…

java——File类和字符集

目录 File类File类的常用操作&#xff1a;案例&#xff1a;文件搜索的实现案例&#xff1a;递归文件夹删除 字符集几种常见的字符集总结字符集的编码和解码 File类 File是java.io.包下的类&#xff0c;File类的对象&#xff0c;用于代表当前操作系统的文件&#xff08;可以是文…

聊聊JVM运行时数据区的堆内存

聊聊JVM运行时数据区的堆内存 内存模型变迁&#xff1a; Java堆在JVM启动时创建内存区域去实现对象、数组与运行时常量的内存分配&#xff0c;它是虚拟机管理最大的&#xff0c;也是垃圾回收的主要内存区域 。 内存模型变迁&#xff1a; 为什么要有年轻区和老年区&#xff1f;…

中兴助力低空经济发展,携山东移动完成5G-A通感一体商用验证

日前&#xff0c;中兴通讯在5G-A通感一体化技术研究和商用落地领域实现新突破。具体来说&#xff0c;中兴通讯联手山东移动&#xff0c;率先完成了5G-A&#xff08;5G-Advanced&#xff09;通感一体化技术试点&#xff0c;完成对低空无人机的通信感知融合测试。据悉&#xff0c…

java面试题之mysql篇

1、数据库索引 索引是对数据库表中一列或多列的值进行排序的一种结构&#xff0c;使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她&#xff0c;则与在表中搜索所有的行相比&#xff0c;索引有助于更快地获取信息。 索引的一个主要目的就是加快检索…

数据结构day4

实现创建单向循环链表、创建结点、判空、输出、头插、按位置插入、尾删、按位置删除 loop_list.c #include "loop_list.h" loop_p create_head() {loop_p L(loop_p)malloc(sizeof(loop_list));if(LNULL){printf("空间申请失败\n");return NULL;}L->le…

clip_as_service学习

参考&#xff1a;clip_as_service学习过程(一)——安装客户端与服务端_clip-as-service-CSDN博客 CLIP-as-service 0.8.3 documentation (jina.ai) pip3 install clip-client /usr/local/python3/bin/python3.7 -m pip install --upgrade pip pip3 install clip-server pyt…

boost搜索引擎

boost搜索引擎 1. 项目背景1.1 搜索引擎基本原理1.2 Boost库1.3 项目的目标 2. Boost搜索引擎宏观流程3. 技术栈与环境3.1 技术栈3.2 环境 4. 认识什么是索引4.1 正排索引4.2 倒排索引4.3 我们如何分词&#xff1f;4.4 模拟查找过程 5. 数据处理5.1 下载boost库到本地5.2 认识标…

IOS不使用默认的mainStroryboard作为首个controller的方法

步骤1&#xff1a; 删除info.plist文件下的一条配置&#xff0c;如图 步骤2&#xff1a; 编辑AppDelegate.m&#xff0c;参考以下代码 interface AppDelegate () //property (strong, nonatomic) UIWindow * window; property(nonatomic,strong) UIWindow * win; property(…

接近于pi的程序

在一个平静的午后&#xff0c;两个神秘的数字悄然相遇了。它们分别是-1031158223和-328227871。这两个数字看起来普普通通&#xff0c;但谁知它们背后隐藏着一段令人惊叹的奇幻之旅。 这两个数字其实是π的两位探险家&#xff0c;它们决定通过一次除法运算来探索π的奥秘。它们…

影响KNN算法的其它因素及欧式距离方案流程

预测并不是特别准确原因 四大原因 1. 预测模型的参数不够好,上篇文章K的取值问题,可以解决; 2. 影响因子不够多,这个需要增加维度,如2维,(x,y); 3. 样本数量不够,这个需要更多的数据采集,才能保证数据的精准度; 4. 预测选取模型不够好,这个只能重新选择其它模型…

VSCode中打开md文件的智能提示

VSCode中打开md文件的智能提示 vscode中md的只能提示是默认关闭的,要打开必须要做些设置. 搜了好多文章,都是坑! 明明没设置成功,参数类型不对还信誓旦旦的坑自己同胞! 也难怪国内人学的那么难,反而国外学的很简单! 找了以下外面的资料,还是隔壁的人认真,给出了以下方法,测试成…

Sqli-labs靶场第11关详解[Sqli-labs-less-11]

Sqli-labs-Less-11 前言&#xff1a; SQL注入的三个条件&#xff1a; ①参数可控&#xff1b;&#xff08;从参数输入就知道参数可控&#xff09; ②参数过滤不彻底导致恶意代码被执行&#xff1b;&#xff08;需要在测试过程中判断&#xff09; ③参数带入数据库执行。&…

maven插件wagon-ssh、os-maven-plugin、buildnumber-maven-plugin使用详解

文章目录 前言一、os-maven-plugin的使用二、buildnumber-maven-plugin使用1、时间戳策略2、数字策略 三、wagon-ssh使用1、上传文件/文件夹2、执行Linux命令或者shell脚本 总结 前言 有时我们在构建项目时&#xff0c;希望能自动生成版本号或者生成不同操作系统标识的版本后缀…

力扣日记2.22-【回溯算法篇】47. 全排列 II

力扣日记&#xff1a;【回溯算法篇】47. 全排列 II 日期&#xff1a;2023.2.22 参考&#xff1a;代码随想录、力扣 47. 全排列 II 题目描述 难度&#xff1a;中等 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输…

07 Redis之持久化(RDB(Redis DataBase) + 写时复制 + AOF(Append Only File)+混合持久化)

4 Redis持久化 Redis 是一个内存数据库&#xff0c;然而内存中的数据是不持久的&#xff0c;若主机宕机或 Redis 关机重启&#xff0c;则内存中的数据全部丢失。 当然&#xff0c;这是不允许的。Redis 具有持久化功能&#xff0c;其会按照设置以快照或操作日志的形式将数据持…
最新文章