Flutter 踩坑

默翁發表於2019-08-26

最近在學習 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 中一些依賴包不存在

Flutter 踩坑

google 一番之後發現是 Android 包管理機制的問題,如果我們在安裝 Android Studio 的時候勾選了 Androidx,會預設使用 androidx 管理, 如圖

Flutter 踩坑

對於這個,解決方案有

  1. 下載Android Studio重新安裝,這種比較麻煩
  2. 全域性修改配置,藉助 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 以下,冷靜分析下還是能解決

相關文章