引入动态功能模块后Android Release构建Manifest合并失败
问题解答
1. Manifest合并工具判定包名重复的原因
Android Gradle Plugin(AGP)构建过程中,Manifest合并工具优先读取各模块build.gradle中声明的namespace作为模块的唯一包名标识,而非直接读取AndroidManifest.xml中定义的package属性。你当前的动态功能模块未在build.gradle中声明独立namespace,AGP会自动继承主模块:app的namespace值de.abc.someapp,合并工具检测到两个模块使用了相同包名,因此抛出冲突错误。
2. 问题根本原因
动态功能模块some_dynamic_feature的build.gradle配置中缺失独立的namespace声明:
- AGP 7.0+版本已完全废弃
AndroidManifest.xml中的package属性作为模块包名标识,仅以build.gradle中的namespace为准 - 动态功能模块要求必须配置与主模块不同的独立
namespace,未配置时默认继承主模块的namespace,触发Manifest合并的包名校验规则
3. 解决方案
在some_dynamic_feature模块的build.gradle的android配置块中添加namespace声明即可,参考配置如下:
android { compileSdkVersion Versions.AndroidSdk.compile // 新增namespace配置,值与你原Manifest中定义的package保持一致即可 namespace "de.abc.someapp.dynamic" defaultConfig { minSdkVersion Versions.AndroidSdk.min targetSdkVersion Versions.AndroidSdk.target } }
修改完成后执行clean再重新构建Release版本即可解决冲突。如果使用的是AGP 7.0以下版本,也可以同步删除AndroidManifest.xml中的package属性避免冗余配置。
内容的提问来源于stack exchange,提问作者Ostkontentitan
相关产品推荐
相关产品推荐

