Flutter Engine編譯與應用介紹

** 導語 **mac系統(tǒng)上進行flutter engine編譯和應用的介紹


官方介紹

環(huán)境依賴準備

  • mac 環(huán)境。
  • 安裝homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 安裝ant、ninja
brew install ant
brew install ninja
  • 使用默認python 2.7
  • 一些網絡可能會有chrome-infra-packages.appspot.com報錯,可能會下載一些依賴失敗。編輯host: sudo vi /etc/hosts
# flutter engine
172.217.160.112 storage.l.googleusercontent.com
172.217.160.112 commondatastorage.googleapis.com
172.217.160.68 googleapis.com
172.217.160.116 chrome-infra-packages.appspot.com
172.217.160.116 appspot-preview.l.google.com
  • 安裝depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 
export PATH=$PATH:/yourpath/to/depot_tools //添加環(huán)境變量

<a name="Omhjf"></a>

源碼下載

  • fork一份flutter engine源代碼,官方不建議直接用官方git代碼進行編譯修改。官方的flutter engine源碼:https://github.com/flutter/engine<br />
  • 新建目錄engine 在engine中添加.gclient文件,內容如下,替換your_name_here為你的github name<br />
solutions = [
  {
    "managed": False,
    "name": "src/flutter",
    "url": "git@github.com:<your_name_here>/engine.git",
    "custom_deps": {},
    "deps_file": "DEPS",
    "safesync_url": "",
  },
]
  • 拉取代碼和依賴,在engine目錄下執(zhí)行gclient sync, 等待。。。。<br />
cd engine
gclient sync  //拉取Flutter引擎所有依賴的關聯(lián)庫

編譯源碼

  • 編譯前,需要調整到對應flutter工具的提交版本,不然可能會報錯。<br />
# 查看engine版本vim /path/to/flutter/bin/internal/engine.version
cd /path/to/engine/src/flutter
git reset --hard xxxxxxxxxxxxxxxxx
gclient sync -D --with_branch_heads --with_tags
  • 又是一小段等待,終于可以編譯engine了。
  • 這里以android debug模式編譯為例,更多的編譯模式參考官網。<br />
cd engine/src  //進入src目錄
./flutter/tools/gn --runtime-mode debug //生成Host編譯產物存放文件
./flutter/tools/gn --android --runtime-mode debug //生成android編譯產物存放文件
ninja -C out/host_debug -j 6
ninja -C out/android_debug -j 6
  • 大約一個小時的等待后,編譯成功,后續(xù)修改的話是增量編譯,不需要等那么久(也要幾分鐘,哈哈哈哈~)

使用編譯的engine

  • 命令行方式<br />
flutter create test_engine   //創(chuàng)建flutter工程
cd test_engine
flutter run --local-engine-src-path /path/to/engine/src --local-engine=android_debug
  • android studio方式<br />
  • 創(chuàng)建flutter工程, 在gradle.properties中新增localEngineOut指向你的編譯結果目錄
  • /path/to/engine/src/out/android_debug //這是真機模式,不適用于模擬器
image.png
image.png
  • 模擬器版本編譯<br />
cd engine/src
./flutter/tools/gn --android --android-cpu x64 --runtime-mode debug
ninja -C out/android_debug_x64 -j 6

使用方式,將 local-engine 或者 localEngineOut 指向 android_debug_x64<br />

image.png
image.png
<br />PS: 更多編譯產物可以參考http://www.itdecent.cn/p/ff84455fb451 編譯產物小節(jié)

編輯源碼

  • 編輯源碼,可使用vscode,把engine/out/compile_commands.json 文件鏈接到 engine/src/flutter目錄下,以使vscode支持代碼跳轉能力<br />
cd engine/src/flutter
ln -s ../out/compile_commands.json ./
  • 用vscode打開 engine/src/flutter,可進行編輯,java代碼跳轉能力貌似還有點弱。
  • vscode可以裝一些c++ java flutter dart json的插件
  • 插件安裝方法:
image.png
image.png
  • 修改源碼查看編譯是否生效效果<br />
  • java層如:
image.png
image.png
  • 使用 ninja -C out/android_debug_x64 -j 6 重新編譯(增量)
  • 運行效果:
image.png
image.png

<br />運行時如果出現安裝卡住或者不生效可以嘗試先stop再重新運行<br />
image.png
image.png
  • c++層<br />
image.png
image.png
  • 使用 ninja -C out/android_debug_x64 -j 6 重新編譯(增量)
  • 運行效果:
image.png
image.png
  • dart層修改<br />
image.png
image.png
  • 使用 ninja -C out/android_debug_x64 -j 6 重新編譯(增量)
  • 運行效果:
image.png
image.png

參考鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容