flutter_bluetooth_serial 插件的 android/build.gradle 文件中缺少 namespace 聲明

這個錯誤很常見,因為較新版本的 Android Gradle Plugin (AGP) 要求庫模塊(如 flutter_bluetooth_serial 插件的 Android 部分)在其 build.gradle 文件中明確指定 namespace。而 flutter_bluetooth_serial 的 0.4.0 版本可能是在此要求變得嚴格之前發布的。

問題原因:

flutter_bluetooth_serial 插件的 android/build.gradle 文件中缺少 namespace 聲明。

解決方案:手動修改插件的 build.gradle 文件

這是一個臨時的解決方法,因為每次 flutter clean 或 flutter pub get 更新插件時,這個修改可能會被覆蓋。但它可以讓你繼續開發。

  1. 找到插件的 build.gradle 文件:
    錯誤日誌中已經給出了路徑:
    C:\Users\small\AppData\Local\Pub\Cache\hosted\pub.dev\flutter_bluetooth_serial-0.4.0\android\build.gradle
  2. 找到插件的 AndroidManifest.xml 以確定其包名:
    通常在此路徑下:
    C:\Users\small\AppData\Local\Pub\Cache\hosted\pub.dev\flutter_bluetooth_serial-0.4.0\android\src\main\AndroidManifest.xml打開這個 AndroidManifest.xml 文件,你會在頂部的 <manifest> 標籤中找到 package 屬性。例如,它可能是這樣的:

<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”io.github.edufolly.flutterbluetoothserial”>
<!– … a. –>
</manifest>

這裡的 package=”io.github.edufolly.flutterbluetoothserial” 就是我們需要的命名空間。

3.修改插件的 build.gradle 文件:
打開步驟 1 中找到的 build.gradle 文件 (…flutter_bluetooth_serial-0.4.0\android\build.gradle)。
在 android { … } 區塊內,添加 namespace 聲明。使用你在步驟 2 中找到的包名。它看起來應該是這樣的(原來的內容保持不變,只添加 namespace 行):

    // ... (其他 gradle 配置)
    
    android {
        compileSdkVersion 33 // 或者插件指定的版本
        // >>> 在這裡添加 namespace <<<
        namespace "io.github.edufolly.flutterbluetoothserial" // 使用你在 AndroidManifest.xml 中找到的 package 名
    
        defaultConfig {
            minSdkVersion 19 // 或者插件指定的版本
            // ...
        }
        // ... (其他 android 配置)
    }
    
    // ... (其他 gradle 配置)
    重要: namespace 的值必須與該插件 AndroidManifest.xml 中的 package 屬性完全一致。對於 flutter_bluetooth_serial,它通常是 io.github.edufolly.flutterbluetoothserial。
    保存文件並重試 flutter run。

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *