如何解決 Your project's Gradle version is incompatible with the Java version that Flutter is using for Gradle.


前言

為什麼會發生Gradle的問題? 

說這個問題之前就要先提到什麼是Gradle,Gradle就是Java的編譯打包工具之一,Android官方指定的打包工具,也就是Android開發者必備的技能之一。

開發過Android的人一定有發生過,舊的專案本來執行都好好的,但是換了新電腦,重新下載Android Studio將舊的專案要進行開發時,有時候就會發生gradle不支援的情形?

原因在於Android Studio的版本有必需的Gradle外掛版本,請見版本對應表
Gradle外掛版本又與專案內部的Gradle版本有相容的問題,請見版本對應表
Java版本也要與Gradle版本相容,請見版本對應表


本題開始

回到本題,由於Flutter在build Android app的部份,需要使用Gradle這個打包工具來進行編譯成APK。

而Java與Gradle的版本有其對應的關係存在,所以當Flutter專案裡面的Java版本與Gradle的版本對應不相容時,就會出現這個錯誤。在上面的錯誤訊息中也有提示可以前往版本對應表,找出適合的版本。


快速小結一下,解決的方法就是:

Java版本要與Gradle版本相容,Gradle版本要再與Android Gradle Plugin版本相容。


解決步驟

1. 修改在專案中的Gradle版本:

修改的方法是找出 gradle-wrapper.properties 檔案,將裡面的distributionUrl裡所列的版本號改成適合的版本號


假設修改為Gradle 7.5版,按下Android Studio的Run之後,就會看到Android Studio已經自動下載了一包對應版號的Gradle檔案。


接下來會發現有新的錯誤訊息:

Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/03 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/03 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/03 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01


原因在於Gradle 與Android Gradle Plugin版本不相容,繼續往下解決

2. 使用AGP工具

AGP是Android Gradle Plugin的簡稱,上面有提到Gradle是Java用來編譯打包的工具,而AGP是用來專門建構Android app的Gradle外掛工具。

在Flutter的開發過程,如果有要使用到Android相關的設定操作,建議使用Android Studio進行編輯,會比較方便


打開AGP Upgrade Assistant

使用AGP Upgrade Assistant的方法有兩個,一個是在Android Studio自動偵測到版本不相容的時候,就會出現提示的對話框,按下「Start AGP Upgrade Assistant」即可。


另一個方式是從工具列上的 Tools/AGP Upgrade Assistant 進入


打開AGP之後,使用下拉選擇適合的版本,然後按下「Run selected steps」




同步成功之後,再重新執行 Run,就可以正常build app了



Reference:

https://stackoverflow.com/questions/76123807/my-projects-gradle-version-is-incompatible-with-the-java-version-that-flutter-i

https://juejin.cn/post/7124585716146765837


留言

這個網誌中的熱門文章

ISO 27001 LA 主導稽核員 考照心得

Android如何實作強制App版本更新

如何實作從API抓取資料顯示在列表頁(ListView)上