這個錯誤很常見,因為較新版本的 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 更新插件時,這個修改可能會被覆蓋。但它可以讓你繼續開發。
- 找到插件的 build.gradle 文件:
錯誤日誌中已經給出了路徑:
C:\Users\small\AppData\Local\Pub\Cache\hosted\pub.dev\flutter_bluetooth_serial-0.4.0\android\build.gradle - 找到插件的 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。