-
-
[原创]手把手教大家如何编译flutter的引擎文件libflutter.so(重置版本)
-
2022-5-17 17:11
15627
-
[原创]手把手教大家如何编译flutter的引擎文件libflutter.so(重置版本)
前言
要想完全的了解flutter引擎的内容,需要自行编译做调试跟进。
核心参考 https://github.com/Impact-I/reFlutter/blob/main/.github/workflows/main.yml
这个 github action 配置文件
为了这次编译我完全开了一个新的ubuntu18的虚拟机。下面开干。
配置代理
depot_tools 安装配置
depot_tools 谷歌的包管理工具,可以管理多个git项目。重点就是可以断点续传,避免拉一半消失。
1 | git clone https: / / chromium.googlesource.com / chromium / tools / depot_tools.git
|
配置环境变量使gclient命令生效
底部新增一行
1 | export PATH = "$PATH:/home/nizz/work_space/flutter/depot_tools"
|
配置生效
下拉flutter engine仓库
这一步我们使用gclient来拉取仓库
新建文件夹
1 2 | mkdir engine_compile
cd engine_compile
|
新建配置文件填写gclient配置
1 2 | touch .gclient
gedit .gclient
|
写入配置
1 2 3 4 5 6 7 8 9 | solutions = [
{
"managed" : False ,
"name" : "src/flutter" ,
"url" : "git@github.com:flutter/engine.git" ,
"custom_deps" : {},
"deps_file" : "DEPS" ,
"safesync_url" : "",
},]
|
方便同步 可以fork一份到自己仓库 配置ssh密钥
参考 https://blog.csdn.net/qq_36275734/article/details/78877851
修改前面的git仓库路径为自己的
开始同步
需要等很久 打开网络流量监控看下
切换源码分支
同步完成切换分支 先去看本地的flutter版本
你的flutter环境下的 /flutter/bin/internal/engine.version可以找到
比如我的 57d3bac3dd5cb5b0e464ab70e7bc8a0d8cf083ab
https://github.com/flutter/engine/tree/57d3bac3dd5cb5b0e464ab70e7bc8a0d8cf083ab
1 | git reset - - hard 57d3bac3dd5cb5b0e464ab70e7bc8a0d8cf083ab
|
1 2 3 | nizz@ubuntu:~ / work_space / flutter / engine_compile / src / flutter$ git reset - - hard 57d3bac3dd5cb5b0e464ab70e7bc8a0d8cf083ab
Checking out files: 100 % ( 1993 / 1993 ), done.
HEAD is now at 57d3bac3dd Adds a gn script flag to select mallinfo2 when building the Dart VM (
|
查看当前commitid
确认开始同步
1 | gclient sync - - with_branch_heads - - with_tags - - verbose
|
又是漫长的等待同步完成
开始编译
1 | apt - get install ninja - build
|
编译预配置
只编译安卓
1 | . / flutter / tools / gn - - android - - unoptimized
|
1 2 3 4 5 | nizz@ubuntu:~ / work_space / flutter / engine_compile / src$ . / flutter / tools / gn - - android - - unoptimized
GOMA usage was specified but can't be found, falling back to local builds. Set the GOMA_DIR environment variable to fix GOMA.
Generating GN files in : out / android_debug_unopt
Generating compile_commands took 56ms
Done. Made 582 targets from 223 files in 580ms
|
具体的编译参数看官方文档
https://github.com/flutter/flutter/wiki/Compiling-the-engine#compiling-for-android-from-macos-or-linux
开始编译 自行输出目录 是前面创建的输出目录
1 | ninja - C out / android_debug_unopt
|
等待成功即可。
1 2 3 4 5 6 7 8 9 10 | nizz@ubuntu:~ / work_space / flutter / engine_compile / src$ sudo ninja - C out / android_debug_unopt
ninja: Entering directory `out / android_debug_unopt'
[ 499 / 4024 ] ACTION / / flutter / shell / plat...a( / / build / toolchain / android:clang_arm)
Note: Some input files use or override a deprecated API.
Note: Recompile with - Xlint:deprecation for details.
[ 4015 / 4024 ] STAMP obj / flutter / sky / sky.stamp
[ 4016 / 4024 ] ACTION / / flutter / testing / s...t( / / build / toolchain / android:clang_arm)
Note: Some input files use or override a deprecated API.
Note: Recompile with - Xlint:deprecation for details.
[ 4024 / 4024 ] STAMP obj / default.stamp
|
如何切换源码版本
目标引擎版本 857bd6b74c5eb56151bfafe91e7fa6a82b6fee25
fatal: Could not parse object '857bd6b74c5eb56151bfafe91e7fa6a82b6fee25'.
先 进行 git pull 操作 更新git log找到该版本信息
1 2 | git reset - - hard 857bd6b74c5eb56151bfafe91e7fa6a82b6fee25
HEAD is now at 857bd6b74c [flutter_releases] Flutter stable 3.3 . 7 Engine Cherrypicks (
|
开始同步
gclient sync --with_branch_heads --with_tags --verbose
参考资料
[培训]《安卓高级研修班(网课)》月薪三万计划
最后于 2022-11-24 11:12
被小黄鸭爱学习编辑
,原因: