Skip to content

wmuj/baidumap_flutter_demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# flutter_bmfmap_example

🚧 **重要说明(必看)**

本项目在 **Flutter 新版本(Android Gradle Plugin ≥ 8.x)** 环境下运行时,  
会遇到 **百度 Flutter 地图 / 定位插件构建失败的问题**。

这些问题并非使用方式错误,而是 **插件本身尚未完全适配新 Flutter / 新 AGP 体系**。

本仓库已对相关插件做了 **必要的兼容修复**,并将插件 **直接内置在项目中**,  
以避免大家在 AGP 8.x + Flutter 新版本环境下反复踩坑。

---

## ❗ 常见问题汇总(两个必踩坑)

如果你使用以下百度 Flutter 插件:

- `flutter_bmflocation`
- `flutter_baidu_mapapi_map`
- `flutter_baidu_mapapi_search`
- `flutter_baidu_mapapi_utils`

并且你的环境是:

- Flutter 3.x / 4.x
- Android Gradle Plugin ≥ 8.x
- Gradle ≥ 8.x
- JDK ≥ 17

你**大概率会依次遇到以下两个错误**### ❌ 问题一:缺少 namespace

```text
Namespace not specified. Specify a namespace in the module's build file.
```

❌ 问题二:Flutter Embedding v1 已废弃

error: cannot find symbol
PluginRegistry.Registrar

❓ 问题原因说明

1️⃣ namespace 问题(AGP 8+ 强制)

百度 Flutter 插件仍基于 旧版 Android Gradle Plugin(3.x)模板

  • Android Library Module 中 未声明 namespace
  • AGP 8+ 已强制要求所有 module 必须显式声明 namespace

因此在新 AGP 环境下会 直接构建失败


2️⃣ PluginRegistry.Registrar 问题(Embedding v1 已废弃)

插件中仍存在以下旧代码(Embedding v1):

public static void registerWith(PluginRegistry.Registrar registrar) {
}

Flutter 新版本 Android 端默认使用 Embedding v2PluginRegistry.Registrar 已不再可用,导致 Java 编译直接失败


✅ 本项目的解决方案(推荐)

✔️ 解决思路

  • 本仓库 已内置修复后的插件源码
  • ✅ 补充了 namespace
  • ✅ 移除了已废弃的 registerWith(PluginRegistry.Registrar)
  • 使用 path 本地依赖
  • 使用者 无需手动复制 pub cache
  • 一次修复,长期可用

📁 项目结构说明

flutter_bmfmap_example/
├── flutter_bmflocation-3.4.0/
│   └── android/
│       ├── build.gradle
│       └── src/main/java/
│           └── FlutterBmflocationPlugin.java
├── lib/
├── pubspec.yaml
└── README.md

🔧 已做的关键修改

✅ 1️⃣ 补充 namespace

文件路径:

flutter_bmflocation-3.4.0/android/build.gradle
android {
    namespace "com.baidu.flutter_bmflocation"
    compileSdkVersion 30

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        minSdkVersion 19
    }
}

✅ 2️⃣ 移除已废弃的 Embedding v1 代码

文件路径:

flutter_bmflocation-3.4.0/android/src/main/java/...
FlutterBmflocationPlugin.java

已删除以下方法:

public static void registerWith(PluginRegistry.Registrar registrar)

插件仅保留 Flutter Embedding v2 生命周期方法:

onAttachedToEngine(...)
onDetachedFromEngine(...)

🚀 使用方式(4 步跑起来)

1️⃣ 使用本地插件依赖

修改 pubspec.yaml

dependencies:
  flutter_bmflocation:
    path: flutter_bmflocation-3.4.0

2️⃣ 获取依赖

flutter pub get

3️⃣ 填入自己开放平台的 KEY

路径

---android\app\src\main\AndroidManifest.xml
<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="请在此输入您在开放平台上申请的API_KEY" />

4️⃣ 运行项目

flutter run

🎉 Android 端即可正常构建运行。


🖼️ 运行成功示例


⚠️ 注意事项

  • 不推荐直接修改 pub cache

    • 每次 flutter pub get 都可能被覆盖
  • ⚠️ 插件仍使用旧 AGP DSL

    • 后续升级 Flutter / AGP 可能仍需手动适配
  • ✅ 使用本仓库内置插件是目前最稳妥、可维护的方案


📌 环境参考

  • Flutter: 3.x / 4.x
  • Android Gradle Plugin: 8.x
  • Gradle: 8.x
  • JDK: 17(推荐)

🙏 致谢

感谢百度地图 Flutter 插件的维护者。 也希望这份文档能帮助更多开发者 少踩坑、快上手

如果你觉得本项目对你有帮助,欢迎 ⭐ Star 支持一下!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors