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

KMM项目生成签名Release App Bundle时出现BuildConfig重复定义问题求助

Fixing "Type packageName.BuildConfig is defined multiple times" in KMM Release App Bundle

我之前也碰到过KMM项目里这个一模一样的问题!核心原因就是你的Android app模块和shared模块用了相同的包名,导致Release构建时两个模块生成的BuildConfig类重名冲突了——Debug模式下因为构建流程的差异(比如Debug的BuildConfig会有特殊处理,不会触发类路径冲突)没暴露问题,但Release模式下就撞车了。

下面是几个亲测有效的解决方法,按优先级推荐:

  • 方案一:给shared模块的Android目标指定独立包名
    这是最直接也最规范的做法,在shared模块的build.gradle.kts里找到Android目标配置,修改namespace为一个和app模块不同的名称,比如:

    android {
        namespace = "com.yourcompany.project.shared" // 比如app模块用com.yourcompany.project
        // 其他Android配置...
    }
    

    这样两个模块的BuildConfig会生成在不同的包路径下,彻底避免重名冲突。

  • 方案二:禁用shared模块的BuildConfig生成
    如果你根本不需要shared模块生成BuildConfig,可以直接关掉这个功能。在shared模块的build.gradle.kts的Android配置中添加:

    android {
        buildFeatures {
            buildConfig = false
        }
        // 其他Android配置...
    }
    

    这样shared模块就不会生成BuildConfig类,自然不会和app模块的版本冲突。

  • 方案三:通过R8规则处理重复类(不优先推荐)
    虽然你Release模式没开混淆,但可以添加R8规则来忽略重复的BuildConfig。在app模块的proguard-rules.pro文件中添加:

    -keep class com.yourcompany.project.BuildConfig { *; }
    -dontobfuscate
    

    注意把com.yourcompany.project换成你实际的包名。不过这个方案只是绕过问题,不如前两个方案从根源解决,所以只作为备选。

额外补充:为什么Debug模式没问题?因为Debug构建时,Android Gradle插件会给每个模块的BuildConfig添加模块相关的标识,或者在类加载逻辑上做了区分,所以不会触发重复定义的错误;但Release模式下会合并所有模块的类路径,严格检测重复类,就会抛出这个异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:47:31