Gradle升级至8.0后,如何为Flutter所有插件模块配置Namespace?
解决Gradle 8.0下Flutter插件模块未指定Namespace的构建错误
Gradle 8.0(对应Android Gradle Plugin 8.0)强制要求所有Android模块(包括库模块、Flutter插件模块)必须显式声明namespace,不再支持通过AndroidManifest.xml的package属性自动推断命名空间。你已经在主App模块配置了namespace,但报错的webview_pro_android插件模块未配置,导致构建失败。
以下是针对性解决方法:
1. 插件是本地开发的模块
如果webview_pro_android是你自己维护的本地插件:
- 找到项目中
android/webview_pro_android目录下的build.gradle文件 - 在
android代码块中添加namespace配置,命名空间建议保持和主App的风格一致,示例:android { compileSdkVersion 33 // 添加这一行 namespace 'com.appidname.webview_pro' defaultConfig { // 库模块不需要applicationId,可删除该配置 minSdkVersion 21 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } // 其他原有配置 }
2. 插件是第三方远程依赖
如果webview_pro_android是pub.dev或其他仓库的第三方插件:
- 优先检查插件是否有适配AGP 8.0的新版本,若有则直接升级插件版本到最新版(在
pubspec.yaml中更新依赖版本) - 若插件未更新,可临时通过项目级gradle文件统一配置默认命名空间:
打开项目根目录的android/build.gradle,添加subprojects代码块:
注意:此方案为临时 workaround,长期来看建议等待插件作者更新适配AGP 8.0。buildscript { // 原有配置... } allprojects { repositories { // 原有配置... } } // 添加以下代码 subprojects { afterEvaluate { project -> if (project.hasProperty('android')) { android { // 为所有未指定namespace的模块设置默认命名空间,可根据需求调整规则 namespace "com.appidname.plugins.${project.name.toLowerCase()}" } } } }
通用注意事项
- 所有Android模块的
namespace必须唯一,不能重复 - 库模块无需配置
applicationId,仅保留namespace即可 - 配置完成后执行
flutter clean清理缓存,再重新构建项目
内容的提问来源于stack exchange,提问作者Hammam Oktajianto
相关产品推荐
相关产品推荐

