Flutter upgrade更新版本引發的無法啟動調試APP的錯誤 target:kernel_snapshot failed」

前言

我的主機上的Flutter 本地的分支是在 beta,因為去年想嘗鮮Flutter Web,所以一直沒切回來stable分支。

早上打開VSCode,右下角彈出了Flutter upgrade的選項,無意中看見自己的flutter 版本居然還在 1.12.13 ,手賤衝動開始了Flutter 版本更新,然後彈出waiting lock的提示,沒管它繼續讓它下載,然後過了一會提示flutter upgrade失敗了。

接着啟動項目調試,發現就失敗了,報錯的信息有幾百行,都是某些函數底部有紅波浪線提示報錯了,最後的原因為:

Cause:Target kernel_snapshot failed: Exception: Errors during snapshot creation: null...

但是運行 flutter doctor命令卻是一切正常的,都是打勾勾的。於是開始漫長查詢報錯解決:

在StackOverflow和Flutter官方的issue上,找到了應該比較靠譜的兩個解決方法

  1. Download latest version flutter sdk and setup. 更新Flutter SDK 最新的版本並設置
  2. Fix it by creating a new project and copying the code from the old one.創建一個新項目

因為我是因為更新版本才導致的出錯,所以我打算先選擇第二個方法,創建一個新項目試試看,

嘗試一:創建新項目

創建後,運行 flutter doctor,一切正常,然後運行啟動調試 flutter run ,報錯了和舊項目一樣的報錯信息。

說明這個方法行不通,我的問題不跟新舊項目配置有關。

嘗試二:切換分支到stable

使用flutter channel stable 失敗,顯示:Your local changes to the following files would be overwritte。

然後列出了很多修改過的文件與遠程庫分支不相同。

嘗試三:flutter 當前分支執行pull,與遠程同步(更新到最新版本) 成功解決!

定位到我的主機上存放flutter的根目錄 C:\flutter 下

執行git pull,出現了

git error:fatal: unable to access '//github.com/flutter/flutter.git/': OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054。

新的問題,先解決這個ErrorCode:10054問題的方案:

執行 git config –global http.sslVerify false

然後因為我的本地beta分支的文件已經落後遠程官方庫的beta分支接近2000次的commit了,所以我打算直接讓遠程的文件直接覆蓋掉我的本地文件

執行命令:git reset –hard ,回退到上一個commit的版本,也就是打算消除本地與遠程的差異。

執行命令:git pull origin beta,然鵝又出現錯誤了:

error: The following untracked working tree files would be overwritten by merge:後面接着一大堆文件和列表balabala

行吧,又得解決新的問題,

解決Error:The following untracked working tree files would be overwritten by merge的方案:

執行命令 git clean -d -fx會判斷刪除本地與遠程不相同的文件,當有無法刪除的文件不斷會詢問你 y or n,我遇到的 dart.exe 無法刪除就一直問我 y / n ? ,最後選擇了 n ,命令就繼續執行下去了,接着程序自動remove了很多很多文件。

然後我又又又再次執行 git pull,經過漫長等待,這次成功了,下面是成功時候的截圖,將本地分支(我的是beta),更新到與flutter Github上beta分支的最新版本了。

image-20200607195409600

接着重啟VSCode,運行Flutter Doctor,會重新進行依賴和下載Flutter Doctor所需要的tools,經過一段時間的等待後,Flutter Doctor顯示的結果依舊正常,不過Flutter SDK的版本已經從最初的1.12.13 更新為1.18.0了

image-20200607195750680

image-20200607195806184

終端運行 flutter run,新項目和舊項目都能正常的在真機和模擬器上運行了。折騰了一個下午終於搞定了,也說明這次補坑之旅可以告一段落了。

順帶一提

我的本地Flutter分支是 beta,如果你是stable或其他的分支,解決的方法也是同理的。

還有就是本次填坑的時候我沒有使用梯子(梯子剛好壞了),所以說如果你沒有梯子也不會有影響的,可能也就等待時間長一點點吧~

總結

如非必要或者做好要漫長填坑的準備,就不要點擊更新Flutter SDK或者執行flutter upgrade,否則你永遠猜不到接下來等待你的坑是什麼。

我是剛剛接觸Flutter的小白一個,不喜勿噴哈哈,也希望我的填坑分享對您有所幫助吧~

Tags: