最近在學習 Flutter, 遇到一些奇奇葩葩的問題,各種買家秀與賣家秀令人懵逼,明明別人的程式碼也是這樣寫~~~~~~~~
一、Android 原生引入 flutter 的問題
其實這個引入步驟比較簡單
- 建立一個 flutter module
flutter create -t module flutter_module
複製程式碼
- 配置 android 專案
settings.gradle
檔案
setBinding(new Binding([gradle: this]))
evaluate(new File(
new settingsDir.parentFile,
'flutter module的目錄/.android/include_flutter.groovy'))
))
複製程式碼
- 在
build.gradle
配置檔案中新增依賴
implementation project(':flutter')
複製程式碼
整體配置就這麼簡單,但是執行的時候的時候,專案掛了,出現了以下錯誤
錯誤: 程式包android.support.annotation不存在
錯誤: 找不到符號
符號: 類 Fragment
錯誤: 找不到符號
符號: 類 NonNull
位置: 類 FlutterFragment
錯誤: 方法不會覆蓋或實現超型別的方法
錯誤: 找不到符號
符號: 方法 getArguments()
位置: 類 FlutterFragment
錯誤: 方法不會覆蓋或實現超型別的方法
錯誤: 方法不會覆蓋或實現超型別的方法
複製程式碼
檢視編譯後的原始碼,確實 flutter_module 中一些依賴包不存在
google 一番之後發現是 Android 包管理機制的問題,如果我們在安裝 Android Studio
的時候勾選了 Androidx
,會預設使用 androidx
管理, 如圖
對於這個,解決方案有
- 下載
Android Studio
重新安裝,這種比較麻煩 - 全域性修改配置,藉助
Android Studio
工具實現程式碼 遷移,詳情可參考 遷移指南 但是這些步驟還是不能解決我的問題,我的flutter_module 包依舊有一些舊的引用程式碼形式,仔細分析,我的 flutter_module 是通過flutter create -t module
這種方式實現的,可能是這種命令生成的程式碼是舊的包管理機制,猜想有沒有生成 androidx 機制的呢,Google 之後,發現真的有
flutter create --androidx -t module flutter_module
複製程式碼
完美解決,山重水複疑無路???不存在的,果真,解決方案總比問題多
二、Android 啟動不明原因
Process 'command 路徑/flutter/bin/flutter'' finished with non-zero exit value 1
複製程式碼
這個問題就更懵逼了,但是可以通過
build clean
複製程式碼
解決,原因還不是很清楚
三、總結
其實對於 前端同學,學習 flutter 過程中,可能更多的挑戰是對原生陌生,還是需要了解一些原生開發知識,不過,很多問題 google 以下,冷靜分析下還是能解決