Flutter升级后报错Namespace not specified?手把手教你5分钟修复

1,459 阅读2分钟

📢 问题现象

升级Flutter后运行项目,控制台出现以下错误:

What went wrong:
A problem occurred configuring project ':image_gallery_saver'.
> Could not create an instance of type... 
> Namespace not specified.

转存失败,建议直接上传图片文件
(此处可插入模拟错误截图)

🔍 问题根源

这是由Android Gradle插件(AGP)升级引起的变化:

  1. AGP 7.0+ 要求所有模块必须声明namespace
  2. 很多老版本插件未适配此要求(如图片库image_gallery_saver
  3. 错误提示中的:image_gallery_saver正是未声明命名空间的第三方库

🛠️ 解决方案

步骤 1 - 找到Android项目根目录

右键点击Flutter项目的android目录 → 打开根目录的 build.gradle

image.png

步骤 2 - 修改根build.gradle

打开android/build.gradle文件,在文件增加:

// 新增解决代码↓↓↓
subprojects {
    afterEvaluate { project ->
        if (project.hasProperty('android')) {
            project.android {
                // 自动为没有namespace的模块设置命名空间
                if (namespace == null) {
                    namespace project.group // 使用项目组名作为默认值
                    println("✅ [自动修复] 设置命名空间: ${project.group}")
                }
            }
        }
    }
}

如果android/build.gradle.kts在文件增加:

subprojects {
    println("project: ${project.name}")
    project.gradle.afterProject {
        val android = project.properties["android"] as BaseExtension?
        if (android != null && android.namespace == null) {
            println(" ${project.name} namespace is null chane to ${project.group}")
            android.namespace = project.group.toString()
        }
    }
}

步骤 3 - 清理并重新编译

在终端依次执行:

flutter clean
flutter pub get
flutter run

💡 补充说明

其实这个问题主要就是有些库不是最新的,或者长时间没有更新,没有去兼容更高的 Flutter or AGP 版本。关于老项目的namespace最可靠的来源是项目的AndroidManifest.xml,标签manifest 中的 package属性。

image.png

如果仍出现错误,可尝试手动配置命名空间:

  1. 找到报错模块的build.gradle(如image_gallery_saver/android/build.gradle
  2. android块内添加:
namespace 'com.example.your_namespace' // manifest 中的 package 属性值

📌 注意事项

  • 检查插件兼容性:建议升级image_gallery_saver到最新版
  • 同步Gradle版本:在android/gradle-wrapper.properties中确认使用兼容版本:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip