Flutter填坑全面總結

AWeiLoveAndroid發表於2019-03-04

版權宣告:本文首發在公眾號Flutter那些事,未經授權,嚴禁轉載。

Flutter是一個新的跨平臺開發的工具,博主也玩了一段時間,一步步的踩著坑摸石頭過河,這其中受盡了各種各樣的坑,各種谷歌,stackoverflow,Flutter官網等查資料,然而有些問題還是不能及時解決,於是就自己嘗試著慢慢的摸索除了一些解決方案,在這裡就係統的整理一下分享給大家,只希望大家給個雞腿吃吃,今晚的晚餐就靠大家支援了!

★ 使用Flutter開發專案,我發現大部分問題都是環境配置出的問題,所以這裡先說 兩點需要特別注意的,請務必先按這兩點去做!

1、設定了國內映象和翻牆工具不能一起用 一旦一起用就會下載gradle或者依賴的第三方庫很慢 要麼下載不了 要麼直接報錯!!!


2、確保設定好環境,不管是 Gradle 還是 Android Studio 的配置

首次建立專案之後,別急著開發,首先確保 GradleAndroid Studio 的配置保持一致!

(1)下面這張圖是這幾者之間的關係,請先看仔細了:

Plugin版本( Android Studio 版本) Gradle 版本 對應的 Build Tools 版本
Android Studio 3.0.0+ Gradle 4.1+ Build Tools 26.0.2+
Android Studio 3.1.0+ Gradle 4.4+ Build Tools 27.0.3+
Android Studio 3.2.0+ Gradle 4.6+ Build Tools 28.0.3+

(2)檢視Android Studio 版本:點選單欄的 help --> About ,出現的彈窗的第一行就是AS的版本,比如我的是:Android Studio 3.1.3

Flutter填坑全面總結

Flutter填坑全面總結

(3)檢視專案中使用的gradle版本: 如圖所示,切換到project檢視,開啟android/app/gradle/gradle-wrapper.properties,然後就可以看到gradle版本資訊,如圖我這裡用的是gradle-4.10-2-all版本的

Flutter填坑全面總結

(4)本地gradle安裝版本:

Gradle預設安裝路徑 C:\Users\Administrator\.gradle\wrapper\dists\目錄。下載的所有gradle版本都會在這裡面。根據各人電腦安裝的gradle版本不同有所不同,我這裡顯示的我電腦安裝的版本,如圖所示,我們專案裡面使用的gradle-4.10-2-all就是在這個路徑,以後建立專案如果還要用到這個gradle配置就無需再去網上下載了。

Flutter填坑全面總結

(5)gradle更多版本,可以訪問gradle官網 services.gradle.org/distributio…

(6)關於Build Tools 版本的一些建議,建議下載Android SDK Platform 不同版本 以及對應的 Build Tools 版本。

操作方式:File --> Settings --> Appearance & Behavior --> System Settings --> Android SDK,重點關注SDK Platform 和 SDK Tools

關鍵詳細資訊截圖如下:

Flutter填坑全面總結


1、Flutter初次建立專案一直進不去,錯誤如圖所示:

Flutter填坑全面總結

【解決方式】開啟Android Studio安裝目錄下的 bin 目錄,找到 idea.properties 檔案,在檔案最後追加以下這行程式碼,disable.android.first.run=true ,然後儲存,以後開啟Android Studio建立專案就不會卡住了。


2、執行flutter doctor -v命令出現Android linceses status unknown的提示。

Flutter填坑全面總結

【問題分析:】新下載的sdk沒有同意Android協議。

【解決方案:】按錯誤提示所說的那樣,執行命令flutter doctor --android-licenses,然後出現的提示讓你選擇 y/n,你只要輸入y,然後回車,一直堅持到最後就好了。


3、Waiting for another flutter command to release the startup lock... 這個問題的解決

【問題分析:】你開啟新的flutter程式時,後臺有一個flutter程式沒有關閉,導致的衝突。

