Flutter upgrade更新版本引發的無法啟動除錯APP的錯誤 target:kernel_snapshot failed”
阿新 • • 發佈:2020-06-07
### 前言
我的主機上的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 'https://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](http://picbed-dmingou.oss-cn-shenzhen.aliyuncs.com/img/image-20200607195409600.png)
接著**重啟VSCode**,執行**Flutter Doctor,**會重新進行依賴和下載Flutter Doctor所需要的tools,經過一段時間的等待後,Flutter Doctor顯示的結果依舊正常,不過Flutter SDK的版本已經從最初的1.12.13 更新為1.18.0了
![image-20200607195750680](http://picbed-dmingou.oss-cn-shenzhen.aliyuncs.com/img/image-20200607195750680.png)
![image-20200607195806184](http://picbed-dmingou.oss-cn-shenzhen.aliyuncs.com/img/image-20200607195806184.png)
終端執行 **flutter run**,新專案和舊專案都能正常的在真機和模擬器上運行了。折騰了一個下午終於搞定了,也說明這次補坑之旅可以告一段落了。
#### 順帶一提
我的本地Flutter分支是 beta,如果你是stable或其他的分支,解決的方法也是同理的。
還有就是本次填坑的時候我沒有使用梯子(梯子剛好壞了),所以說如果你沒有梯子也不會有影響的,可能也就等待時間長一點點吧~
### 總結
如非必要或者做好要漫長填坑的準備,就不要點選更新Flutter SDK或者執行`flutter upgrade`,否則你永遠猜不到接下來等待你的坑是什麼。
我是剛剛接觸Flutter的小白一個,不喜勿噴哈哈,也希望我的填坑分享對您有所