You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AGP 7.3.1清单合并失败求助:namespace与applicationId配置冲突

问题分析与解决

为什么会出现这个冲突?

AGP 7.0+ 开始,namespace 参数会自动注入到所有 AndroidManifest.xml 的 <manifest> 标签的 package 属性中,用来替代原来 Manifest 里的 package 承担资源命名空间、R 类包名的作用。你遇到的冲突本质是:

  • AGP 自动给所有 Manifest 注入了 package="org.sample.packageid"(来自你配置的 namespace)
  • 但某个 Manifest 文件(或构建缓存)中还存在旧的 package="org.sample.appid"(对应你的 applicationId)
    两者无法合并,因为 Manifest 的 <manifest> 属性不支持合并逻辑,必须保持一致。

你说已经移除了所有 Manifest 的 package 属性,但冲突依然存在,大概率是构建缓存残留或者某个 Manifest 文件没清理彻底(比如 debug 清单的分支文件、被忽略的变体清单)。

解决步骤

  1. 彻底检查所有 Manifest 文件
    遍历 src/main/、src/debug/、src/release/ 以及所有 product flavor 对应的 Manifest,确保没有任何 <manifest> 标签带有 package 属性。可以用 Android Studio 的全局搜索功能(Ctrl+Shift+F)搜索 manifest@package 或 package= 排查残留。

  2. 清理构建缓存
    在项目根目录执行命令:

    # Windows
    gradlew clean
    
    # Mac/Linux
    ./gradlew clean
    

    清除所有旧的构建产物和缓存,避免 AGP 使用之前缓存的 Manifest 内容。

  3. Invalidate Caches 并重启 Android Studio
    点击顶部菜单 File > Invalidate Caches...,勾选 Invalidate and Restart,彻底清除 IDE 缓存。

  4. 确认变体配置无冲突
    检查 build.gradle.kts 中是否为 debug 变体单独设置了 namespace,比如:

    android {
        buildTypes {
            debug {
                // 不要在这里设置与全局不一致的 namespace
                // namespace = "..."
                applicationIdSuffix ".debug" // 此配置允许,不会影响 package 属性
            }
        }
    }
    

    确保所有变体的 namespace 与全局配置一致,applicationId 可通过后缀修改,但不会影响 Manifest 的 package 属性。

补充:namespace 和 applicationId 的区别

  • namespace:决定资源的命名空间、R 类的包名,是代码和资源的逻辑包名,必须与所有 Manifest 中自动注入的 package 属性一致。
  • applicationId:是应用在 Android 系统中的唯一标识,用于安装、推送、权限等,与 namespace 可以不同,但不会影响 Manifest 的 package 属性。

内容的提问来源于stack exchange,提问作者don11995

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:05:46