【解決方案:】關閉後臺dart程式,關閉IDE,然後重新開啟IDE,執行專案,執行到裝置試試看,基本問題不大了。 (一句話:重啟基本能解決問題


4、Unable to find git in your PATH

錯誤如圖所示:

Flutter填坑全面總結

【原因】未配置git環境變數或者配置不對。正確的應該是找到git根路徑\bin ,比如你的路徑是:E:\git\bin,你就把這個路徑配置到環境變數中。


5、flutter不是內部或者外部命令,也不是可執行的程式或者處理檔案。

Flutter填坑全面總結

【解決方案】把Flutter新增到環境變數。


6、git clone下載Flutter原始碼倉庫,出現error: RPC failed; curl 18 transfer closed with outstanding read data remaining

Flutter填坑全面總結

【原因】

由於Http協議錯誤,當Clone的時候,因為curl的postBuffer預設值太小的原因,而專案可能本身比較大,所以下載失敗。

【解決方案:】

開啟git命令列 輸入 git config –global http.postBuffer 524288000,然後可以輸入git config –list 檢視剛才的設定是否生效。

說明: git config –global http.postBuffer 524288000 命令的意思:相當於把curl的postBuffer的值修改的大一些。524288000的單位是B,相當於500MB。


7、執行flutter命令的時候,360防毒軟體彈窗提示有病毒。

Flutter填坑全面總結

【解決方案:】

點選右下角 信任此檔案 即可。建議執行flutter工程的時候,暫時關閉防毒軟體,如圖所示。 有時候升級flutter的時候也會爆出這樣的問題,建議關閉防毒軟體。


8、執行flutter install命令安裝apk到模擬器的時候報錯,報錯提示是:

Flutter填坑全面總結

【原因】由於使用了native libraries 。該native libraries不支援當前的cpu的體系結構。我當前用的是x86的模擬器。

【解決方案】開啟專案根目錄/android/app/build.gradle,在android節點裡面新增以下內容:

splits{
    abi {
        enable true
        reset()
        include 'x86''armeabi-v7a','x86_64'
        universalApk true
    }
}
複製程式碼

具體的請看下圖所示:

Flutter填坑全面總結

如果以上操作還不行就換一個arm的模擬器或者真機執行。如下圖就是執行在arm模擬器上的示範操作:

Flutter填坑全面總結


9、執行flutter upgrade命令過程中出現的問題。

Flutter填坑全面總結

【解決方案】重啟命令列,重新執行flutter upgrade命令,它會自動下載sdk需要的各種工具,這說明環境是沒問題的,配置也是沒問題的,網路也是OK的。如下圖所示:

Flutter填坑全面總結


10、編譯專案的過程中出現的版本相容問題,如圖所示。

Flutter填坑全面總結

【解決方案有以下幾種方式】

只要看到錯誤資訊含有which doesn't match any version 這樣的提示基本都可以使用以下解決方案:

    1. Flutter外掛版本太老,更新一下Flutter版本,再試試看。
  • 2.  在專案的根路徑的 pubspec.lock 檔案和 pubspec.yaml 檔案裡面搜尋,確保 pubspec.lock 檔案的引入的第三方外掛庫的版本號pubspec.yaml 檔案裡的 版本號一致

    1. 專案裡面引入的第三方外掛庫版本和開發環境不匹配導致的相容問題。建議把第三方外掛庫的原始碼下載下來,放到專案裡面去,然後去 修改外掛庫原始碼裡依賴的Flutter和Dart版本配置資訊 即可。使用原始碼是最好的解決方式。
    1. 在C盤的Flutter快取目錄,具體為:C:\Users\Administrator\AppData\Roaming\Pub\Cache\hosted,這裡面預設是一個名為 pub.dartlang.org 的資料夾,我們現在查詢看看有沒有叫做 pub.flutter-io.cn 的資料夾,如果有,為了省事,建議把pub.dartlang.org的資料夾裡面的檔案全部 拷貝 到pub.flutter-io.cn資料夾裡面就可以了。如果沒有,就 建立 一個名為 pub.flutter-io.cn 的資料夾,然後再執行拷貝工作。(一般來講,配置了國內映象的話,就會有 pub.flutter-io.cn 資料夾)。

然後檢查一下資料夾裡面有沒有我們報錯的那個包,如果有,請刪除,然後再去點選 pub get 下載更新一下。如圖所示:

Flutter填坑全面總結


11、flutter upgrade因為版本相容問題導致升級失敗。

Flutter填坑全面總結

【解決方案】這裡面是因為 flutter_tools 包的相容性問題 導致的,可能是sdk版本相容性問題,我們可以執行 flutter upgrade 升級一下Flutter再試試看,如果不行,就按 第六條 的去做。


12、Unsupported Android Studio version,意思是:Flutter外掛不支援當前AS版本。

Flutter填坑全面總結

【原因】

當前的AS是3.2的版本。Flutter外掛對AS3.2暫時還不相容(此問題是我在第一次建立flutter的時候出現的,時間是2018年5月份,不過現在flutter外掛已經相容AS3.2了,現在貌似沒有出現這個問題了。)。

以後如果還有更新的AS版本出來,只要Flutter外掛沒有及時更新的話,可能還會有版本相容的提示資訊。

【解決方案】

使用3.0或者3.1版本的AS開發就OK了。


13、執行flutter upgrade命令更新Flutter時,出現SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054

Flutter填坑全面總結

【解決方案】

開啟git命令列輸入 ·git config –global http.postBuffer524288000·,然後可以輸入 ·git config –list· 檢視剛才的設定是否生效。


14、使用flutter doctor命令出現的錯誤,這類錯誤可能有多種形式,它們都有一個共同的關鍵字 StartBitsTransferCOMException

我遇到的幾個不同的錯誤示例圖如下:

【解決方案】 原因有2個:

(1)BITS傳輸服務未開啟:

計算機 --> 右鍵 管理 --> 服務和應用程式裡面,點選服務,然後如下圖所示:

Flutter填坑全面總結

然後選中圖中標記的這個,右鍵點選屬性,然後改成自動,確定。如下圖所示:

Flutter填坑全面總結

(2)沒有設定國內映象:

如果你在國內使用 Flutter,那麼你可能需要找一個與官方同步的可信的映象站點,幫助你的 Flutter 命令列工具到該映象站點下載其所需的資源。你需要為此設定兩個環境變數:PUB_HOSTED_URL和FLUTTER_STORAGE_BASE_URL,然後再執行 Flutter 命令列工具。

需要新增國內映象到環境變數中。具體如下:

FLUTTER_STORAGE_BASE_URL: https://storage.flutter-io.cnPUB_HOSTED_URL: https://pub.flutter-io.cn
複製程式碼

如下圖所示:如果還出現下載錯誤 建議重啟電腦再試試看。

Flutter填坑全面總結


15、update_dart_sdk.ps1檔案裡面出錯,有多種錯誤表現形式,如下面3個圖所示。

我們可以看到這幾種錯誤的共同之處:都有 BitsTransformer 或者 CategoryInfo之類的字眼。

Flutter填坑全面總結

Flutter填坑全面總結

Flutter填坑全面總結

報的錯誤會有各種各樣,但是隻要有以上提到的兩種字眼的解決方式如下:

【解決方案】

建議 刪除Flutter根路徑/bin/cache資料夾,然後重新執行 flutter doctor 命令。

我電腦的Flutter根路徑/bin/cache資料夾所在位置如下圖所示:

Flutter填坑全面總結


16、 could not resolve all files for configuration 'classpath' could not find ling-gradle-api.jar

Flutter填坑全面總結

【解決方案:修改flutter安裝目錄裡面的flutter.gradle全域性配置

修改flutter安裝目錄裡面的flutter.gradle全域性配置


17、Please review your Gradle project setup in the android/ folder

Flutter填坑全面總結


18、android/app.gradle 裡面的語法錯誤導致的編譯失敗

project evaluation failed including an error in afterEvaluate{}

Flutter填坑全面總結


19、Bad UTF-8 encoding

Flutter填坑全面總結

相關文章