作為軟件開發(fā),調(diào)試過程必不可少,那么在混編模式下有什么調(diào)試方案和技巧呢蒲稳?我們本地既有原生工程代碼,又有 Flutter 工程代碼伍派,想要同時調(diào)試原生代碼和 Flutter 代碼弟塞,一般有兩種方案:
方案一:iOS 和 Flutter 同時調(diào)試,不支持?jǐn)帱c(diǎn)
① Xcode 打開 iOS 項(xiàng)目拙已,運(yùn)行項(xiàng)目并打開 Flutter 項(xiàng)目頁面。
② Android Studio 打開嵌在 iOS 項(xiàng)目中的 Flutter 項(xiàng)目摧冀,控制臺選擇 Terminal 選項(xiàng)卡倍踪。在終端輸入命令行:flutter devices
,打印出已連接到計(jì)算機(jī)的設(shè)備索昂。
③ 在終端輸入如下命令行建车,后面的是 iPhone 的設(shè)備號,這里是模擬器椒惨。flutter attach
的作用是將當(dāng)前Flutter 項(xiàng)目連接到某個正在運(yùn)行的應(yīng)用程序上缤至。
flutter attach -d 60BB7784-43BA-4569-871A-3BA6D4E136D0
連接成功后,當(dāng)我們修改了 Flutter 項(xiàng)目的代碼后康谆,可以按照下面的快捷鍵在終端進(jìn)行相應(yīng)操作:
- 按
r
是熱重載领斥,局部刷新,刷新所有改動的 Flutter 代碼文件沃暗,此時就可以看到代碼改動后的結(jié)果 - 按
R
是熱重啟月洛,全部刷新,刷新所有的 Flutter 文件孽锥。如果Hot reload
刷新無效嚼黔,可以嘗試使用Hot restart
- 按
d
和q
都是終止連接,結(jié)束調(diào)試
Hot reload
和 Hot restart
區(qū)別:
-
Hot reload:將所有代碼更改加載到
VM
中惜辑,并重新構(gòu)建Widget
樹唬涧,但是不會重新運(yùn)行main()
或initState()
。 -
Hot restart:同樣將所有代碼更改加載到
VM
中盛撑,然后重新啟動 Flutter 應(yīng)用碎节,從而丟失應(yīng)用狀態(tài)。
Performing hot restart...
Restarted application in 680ms.
Performing hot reload...
Reloaded 0 libraries in 107ms (compile: 16 ms, reload: 0 ms, reassemble: 11 ms).
二撵彻、iOS 和 Flutter 同時調(diào)試钓株,支持?jǐn)帱c(diǎn)方案
① Android Studio 打開嵌在 iOS 項(xiàng)目中的 Flutter 項(xiàng)目实牡,工具欄點(diǎn)擊 Flutter Attach
。
此時控制臺 Debug
選項(xiàng)卡輸出日志信息:
在 Flutter 和 Native 混編的過程轴合,使用 flutter attach
同步代碼出現(xiàn)如上錯誤创坞。這是因?yàn)橛卸鄠€端口,選擇其中一個執(zhí)行就可以了受葛,一般選擇不帶數(shù)字的一個题涨。可以重新運(yùn)行 XCode 工程或者直接關(guān)掉模擬器总滩,重新連接纲堵。
Debug service listening on ws://127.0.0.1:61933/-4kIlDugw3g=/ws
Syncing files to device iPhone 14 Pro Max...
連接完成,可以進(jìn)行斷點(diǎn)調(diào)試闰渔。同樣在控制臺上邊可以通過點(diǎn)擊 Hot reload
和 Hot restart
按鈕來實(shí)現(xiàn)代碼修改的更新操作席函。
當(dāng)我們想要在 Flutter
側(cè)調(diào)試代碼的時候,只需要在控制臺上打好斷點(diǎn)就可以了冈涧,等APP運(yùn)行到斷點(diǎn)處時就會自動停止下來茂附,進(jìn)入斷點(diǎn)流程。