Flutter Engine編譯與應(yīng)用介紹

** 導(dǎo)語(yǔ) **mac系統(tǒng)上進(jìn)行flutter engine編譯和應(yīng)用的介紹


官方介紹

環(huán)境依賴準(zhǔ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
  • 使用默認(rèn)python 2.7
  • 一些網(wǎng)絡(luò)可能會(huì)有chrome-infra-packages.appspot.com報(bào)錯(cuò)腹殿,可能會(huì)下載一些依賴失敗蛤克。編輯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代碼進(jìn)行編譯修改疏之。官方的flutter engine源碼:https://github.com/flutter/engine<br />
  • 新建目錄engine 在engine中添加.gclient文件胆筒,內(nèi)容如下朽色,替換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í)行g(shù)client sync, 等待齿兔。。础米。分苇。<br />
cd engine
gclient sync  //拉取Flutter引擎所有依賴的關(guān)聯(lián)庫(kù)

編譯源碼

  • 編譯前,需要調(diào)整到對(duì)應(yīng)flutter工具的提交版本屁桑,不然可能會(huì)報(bào)錯(cuò)医寿。<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模式編譯為例靖秩,更多的編譯模式參考官網(wǎng)。<br />
cd engine/src  //進(jìn)入src目錄
./flutter/tools/gn --runtime-mode debug //生成Host編譯產(chǎn)物存放文件
./flutter/tools/gn --android --runtime-mode debug //生成android編譯產(chǎn)物存放文件
ninja -C out/host_debug -j 6
ninja -C out/android_debug -j 6
  • 大約一個(gè)小時(shí)的等待后竖瘾,編譯成功沟突,后續(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指向你的編譯結(jié)果目錄
  • /path/to/engine/src/out/android_debug //這是真機(jī)模式,不適用于模擬器
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: 更多編譯產(chǎn)物可以參考http://www.reibang.com/p/ff84455fb451 編譯產(chǎn)物小節(jié)

編輯源碼

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

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

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涵亏,一起剝皮案震驚了整個(gè)濱河市宰睡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌气筋,老刑警劉巖拆内,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異宠默,居然都是意外死亡麸恍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門搀矫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抹沪,“玉大人,你說(shuō)我怎么就攤上這事瓤球∪谂罚” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵卦羡,是天一觀的道長(zhǎng)噪馏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)绿饵,這世上最難降的妖魔是什么欠肾? 我笑而不...
    開(kāi)封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮拟赊,結(jié)果婚禮上刺桃,老公的妹妹穿的比我還像新娘。我一直安慰自己吸祟,他們只是感情好瑟慈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著屋匕,像睡著了一般封豪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炒瘟,一...
    開(kāi)封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天吹埠,我揣著相機(jī)與錄音,去河邊找鬼。 笑死缘琅,一個(gè)胖子當(dāng)著我的面吹牛粘都,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刷袍,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼翩隧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了呻纹?” 一聲冷哼從身側(cè)響起堆生,我...
    開(kāi)封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雷酪,沒(méi)想到半個(gè)月后淑仆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哥力,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年蔗怠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吩跋。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寞射,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锌钮,到底是詐尸還是另有隱情桥温,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布梁丘,位于F島的核電站侵浸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏兰吟。R本人自食惡果不足惜通惫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一茂翔、第九天 我趴在偏房一處隱蔽的房頂上張望混蔼。 院中可真熱鬧,春花似錦珊燎、人聲如沸惭嚣。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晚吞。三九已至,卻和暖如春谋国,著一層夾襖步出監(jiān)牢的瞬間槽地,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捌蚊,地道東北人集畅。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缅糟,于是被迫代替她去往敵國(guó)和親挺智。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355