探究Flutter Engine調試

背景

  1. 探究Flutter Webpng性能問題。
  2. 學習Flutter Engine代碼
  3. 嘗試單步調試FLutter Engine

準備

  1. depot_tools工具包
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$ export PATH=$PATH:/path/to/depot_tools
複製代碼

記得長期有效用source了。ios

  1. Python v2.7git

  2. gclientgithub

  3. Flutter SDK 地址:github.com/flutter/flu…vim

獲取依賴

  1. Fork github.com/flutter/eng… 爲了後續修改方便,因此使用Fork 注意:配置ssh key,後面gc sync時候須要使用ssh的下載方式。xcode

  2. 新建engine文件夾bash

  3. 編輯.gclient 在engine文件夾下編輯.gclient文件架構

$ vim .gclientssh

內容:工具

solutions = [
  {
    "managed": False,
    "name": "src/flutter",
    "url": "git@github.com:<你的名字>/engine.git",
    "custom_deps": {},
    "deps_file": "DEPS",
    "safesync_url": "",
  },
]
複製代碼
  1. 進入engine目錄,執行 $ gclient sync 獲取Flutter全部依賴。性能

  2. 同步Flutter Engine代碼

$ cd src/flutter
$ git remote add upstream git@github.com:flutter/engine.git
$ git pull upstream master 
複製代碼

同步Flutte Engine版本

  1. 在engine/src/flutter 目錄下面,獲取當前Flutter SDK所須要的版本號。 cat $FLUTTER_SDK_PATH/bin/internal/engine.version

  2. reset Flutter Engine的commit到指定的SHA-1。 git reset --hard ${engine.version}

  3. 最後gclient同步Engine的依賴。 gclient sync --with_branch_heads --with_tags

編譯

Flutter Engine編譯是使用ninja的,在以前的deptools工具包裏面有。

  • 編譯release: $ ninja -C out/ios_release

  • 編譯真機使用不帶符號的debug模式: ninja -C out/ios_debug && ninja -C out/host_debug

  • 編譯真機使用帶符號的debug模式:ninja -C out/ios_debug_unopt && ninja -C out/host_debug_unopt

  • 編譯模式器使用的debug模式:ninja -C out/ios_debug_sim_unopt && ninja -C out/host_debug_unopt

調試

調試的時候使用官方推薦的直接用lldb調試很複雜,因此我推薦你們使用Xcode直接嵌入工程方式。

  1. 把Flutte Engine裏面的products.xcodeproj拖進須要調試的Demo工程目錄

2. 在Genrated.xcconfig中加上 內容爲

FLUTTER_ROOT=${FlutterSDK 路徑}
FLUTTER_APPLICATION_PATH=${Demo工程路徑}
FLUTTER_TARGET=${Demo工程路徑}/lib/main.dart
FLUTTER_BUILD_DIR=build
SYMROOT=${SOURCE_ROOT}/../build/ios
FLUTTER_FRAMEWORK_DIR=${Flutter_Engine代碼路徑}/src/out/ios_debug_sim_unopt
FLUTTER_BUILD_NAME=1.0.0
FLUTTER_BUILD_NUMBER=1
FLUTTER_ENGINE=${Flutter_Engine代碼路徑}
LOCAL_ENGINE=${輸出的路徑(ios_debug_sim_unopt)}
ARCHS=${支持的架構(arm64)} 
複製代碼
  1. 最後能夠單步調試。

最後

最後這樣就能夠直接斷點到Flutter Engine裏面,我這邊發現Flutter對於Webpng在iOS平臺的優化有限,最後咱們這邊的多圖列表須要再深刻優化。

參考

感謝

手把手教你編譯Flutter engine www.jianshu.com/p/6519ed563…

Compiling the engine github.com/flutter/flu…

相關文章
相關標籤/搜索