估計有不少小夥伴像我同樣早早的就體驗了flutter,而後拋棄了,看到發佈1.0,又想搗鼓一番;android
1.不要使用pub get
或pub upgrade
命令來管理你的依賴關係。相反,應該使用flutter packages get
或flutter packages upgrade
ios
2.使用flutter時報錯「Error: Unable to 'pub upgrade' flutter tool:git
找到clone下來的flutter庫, 刪除bin目錄下的cache文件夾github
export PUB_HOSTED_URL=pub.flutter-io.cnjson
export FLUTTER_STORAGE_BASE_URL=storage.flutter-io.cnxcode
git clone -b dev github.com/flutter/flu…app
export PATH="$PWD/flutter/bin:$PATH"異步
cd ./flutteride
flutter doctorpost
參考:https://flutter.io/community/china
https://flutterchina.club/upgrading/
如下內容爲轉載
做者:否極泰來_2662
連接:https://www.jianshu.com/p/bf3002de6a5e
來源:簡書
解決方案
在Debug.xcconfig中指定 「FLUTTER_BUILD_MODE=debug」,Release.xcconfig中指定「FLUTTER_BUILD_MODE=release」
錯誤分析
這看起來是在模擬器編譯環境下選擇了真機的Framework什麼的,後來查詢發現是沒有設置這個變量。由於工程的Build Phases裏運行了<"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build>相關命令,而xcode_backend裏爲build_mode變量設置了默認值"release",這使得在查找Flutter.framework等編譯所需的「原材料」時,默認選擇了release的目錄,致使了這個錯誤,因此,加上debug這個設置後,會去ios這個目錄中查找相關文件,就不會有問題了。附目錄截圖:
注:所在目錄 flutter/bin/cache/artifacts/engine/
解決方案
1.) Start the Android Studio application
2.) Open plugin preferences (Preferences>Plugins on macOS, File>Settings>Plugins on Windows & Linux).
3.) Select Browse repositories…, select the Flutter plug-in and click install .
4.) Click Yes when prompted to install the Dart plugin.
5.) Click Restart when prompted.
錯誤分析
若是你使用的是iOS開發環境或者沒有安裝Flutter插件的Android Studio,會報這個錯誤。Flutter是Google開發的移動開發SDK,爲了方便,基於本身的IDE開發了Flutter插件,以方便集成過程。在Flutter生成雙端產物的時候,須要通過插件作一些操做。
解決方案
執行 「flutter doctor --android-licenses」 命令
會問你'Do you want to review the licenses?',輸入「y」 而後 回車,這時再執行一次flutter doctor就行了
解決方案
方案一:flutter clean一下,再次 flutter run/build
方案二:將flutter run的進程終止掉從新 flutter run/build
方案三:看看你的FlutterPluginRegistrant產物是否存在,是否更新了
錯誤分析
問題本質是Plugin的方法沒有找到,也多是Plugin自己就沒有註冊成功。老版本的Flutter SDK遇到這個問題多是沒有觸發GeneratedPluginRegistrant.register(this),新版本的已經不須要手動觸發了。
解決方案
rm ./flutter/bin/cache/lockfile
錯誤分析
緣由是在flutter編譯等操做運行過程當中,會建立一個文件鎖,可是因爲一些緣由鎖沒有釋放致使的,並且一直沒法釋放……
解決方案
方案一:若是集成方式是靜態庫(.a),須要在引用Flutter的工程中,修改Build settings中的Header Search Paths,將Flutter所在目錄加入其中。
方案二:若是集成方式是動態庫(.framework),說明在引用Flutter的工程中並無依賴成功,須要檢查Flutter.framework包內是否包含Headers文件夾,是否其中包含Flutter.h,另外就是Podspec和podfile是否正確。還有,Cocoapods必須1.5版本及以上。
方案三:若是你用的podspec.json,試試改寫成podspec(這個坑曾讓我浪費了幾天的時間……)
解決方案
依賴產物只針對 真機 ,但調試中使用了另外一種 模擬器。或者反過來了。
錯誤分析
真機和模擬器的平臺是不一樣的,符號也不一樣。
解決方案
方案一:從新pod install
方案二:刪除workspace、podfile.lock、Pods/、~/Library/Developer/Xcode/DerivedData
方案三:
一、運行sudo gem install cocoapods-deintegrate安裝快速解除項目cocopods依賴的庫
二、安裝成功後,cd到你項目的更目錄運行pod deintegrate解除項目cocopods依賴
三、運行pod install,從新安裝cocopods
錯誤分析
Cocoapods的鍋……
解決方案
在podfile中禁止bitcode
錯誤分析
Flutter相關集成是不支持bitcode的,因此須要將相關產物的bitcode功能關閉。若是你的現有工程中倉庫衆多,有的倉庫是必須bitcode的,這樣的話就須要每次pod install以後再在工程配置中手動設置回來,如下腳本放在podfile中能夠解決此問題。
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name =="App" || target.name =="Flutter"
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] ='NO'
end
end
end
end
解決方案
執行如下命令
brew update
brew uninstall --ignore-dependencies libimobiledevice ios-deploy cocoapods
brew uninstall --ignore-dependencies usbmuxd
brew install --HEAD usbmuxd
brew unlink usbmuxd
brew link usbmuxd
brew install --HEAD libimobiledevice
brew install ideviceinstaller ios-deploy cocoapods
解決方案
用Release產物集成
問題分析
爲了實現Hot refresh功能,Flutter在Debug下作了不少工做,影響了性能,能夠經過修改
FLUTTER_BUILD_MODE的值("debug" => "release")
使用Release產物集成的方式屏蔽這部分影響。注意,flutter_assets是須要同時更新的,Debug產物中含有kernel_blob.bin文件,Release產物則沒有。
解決方案
採用繼承、Category同名方法等方式,覆蓋FlutterViewController的splashScreenView的get方法,直接返回成員變量,將中間的讀取LaunchScreen頁面過程覆蓋掉,甚至能夠自定義本身的邏輯。
問題分析
Flutter的渲染是異步的,第一次加載須要建立Application和頁面,沒法及時返回結果,因此Flutter本身把這部分邏輯加到了SDK內部,實際上是爲了解決 「純Flutter App首屏白屏」 問題,但給咱們這種混編的App帶來了麻煩。