Flutter Engine编译过程及问题记录

编译

  • 安装 depot_tools 并添加到环境变量。gclient 来自 depot_tools 工具
  • fork flutter/engine (在github中fork一份flutter engine代码,注意配置 ssh 访问)
  • 克隆自己fork的flutter engine代码
  • 在engine目录创建.gclient文件 ,内容如下

solutions = [
  {
    "managed": False,
    "name": "src/flutter",
    "url": "git@github.com:<your_name_here>/engine.git",
    "custom_deps": {},
    "deps_file": "DEPS",
    "safesync_url": "",
  },
]
复制代码
  • 在 engine 目录中执行 gclient sync,如果遇见 ping chrome-infra-packages.appspot.com 不通的话,需要挂代理服务器,然后shell命令执行
export http_proxy=http://127.0.0.1:1087;
export https_proxy=http://127.0.0.1:1087; 
复制代码

再次 gclient syc,代理的端口号需要根据自己用的代理工具修改,SS为1087

  • 切换源码。编译前的一个重要操作是将源码切换到 本地 Flutter SDK 的 engine version (一个 commit id) 对应的提交点,避免可能出现的报错
# 查看本地安装的 Flutter SDK 引擎版本, 这个文件中是包含对应的 commit id 
vim src/flutter/bin/internal/engine.version

# 调整代码
cd engine/src/flutter
git reset --hard <commit id>
gclient sync -D --with_branch_heads --with_tags

# 准备构建文件
cd engine/src

# flutter 1.12 使用以下命令生成 host_debug_unopt 编译配置
# ./flutter/tools/gn --runtime-mode debug

# flutter 1.17 使用以下命令生成 host_debug_unopt 编译配置
./flutter/tools/gn --unoptimized

# android arm (armeabi-v7a) 编译配置
./flutter/tools/gn --android --unoptimized

# android arm64 (armeabi-v8a) 编译配置
./flutter/tools/gn --android --unoptimized --runtime-mode=debug --android-cpu=arm64

# 编译
ninja -C out/host_debug_unopt -j 16
ninja -C out/android_debug_unopt -j 16运行
ninja -C out/android_debug_unopt_arm64 -j 16
复制代码

运行

命令行中使用自定义引擎:

# 创建一个 Flutter 工程
flutter create --org com.yourdomain your_app_name

# 使用本地引擎运行 Flutter App
flutter run
  --local-engine-src-path <engine path>/src
  --local-engine=android_debug_unopt_arm64
复制代码

参数资料

编译过程主要参考自

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享