Flutter: win10下 cmd 內 flutter doctor 環境設定問題與必須要知道的開發資源

 


https://github.com/flutter/flutter

對,我最近在學Flutter...因為開發android 後又要開發ios...

然後這過程實在累死人了...我花了一個月開發一個android app,又要花兩個月開發ios,然後ios的設計又需要重新設計... 

人力不足,開發兩個平台後又累,產出的app效果又不好,通常android app強的人, ios app就會弱....

我真的受夠了,一次要開發兩種平台app.在一般公司不大的情況下,花兩倍人力的資源在開發app上實在不划算。

google最近發佈了flutter 2.0 所以我決定花點時間開發看看flutter...他用dart. 跟java有點像.然後也是用android studio ide.

為何不用同一套code與邏輯開發一次程式就好了???

一套code然後7個平台都可run...

這才是聰明人的做法吧.

(試想如果各個平台都要單獨開發,要七組人,研發費用是七倍啊~)

-安裝flutter sdk:

但按照google指示安裝flutter sdk後 , 遇到一連串環境設定問題....
C:\Windows\System32>flutter doctor --android-licenses
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)


似乎是 OpenJDK 15後 java.se.ee doesn't exist anymore. 所造成...

Java 11/11+, which doesn't have Java EE modules.

Oraclx 又在亂搞...害大家之後安裝軟體都會出問題...買下java後,就一直破壞java的穩定度,移除東移除西,導致用java的人或相關軟體一直出問題.這家公司為了賺錢真是害死大家. 

但是安裝flutter時會強迫大家要安裝jdk/ java sdk才可....無法逃避.

此時,我想暫時先用回舊版jdk試試, 這才發現目前連download舊版jdk8 ,Oracelx公司都要求登入,真是可惡.


連下載個jdk都要求登入,很多人就是不想要登入跟註冊.

Ora公司這樣,會搞到很多惡意軟體特別去偽造jdk,很可能間接造成病毒流行....


修正方法:

先不要用java 15.先裝jdk 8...從openjdk 那下載

設定Path

 

設定完後cmd下執行flutter doctor還是一樣有錯誤訊息,

但是我實際上 android sdk 29與  buildtools 28.0.3都有安裝。..(issue: Flutter does not find android sdk)

所以感覺flutter sdk接連出包。..

先是jdk, 而現在是偵測android sdk出問題....


實際開發app後要換回jdk 15...


 執行flutter doctor更慘,兩個錯....

結論是win10, flutter sdk 在cmd下執行flutter doctor 就是會出問題....

所以先不要管它吧...

改用 android studio 內建的flutter指令列就好了...很奇怪...

所以這個問題就是不要管它了,此時不要要求完美,等日後flutter團隊會再去修正它吧....

只要android studio下flutter doctor沒問題就可以了, 不要管cmd下會出錯的問題, 

先直接開發app吧.

hello world app可以順利build出來.

...

但這樣不對啊... 有錯誤訊息總是不舒服....

 還是再次檢查一下,所有元件:

問題: 發現win10沒安裝最新版PowerShell.... so 我決定來安裝PowerShell 7  at win10最新版



確認版本號: 7.1.2 是最新的(未來可能會進版)

把android studio內建的JRE設定到JAVAHOME

再次執行flutter doctor: 出現 一個x, 一個驚嘆號!

按照指示執行 flutter doctor --android-licenses

同意所有條款yes.... (你不同意就沒法繼續...這是強迫的)

---------------------------------------
Accept? (y/N): y
All SDK package licenses accepted

一直到出現上面訊息.

再次執行 flutter doctor, ---> 而這次licenses 有打勾了,沒出錯了.

 -------

再次: 發現問題點: ANDROID_SDK_ROOT   沒設定!

設定在全域變數,設定好後,要指向android sdk目錄,設定好後 , 記得要重開機.

感覺問題好像是這引起的, 故把JAVA_HOME變數換回java sdk new version: jdk 15  --->記得是設定完~"全域變數"win10一定要重開機才會生效. 

ps: (開發app最好還是用最新的穩定版java sdk)


 

再次執行flutter doctor:


all pass...

這才是解決問題的方式阿...

所以不用裝jdk 8 , 所以也不用怪 oracelx..., flutter 偵測不到正確的android sdk version也不是flutter 的錯...

也不用去設定 set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee

網路上一堆說明是錯誤的.

是我自己忘了設定 ANDROID_SDK_ROOT !!!!

flutter guide document 也沒提到....

所以記得flutter doctor 要全部顯示打勾才算完成flutter 開發環境設定.

(ps: 所以前面提到的安裝open jdk8 這步驟可以省了,也可以移除jdk8..)

現在才開始要設計app...因為flutter環境設定問題延遲了2天


推薦: dart 的教學課程:

https://www.youtube.com/playlist?list=PL274L1n86T83ps4pzbc6cFSpW38jJSdEb



另外:我們知道 flutter 專案被使用在google pay.

google pay評估了各種選項之後,選擇Flutter。  

they selected Flutter is cross-platform and uniform experience.

他們選擇flutter的三個原因是:  

1.可以在Dart中編寫一次,然後在iOS和Android上進行部署,從而在Android和iOS上獲得統一的最佳體驗。  

(Write once in Dart and deploy on both iOS and Android for a uniform best-in-class experience)

2.及時的編譯器在開發過程中具有熱重載功能,可以在UI上進行快速迭代,從而極大地提高了開發人員的效率;  

(Just-in-Time compiler with hot reload feature for increased developer efficiency and faster UI changes)

3.提前編譯可確保高性能部署。(這點改善了與其他類型框架之間比較後的缺點)

(Ahead-of-time compilation ensured high-performance deployment)

既然google 本身這麼大的企業都用了flutter...我們實在沒理由不用. 


對於小企業Flutter有何益處?

How Flutter Is Advantageous To SOHO?

  • 大大減少了應用開發時間(It drastically reduces app development time)
  • 出色的性能和最佳的用戶體驗(Excellent performance and best user experience)
  • 易於整合和強大的社群支持(Ease of integration and great community support)
  • 團隊更快樂,生產力更高(Happier teams and increased productivity)
  • Visually-appealing apps for both iOS and Android platforms
  • Uses Dart language to improve overall performance

目前我正在學習dart 與flutter, 已經快兩週,感覺跟java與原生android app development開發過程很類似.

學習flutter必看的dart語言指南:

https://levelupprogramming.net/dart-language-tutorial-for-programmers-e1ff2c8b7d86

開始設計flutter, 第一個程式,最基本的hello world: StatefulWidget+floatingActionButton

不需手機,網頁也可以跑.


用Flutter可以做出許多漂亮的介面,像下圖:

 


 

留言

這個網誌中的熱門文章

最爛的銀行服務-玉山銀行

Mark App Design Apps - Terms and Privacy Policy (服務條款,隱私權政策)

SMR疊瓦式hdd致命缺陷被解決????!!!

ios app 上架時app icon要注意事項

更改google drive預設存放目錄位置Change Google Drive Default Folder Location in Windows

google play 正式發布前測試報告...非常好用.

舊有app在Android 12 閃退問題& app Splash screens

app bundle and bundletool. 關於aab安裝問題

關於google play console app應用程式簽署

Google Play badge徽章產生器